56    fold(
const std::vector<llvm::Constant*>& args,
 
   57         const SignatureT& function,
 
   62        llvm::Constant* constant = args[I-1];
 
   63        const llvm::Type* type = constant->getType();
 
   64        if (type->isIntegerTy()) {
 
   66            llvm::ConstantInt* cint =
 
   67                llvm::cast<llvm::ConstantInt>(constant);
 
   68            const uint64_t val = cint->getLimitedValue();
 
   69            return call<uint64_t, ArgumentValueType>(args, function, C, val, ts...);
 
   71        else if (type->isFloatTy() || type->isDoubleTy()) {
 
   73            llvm::ConstantFP* cfp =
 
   74                llvm::cast<llvm::ConstantFP>(constant);
 
   75            const llvm::APFloat& apf = cfp->getValueAPF();
 
   76            if (type->isFloatTy()) {
 
   77                const float val = apf.convertToFloat();
 
   78                return call<float, ArgumentValueType>(args, function, C, val, ts...);
 
   80            if (type->isDoubleTy()) {
 
   81                const double val = apf.convertToDouble();
 
   82                return call<double, ArgumentValueType>(args, function, C, val, ts...);
 
   85        else if (type->isArrayTy()) {
 
 
  105        return Next::fold(args, function, C, Out(arg), ts...);