reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

tools/clang/lib/CodeGen/CGBuiltin.cpp
 7468       Ops.push_back(EmitScalarExpr(E->getArg(i)));
 7476       Ops.push_back(llvm::ConstantInt::get(getLLVMContext(), Result));
 7485     Ops.push_back(EmitScalarExpr(E->getArg(E->getNumArgs() - 1)));
 7486     Value *Result = EmitCommonNeonSISDBuiltinExpr(*this, *Builtin, Ops, E);
 7505     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7506     return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, HalfTy), Ops, "vabs");
 7516     Value *Ptr = Builder.CreateBitCast(Ops[0], Int128PTy);
 7525     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7526     bool Is64 = Ops[0]->getType()->getPrimitiveSizeInBits() == 64;
 7529     Ops[0] = Builder.CreateBitCast(Ops[0], FTy);
 7529     Ops[0] = Builder.CreateBitCast(Ops[0], FTy);
 7531       return Builder.CreateFPToUI(Ops[0], InTy);
 7532     return Builder.CreateFPToSI(Ops[0], InTy);
 7540     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7541     bool Is64 = Ops[0]->getType()->getPrimitiveSizeInBits() == 64;
 7544     Ops[0] = Builder.CreateBitCast(Ops[0], InTy);
 7544     Ops[0] = Builder.CreateBitCast(Ops[0], InTy);
 7546       return Builder.CreateUIToFP(Ops[0], FTy);
 7547     return Builder.CreateSIToFP(Ops[0], FTy);
 7557     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7560     if (Ops[0]->getType()->getPrimitiveSizeInBits() == 64)
 7562     else if (Ops[0]->getType()->getPrimitiveSizeInBits() == 32)
 7566     Ops[0] = Builder.CreateBitCast(Ops[0], InTy);
 7566     Ops[0] = Builder.CreateBitCast(Ops[0], InTy);
 7568       return Builder.CreateUIToFP(Ops[0], FTy);
 7569     return Builder.CreateSIToFP(Ops[0], FTy);
 7575     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7576     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7576     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7578       return Builder.CreateFPToUI(Ops[0], Int16Ty);
 7579     return Builder.CreateFPToSI(Ops[0], Int16Ty);
 7585     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7586     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7586     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7588       return Builder.CreateFPToUI(Ops[0], Int32Ty);
 7589     return Builder.CreateFPToSI(Ops[0], Int32Ty);
 7595     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7596     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7596     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7598       return Builder.CreateFPToUI(Ops[0], Int64Ty);
 7599     return Builder.CreateFPToSI(Ops[0], Int64Ty);
 7613     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7633     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "fcvt");
 7633     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "fcvt");
 7634     return Builder.CreateTrunc(Ops[0], Int16Ty);
 7644     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7652       Int = Intrinsic::aarch64_neon_facge; std::swap(Ops[0], Ops[1]); break;
 7652       Int = Intrinsic::aarch64_neon_facge; std::swap(Ops[0], Ops[1]); break;
 7654       Int = Intrinsic::aarch64_neon_facgt; std::swap(Ops[0], Ops[1]); break;
 7654       Int = Intrinsic::aarch64_neon_facgt; std::swap(Ops[0], Ops[1]); break;
 7656     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "facg");
 7656     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "facg");
 7657     return Builder.CreateTrunc(Ops[0], Int16Ty);
 7665     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7673     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "fcvth_n");
 7673     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "fcvth_n");
 7674     return Builder.CreateTrunc(Ops[0], Int16Ty);
 7682     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7687       Ops[0] = Builder.CreateSExt(Ops[0], InTy, "sext");
 7687       Ops[0] = Builder.CreateSExt(Ops[0], InTy, "sext");
 7691       Ops[0] = Builder.CreateZExt(Ops[0], InTy);
 7691       Ops[0] = Builder.CreateZExt(Ops[0], InTy);
 7694     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "fcvth_n");
 7738     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7740         Ops[0], ConvertType(E->getCallReturnType(getContext())),
 7746     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7748         Ops[0], ConvertType(E->getCallReturnType(getContext())),
 7754     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7756         Ops[0], ConvertType(E->getCallReturnType(getContext())),
 7762     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7764         Ops[0], ConvertType(E->getCallReturnType(getContext())),
 7770     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7772         Ops[0], ConvertType(E->getCallReturnType(getContext())),
 7776     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 7777     Ops[0] = Builder.CreateBitCast(Ops[0], Int64Ty);
 7777     Ops[0] = Builder.CreateBitCast(Ops[0], Int64Ty);
 7778     Ops[0] =
 7779         Builder.CreateICmpEQ(Ops[0], llvm::Constant::getNullValue(Int64Ty));
 7780     return Builder.CreateSExt(Ops[0], Int64Ty, "vceqzd");
 7796     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7797     Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 7797     Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 7798     Ops[1] = Builder.CreateBitCast(Ops[1], DoubleTy);
 7798     Ops[1] = Builder.CreateBitCast(Ops[1], DoubleTy);
 7799     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7799     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7799     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7800     return Builder.CreateSExt(Ops[0], Int64Ty, "vcmpd");
 7816     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7817     Ops[0] = Builder.CreateBitCast(Ops[0], FloatTy);
 7817     Ops[0] = Builder.CreateBitCast(Ops[0], FloatTy);
 7818     Ops[1] = Builder.CreateBitCast(Ops[1], FloatTy);
 7818     Ops[1] = Builder.CreateBitCast(Ops[1], FloatTy);
 7819     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7819     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7819     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7820     return Builder.CreateSExt(Ops[0], Int32Ty, "vcmpd");
 7836     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7837     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7837     Ops[0] = Builder.CreateBitCast(Ops[0], HalfTy);
 7838     Ops[1] = Builder.CreateBitCast(Ops[1], HalfTy);
 7838     Ops[1] = Builder.CreateBitCast(Ops[1], HalfTy);
 7839     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7839     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7839     Ops[0] = Builder.CreateFCmp(P, Ops[0], Ops[1]);
 7840     return Builder.CreateSExt(Ops[0], Int16Ty, "vcmpd");
 7866     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7867     Ops[0] = Builder.CreateBitCast(Ops[0], Int64Ty);
 7867     Ops[0] = Builder.CreateBitCast(Ops[0], Int64Ty);
 7868     Ops[1] = Builder.CreateBitCast(Ops[1], Int64Ty);
 7868     Ops[1] = Builder.CreateBitCast(Ops[1], Int64Ty);
 7869     Ops[0] = Builder.CreateICmp(P, Ops[0], Ops[1]);
 7869     Ops[0] = Builder.CreateICmp(P, Ops[0], Ops[1]);
 7869     Ops[0] = Builder.CreateICmp(P, Ops[0], Ops[1]);
 7870     return Builder.CreateSExt(Ops[0], Int64Ty, "vceqd");
 7874     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7875     Ops[0] = Builder.CreateBitCast(Ops[0], Int64Ty);
 7875     Ops[0] = Builder.CreateBitCast(Ops[0], Int64Ty);
 7876     Ops[1] = Builder.CreateBitCast(Ops[1], Int64Ty);
 7876     Ops[1] = Builder.CreateBitCast(Ops[1], Int64Ty);
 7877     Ops[0] = Builder.CreateAnd(Ops[0], Ops[1]);
 7877     Ops[0] = Builder.CreateAnd(Ops[0], Ops[1]);
 7877     Ops[0] = Builder.CreateAnd(Ops[0], Ops[1]);
 7878     Ops[0] = Builder.CreateICmp(ICmpInst::ICMP_NE, Ops[0],
 7878     Ops[0] = Builder.CreateICmp(ICmpInst::ICMP_NE, Ops[0],
 7880     return Builder.CreateSExt(Ops[0], Int64Ty, "vtstd");
 7892     Ops.push_back(EmitScalarExpr(E->getArg(2)));
 7893     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7893     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7893     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7896     Ops[1] = Builder.CreateBitCast(Ops[1],
 7896     Ops[1] = Builder.CreateBitCast(Ops[1],
 7898     Ops.push_back(EmitScalarExpr(E->getArg(2)));
 7899     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7899     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7899     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7902     Ops[1] = Builder.CreateBitCast(Ops[1],
 7902     Ops[1] = Builder.CreateBitCast(Ops[1],
 7904     Ops.push_back(EmitScalarExpr(E->getArg(2)));
 7905     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7905     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7905     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
 7909     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int8Ty, 8));
 7909     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int8Ty, 8));
 7910     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7914     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int8Ty, 16));
 7914     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int8Ty, 16));
 7915     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7919     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int16Ty, 4));
 7919     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int16Ty, 4));
 7920     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7924     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int16Ty, 8));
 7924     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int16Ty, 8));
 7925     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7929     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int32Ty, 2));
 7929     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int32Ty, 2));
 7930     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7933     Ops[0] = Builder.CreateBitCast(Ops[0],
 7933     Ops[0] = Builder.CreateBitCast(Ops[0],
 7935     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7939     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int32Ty, 4));
 7939     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int32Ty, 4));
 7940     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7944     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int64Ty, 1));
 7944     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int64Ty, 1));
 7945     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7948     Ops[0] = Builder.CreateBitCast(Ops[0],
 7948     Ops[0] = Builder.CreateBitCast(Ops[0],
 7950     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7954     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int64Ty, 2));
 7954     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::VectorType::get(Int64Ty, 2));
 7955     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7958     Ops[0] = Builder.CreateBitCast(Ops[0],
 7958     Ops[0] = Builder.CreateBitCast(Ops[0],
 7960     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7963     Ops[0] = Builder.CreateBitCast(Ops[0],
 7963     Ops[0] = Builder.CreateBitCast(Ops[0],
 7965     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7969     Ops[0] = Builder.CreateBitCast(Ops[0],
 7969     Ops[0] = Builder.CreateBitCast(Ops[0],
 7971     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7975     Ops[0] = Builder.CreateBitCast(Ops[0],
 7975     Ops[0] = Builder.CreateBitCast(Ops[0],
 7977     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 7980     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7981     return Builder.CreateFAdd(Ops[0], Ops[1], "vaddh");
 7981     return Builder.CreateFAdd(Ops[0], Ops[1], "vaddh");
 7983     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7984     return Builder.CreateFSub(Ops[0], Ops[1], "vsubh");
 7984     return Builder.CreateFSub(Ops[0], Ops[1], "vsubh");
 7986     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7987     return Builder.CreateFMul(Ops[0], Ops[1], "vmulh");
 7987     return Builder.CreateFMul(Ops[0], Ops[1], "vmulh");
 7989     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 7990     return Builder.CreateFDiv(Ops[0], Ops[1], "vdivh");
 7990     return Builder.CreateFDiv(Ops[0], Ops[1], "vdivh");
 7995       {EmitScalarExpr(E->getArg(1)), EmitScalarExpr(E->getArg(2)), Ops[0]});
 8002     return Builder.CreateCall(F, {Sub, EmitScalarExpr(E->getArg(2)), Ops[0]});
 8006     return Builder.CreateAdd(Ops[0], EmitScalarExpr(E->getArg(1)), "vaddd");
 8009     return Builder.CreateSub(Ops[0], EmitScalarExpr(E->getArg(1)), "vsubd");
 8013     ProductOps.push_back(vectorWrapScalar16(Ops[1]));
 8016     Ops[1] = EmitNeonCall(CGM.getIntrinsic(Intrinsic::aarch64_neon_sqdmull, VTy),
 8019     Ops[1] = Builder.CreateExtractElement(Ops[1], CI, "lane0");
 8019     Ops[1] = Builder.CreateExtractElement(Ops[1], CI, "lane0");
 8024     return EmitNeonCall(CGM.getIntrinsic(AccumInt, Int32Ty), Ops, "vqdmlXl");
 8027     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8028     Ops[1] = Builder.CreateZExt(Ops[1], Int64Ty);
 8028     Ops[1] = Builder.CreateZExt(Ops[1], Int64Ty);
 8030                         Ops, "vqshlu_n");
 8037     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8038     Ops[1] = Builder.CreateZExt(Ops[1], Int64Ty);
 8038     Ops[1] = Builder.CreateZExt(Ops[1], Int64Ty);
 8039     return EmitNeonCall(CGM.getIntrinsic(Int, Int64Ty), Ops, "vqshl_n");
 8046     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8047     int SV = cast<ConstantInt>(Ops[1])->getSExtValue();
 8048     Ops[1] = ConstantInt::get(Int64Ty, -SV);
 8049     return EmitNeonCall(CGM.getIntrinsic(Int, Int64Ty), Ops, "vrshr_n");
 8056     Ops[1] = Builder.CreateBitCast(Ops[1], Int64Ty);
 8056     Ops[1] = Builder.CreateBitCast(Ops[1], Int64Ty);
 8057     Ops.push_back(Builder.CreateNeg(EmitScalarExpr(E->getArg(2))));
 8058     Ops[1] = Builder.CreateCall(CGM.getIntrinsic(Int, Int64Ty),
 8059                                 {Ops[1], Builder.CreateSExt(Ops[2], Int64Ty)});
 8059                                 {Ops[1], Builder.CreateSExt(Ops[2], Int64Ty)});
 8060     return Builder.CreateAdd(Ops[0], Builder.CreateBitCast(Ops[1], Int64Ty));
 8060     return Builder.CreateAdd(Ops[0], Builder.CreateBitCast(Ops[1], Int64Ty));
 8066         Ops[0], ConstantInt::get(Int64Ty, Amt->getZExtValue()), "shld_n");
 8071         Ops[0], ConstantInt::get(Int64Ty, std::min(static_cast<uint64_t>(63),
 8081     return Builder.CreateLShr(Ops[0], ConstantInt::get(Int64Ty, ShiftAmt),
 8086     Ops[1] = Builder.CreateAShr(
 8087         Ops[1], ConstantInt::get(Int64Ty, std::min(static_cast<uint64_t>(63),
 8090     return Builder.CreateAdd(Ops[0], Ops[1]);
 8090     return Builder.CreateAdd(Ops[0], Ops[1]);
 8098       return Ops[0];
 8099     Ops[1] = Builder.CreateLShr(Ops[1], ConstantInt::get(Int64Ty, ShiftAmt),
 8099     Ops[1] = Builder.CreateLShr(Ops[1], ConstantInt::get(Int64Ty, ShiftAmt),
 8101     return Builder.CreateAdd(Ops[0], Ops[1]);
 8101     return Builder.CreateAdd(Ops[0], Ops[1]);
 8107     Ops[2] = Builder.CreateExtractElement(Ops[2], EmitScalarExpr(E->getArg(3)),
 8107     Ops[2] = Builder.CreateExtractElement(Ops[2], EmitScalarExpr(E->getArg(3)),
 8110     ProductOps.push_back(vectorWrapScalar16(Ops[1]));
 8111     ProductOps.push_back(vectorWrapScalar16(Ops[2]));
 8113     Ops[1] = EmitNeonCall(CGM.getIntrinsic(Intrinsic::aarch64_neon_sqdmull, VTy),
 8116     Ops[1] = Builder.CreateExtractElement(Ops[1], CI, "lane0");
 8116     Ops[1] = Builder.CreateExtractElement(Ops[1], CI, "lane0");
 8117     Ops.pop_back();
 8123     return EmitNeonCall(CGM.getIntrinsic(AccInt, Int32Ty), Ops, "vqdmlXl");
 8128     ProductOps.push_back(Ops[1]);
 8130     Ops[1] =
 8137     return EmitNeonCall(CGM.getIntrinsic(AccumInt, Int64Ty), Ops, "vqdmlXl");
 8143     Ops[2] = Builder.CreateExtractElement(Ops[2], EmitScalarExpr(E->getArg(3)),
 8143     Ops[2] = Builder.CreateExtractElement(Ops[2], EmitScalarExpr(E->getArg(3)),
 8146     ProductOps.push_back(Ops[1]);
 8147     ProductOps.push_back(Ops[2]);
 8148     Ops[1] =
 8151     Ops.pop_back();
 8157     return EmitNeonCall(CGM.getIntrinsic(AccInt, Int64Ty), Ops, "vqdmlXl");
 8160     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 8164     return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
 8327         Builtin->NameHint, Builtin->TypeModifier, E, Ops,
 8330   if (Value *V = EmitAArch64TblBuiltinExpr(*this, BuiltinID, E, Ops, Arch))
 8339     Ops[0] = Builder.CreateBitCast(Ops[0], BitTy, "vbsl");
 8339     Ops[0] = Builder.CreateBitCast(Ops[0], BitTy, "vbsl");
 8340     Ops[1] = Builder.CreateBitCast(Ops[1], BitTy, "vbsl");
 8340     Ops[1] = Builder.CreateBitCast(Ops[1], BitTy, "vbsl");
 8341     Ops[2] = Builder.CreateBitCast(Ops[2], BitTy, "vbsl");
 8341     Ops[2] = Builder.CreateBitCast(Ops[2], BitTy, "vbsl");
 8343     Ops[1] = Builder.CreateAnd(Ops[0], Ops[1], "vbsl");
 8343     Ops[1] = Builder.CreateAnd(Ops[0], Ops[1], "vbsl");
 8343     Ops[1] = Builder.CreateAnd(Ops[0], Ops[1], "vbsl");
 8344     Ops[2] = Builder.CreateAnd(Builder.CreateNot(Ops[0]), Ops[2], "vbsl");
 8344     Ops[2] = Builder.CreateAnd(Builder.CreateNot(Ops[0]), Ops[2], "vbsl");
 8344     Ops[2] = Builder.CreateAnd(Builder.CreateNot(Ops[0]), Ops[2], "vbsl");
 8345     Ops[0] = Builder.CreateOr(Ops[1], Ops[2], "vbsl");
 8345     Ops[0] = Builder.CreateOr(Ops[1], Ops[2], "vbsl");
 8345     Ops[0] = Builder.CreateOr(Ops[1], Ops[2], "vbsl");
 8346     return Builder.CreateBitCast(Ops[0], Ty);
 8352     Value *Addend = Ops[0];
 8353     Value *Multiplicand = Ops[1];
 8354     Value *LaneSource = Ops[2];
 8355     Ops[0] = Multiplicand;
 8356     Ops[1] = LaneSource;
 8357     Ops[2] = Addend;
 8363     llvm::Constant *cst = cast<Constant>(Ops[3]);
 8365     Ops[1] = Builder.CreateBitCast(Ops[1], SourceTy);
 8365     Ops[1] = Builder.CreateBitCast(Ops[1], SourceTy);
 8366     Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV, "lane");
 8366     Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV, "lane");
 8366     Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV, "lane");
 8368     Ops.pop_back();
 8370     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "fmla");
 8376       Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 8376       Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 8377       Ops[1] = Builder.CreateBitCast(Ops[1], DoubleTy);
 8377       Ops[1] = Builder.CreateBitCast(Ops[1], DoubleTy);
 8380       Ops[2] = Builder.CreateBitCast(Ops[2], VTy);
 8380       Ops[2] = Builder.CreateBitCast(Ops[2], VTy);
 8381       Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract");
 8381       Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract");
 8381       Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract");
 8383       Value *Result = Builder.CreateCall(F, {Ops[1], Ops[2], Ops[0]});
 8383       Value *Result = Builder.CreateCall(F, {Ops[1], Ops[2], Ops[0]});
 8383       Value *Result = Builder.CreateCall(F, {Ops[1], Ops[2], Ops[0]});
 8387     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8387     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8388     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 8388     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 8392     Ops[2] = Builder.CreateBitCast(Ops[2], STy);
 8392     Ops[2] = Builder.CreateBitCast(Ops[2], STy);
 8394                                                cast<ConstantInt>(Ops[3]));
 8395     Ops[2] = Builder.CreateShuffleVector(Ops[2], Ops[2], SV, "lane");
 8395     Ops[2] = Builder.CreateShuffleVector(Ops[2], Ops[2], SV, "lane");
 8395     Ops[2] = Builder.CreateShuffleVector(Ops[2], Ops[2], SV, "lane");
 8397     return Builder.CreateCall(F, {Ops[2], Ops[1], Ops[0]});
 8397     return Builder.CreateCall(F, {Ops[2], Ops[1], Ops[0]});
 8397     return Builder.CreateCall(F, {Ops[2], Ops[1], Ops[0]});
 8401     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8401     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8402     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 8402     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 8404     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 8404     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 8405     Ops[2] = EmitNeonSplat(Ops[2], cast<ConstantInt>(Ops[3]));
 8405     Ops[2] = EmitNeonSplat(Ops[2], cast<ConstantInt>(Ops[3]));
 8405     Ops[2] = EmitNeonSplat(Ops[2], cast<ConstantInt>(Ops[3]));
 8406     return Builder.CreateCall(F, {Ops[2], Ops[1], Ops[0]});
 8406     return Builder.CreateCall(F, {Ops[2], Ops[1], Ops[0]});
 8406     return Builder.CreateCall(F, {Ops[2], Ops[1], Ops[0]});
 8414     Ops.push_back(EmitScalarExpr(E->getArg(3)));
 8417     Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract");
 8417     Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract");
 8417     Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract");
 8418     return Builder.CreateCall(F, {Ops[1], Ops[2], Ops[0]});
 8418     return Builder.CreateCall(F, {Ops[1], Ops[2], Ops[0]});
 8418     return Builder.CreateCall(F, {Ops[1], Ops[2], Ops[0]});
 8424     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmull");
 8430     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmax");
 8432     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8434     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vmax");
 8441     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmin");
 8443     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8445     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vmin");
 8452     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vabd");
 8463     TmpOps.push_back(Ops[1]);
 8466     llvm::Value *addend = Builder.CreateBitCast(Ops[0], tmp->getType());
 8474     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmin");
 8480     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmax");
 8484     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vminnm");
 8486     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8488     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vminnm");
 8492     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmaxnm");
 8494     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8496     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vmaxnm");
 8498     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8500                         Ops, "vrecps");
 8503     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8505                         Ops, "vrecps");
 8507     Ops.push_back(EmitScalarExpr(E->getArg(1)));
 8509                         Ops, "vrecps");
 8512     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrun_n");
 8515     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrun_n");
 8518     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrn_n");
 8521     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshrn_n");
 8524     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrn_n");
 8526     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8528     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrnda");
 8533     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrnda");
 8536     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8538     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrndi");
 8541     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8543     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrndm");
 8548     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndm");
 8551     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8553     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrndn");
 8558     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndn");
 8561     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8563     return EmitNeonCall(CGM.getIntrinsic(Int, FloatTy), Ops, "vrndn");
 8566     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8568     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrndp");
 8573     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndp");
 8576     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8578     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrndx");
 8583     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndx");
 8586     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8588     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vrndz");
 8593     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndz");
 8597     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8597     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8599     return usgn ? Builder.CreateUIToFP(Ops[0], Ty, "vcvt")
 8600                 : Builder.CreateSIToFP(Ops[0], Ty, "vcvt");
 8605     Ops[0] = Builder.CreateBitCast(Ops[0], GetNeonType(this, SrcFlag));
 8605     Ops[0] = Builder.CreateBitCast(Ops[0], GetNeonType(this, SrcFlag));
 8607     return Builder.CreateFPExt(Ops[0], Ty, "vcvt");
 8613     Ops[0] = Builder.CreateBitCast(Ops[0], GetNeonType(this, SrcFlag));
 8613     Ops[0] = Builder.CreateBitCast(Ops[0], GetNeonType(this, SrcFlag));
 8615     return Builder.CreateFPTrunc(Ops[0], Ty, "vcvt");
 8629     Ops[0] = Builder.CreateBitCast(Ops[0], GetFloatNeonType(this, Type));
 8629     Ops[0] = Builder.CreateBitCast(Ops[0], GetFloatNeonType(this, Type));
 8631       return Builder.CreateFPToUI(Ops[0], Ty);
 8632     return Builder.CreateFPToSI(Ops[0], Ty);
 8648     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvta");
 8664     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtm");
 8680     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtn");
 8696     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtp");
 8701     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmulx");
 8707     Ops.push_back(EmitScalarExpr(E->getArg(2)));
 8708     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract");
 8708     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract");
 8708     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract");
 8709     Ops.pop_back();
 8711     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vmulx");
 8719     Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 8719     Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 8722     Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
 8722     Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
 8723     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract");
 8723     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract");
 8723     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract");
 8724     Value *Result = Builder.CreateFMul(Ops[0], Ops[1]);
 8724     Value *Result = Builder.CreateFMul(Ops[0], Ops[1]);
 8734     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmaxnm");
 8739     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpminnm");
 8742     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8744     return EmitNeonCall(CGM.getIntrinsic(Int, HalfTy), Ops, "vsqrt");
 8749     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8749     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 8750     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vsqrt");
 8755     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrbit");
 8766     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8767     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8767     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8768     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8778     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8779     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8779     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8780     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8790     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8791     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8791     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8792     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8802     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8803     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8803     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddv");
 8804     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8811     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8812     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8812     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8813     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8820     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8821     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8821     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8822     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8829     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8830     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8830     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8831     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8838     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8839     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8839     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8840     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8847     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8848     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8848     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8849     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8856     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8857     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8857     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8858     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8865     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8866     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8866     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8867     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8874     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8875     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8875     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8876     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8883     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8884     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8884     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8885     return Builder.CreateTrunc(Ops[0], HalfTy);
 8892     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8893     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8893     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
 8894     return Builder.CreateTrunc(Ops[0], HalfTy);
 8901     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8902     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8902     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8903     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8910     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8911     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8911     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8912     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8919     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8920     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8920     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8921     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8928     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8929     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8929     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8930     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8937     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8938     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8938     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8939     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8946     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8947     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8947     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8948     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8955     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8956     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8956     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8957     return Builder.CreateTrunc(Ops[0], Int8Ty);
 8964     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8965     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8965     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8966     return Builder.CreateTrunc(Ops[0], Int16Ty);
 8973     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8974     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8974     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8975     return Builder.CreateTrunc(Ops[0], HalfTy);
 8982     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8983     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8983     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
 8984     return Builder.CreateTrunc(Ops[0], HalfTy);
 8991     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 8992     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
 8992     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
 8993     return Builder.CreateTrunc(Ops[0], HalfTy);
 9000     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9001     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
 9001     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
 9002     return Builder.CreateTrunc(Ops[0], HalfTy);
 9009     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9010     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
 9010     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
 9011     return Builder.CreateTrunc(Ops[0], HalfTy);
 9018     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9019     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
 9019     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
 9020     return Builder.CreateTrunc(Ops[0], HalfTy);
 9023     Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 9023     Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
 9025     return Builder.CreateFMul(Ops[0], RHS);
 9032     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9033     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9033     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9034     return Builder.CreateTrunc(Ops[0], Int16Ty);
 9041     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9042     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9049     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9050     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9050     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9051     return Builder.CreateTrunc(Ops[0], Int16Ty);
 9058     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9059     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9066     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9067     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9067     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9068     return Builder.CreateTrunc(Ops[0], Int16Ty);
 9075     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9076     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9083     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9084     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9084     Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9085     return Builder.CreateTrunc(Ops[0], Int16Ty);
 9092     Ops.push_back(EmitScalarExpr(E->getArg(0)));
 9093     return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vaddlv");
 9099     return EmitNeonCall(Intrin, Ops, "vsri_n");
 9105     return EmitNeonCall(Intrin, Ops, "vsli_n");
 9109     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9109     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9110     Ops[1] = EmitNeonRShiftImm(Ops[1], Ops[2], Ty, usgn, "vsra_n");
 9110     Ops[1] = EmitNeonRShiftImm(Ops[1], Ops[2], Ty, usgn, "vsra_n");
 9110     Ops[1] = EmitNeonRShiftImm(Ops[1], Ops[2], Ty, usgn, "vsra_n");
 9111     return Builder.CreateAdd(Ops[0], Ops[1]);
 9111     return Builder.CreateAdd(Ops[0], Ops[1]);
 9116     TmpOps.push_back(Ops[1]);
 9117     TmpOps.push_back(Ops[2]);
 9120     Ops[0] = Builder.CreateBitCast(Ops[0], VTy);
 9120     Ops[0] = Builder.CreateBitCast(Ops[0], VTy);
 9121     return Builder.CreateAdd(Ops[0], tmp);
 9125     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
 9125     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
 9128     return Builder.CreateAlignedLoad(VTy, Ops[0], Alignment);
 9132     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
 9132     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(VTy));
 9133     Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
 9133     Ops[1] = Builder.CreateBitCast(Ops[1], VTy);
 9134     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9134     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9137     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9137     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9139     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9139     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9142     Ops[0] =
 9143         Builder.CreateAlignedLoad(VTy->getElementType(), Ops[0], Alignment);
 9144     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vld1_lane");
 9144     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vld1_lane");
 9144     return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vld1_lane");
 9150     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9150     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9153     Ops[0] =
 9154         Builder.CreateAlignedLoad(VTy->getElementType(), Ops[0], Alignment);
 9156     Ops[0] = Builder.CreateInsertElement(V, Ops[0], CI);
 9156     Ops[0] = Builder.CreateInsertElement(V, Ops[0], CI);
 9157     return EmitNeonSplat(Ops[0], CI);
 9161     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9161     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9162     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]);
 9162     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]);
 9162     Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]);
 9163     Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
 9164     return Builder.CreateDefaultAlignedStore(Ops[1],
 9165                                              Builder.CreateBitCast(Ops[0], Ty));
 9169     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9169     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9172     Ops[1] = Builder.CreateCall(F, Ops[1], "vld2");
 9172     Ops[1] = Builder.CreateCall(F, Ops[1], "vld2");
 9173     Ops[0] = Builder.CreateBitCast(Ops[0],
 9173     Ops[0] = Builder.CreateBitCast(Ops[0],
 9174                 llvm::PointerType::getUnqual(Ops[1]->getType()));
 9175     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9175     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9180     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9180     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9183     Ops[1] = Builder.CreateCall(F, Ops[1], "vld3");
 9183     Ops[1] = Builder.CreateCall(F, Ops[1], "vld3");
 9184     Ops[0] = Builder.CreateBitCast(Ops[0],
 9184     Ops[0] = Builder.CreateBitCast(Ops[0],
 9185                 llvm::PointerType::getUnqual(Ops[1]->getType()));
 9186     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9186     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9191     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9191     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9194     Ops[1] = Builder.CreateCall(F, Ops[1], "vld4");
 9194     Ops[1] = Builder.CreateCall(F, Ops[1], "vld4");
 9195     Ops[0] = Builder.CreateBitCast(Ops[0],
 9195     Ops[0] = Builder.CreateBitCast(Ops[0],
 9196                 llvm::PointerType::getUnqual(Ops[1]->getType()));
 9197     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9197     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9203     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9203     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9206     Ops[1] = Builder.CreateCall(F, Ops[1], "vld2");
 9206     Ops[1] = Builder.CreateCall(F, Ops[1], "vld2");
 9207     Ops[0] = Builder.CreateBitCast(Ops[0],
 9207     Ops[0] = Builder.CreateBitCast(Ops[0],
 9208                 llvm::PointerType::getUnqual(Ops[1]->getType()));
 9209     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9209     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9215     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9215     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9218     Ops[1] = Builder.CreateCall(F, Ops[1], "vld3");
 9218     Ops[1] = Builder.CreateCall(F, Ops[1], "vld3");
 9219     Ops[0] = Builder.CreateBitCast(Ops[0],
 9219     Ops[0] = Builder.CreateBitCast(Ops[0],
 9220                 llvm::PointerType::getUnqual(Ops[1]->getType()));
 9221     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9221     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9227     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9227     Ops[1] = Builder.CreateBitCast(Ops[1], PTy);
 9230     Ops[1] = Builder.CreateCall(F, Ops[1], "vld4");
 9230     Ops[1] = Builder.CreateCall(F, Ops[1], "vld4");
 9231     Ops[0] = Builder.CreateBitCast(Ops[0],
 9231     Ops[0] = Builder.CreateBitCast(Ops[0],
 9232                 llvm::PointerType::getUnqual(Ops[1]->getType()));
 9233     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9233     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9237     llvm::Type *Tys[2] = { VTy, Ops[1]->getType() };
 9239     Ops.push_back(Ops[1]);
 9239     Ops.push_back(Ops[1]);
 9240     Ops.erase(Ops.begin()+1);
 9240     Ops.erase(Ops.begin()+1);
 9241     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9241     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9242     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9242     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9243     Ops[3] = Builder.CreateZExt(Ops[3], Int64Ty);
 9243     Ops[3] = Builder.CreateZExt(Ops[3], Int64Ty);
 9244     Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld2_lane");
 9244     Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld2_lane");
 9245     Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
 9246     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9246     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9247     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9247     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9251     llvm::Type *Tys[2] = { VTy, Ops[1]->getType() };
 9253     Ops.push_back(Ops[1]);
 9253     Ops.push_back(Ops[1]);
 9254     Ops.erase(Ops.begin()+1);
 9254     Ops.erase(Ops.begin()+1);
 9255     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9255     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9256     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9256     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9257     Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
 9257     Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
 9258     Ops[4] = Builder.CreateZExt(Ops[4], Int64Ty);
 9258     Ops[4] = Builder.CreateZExt(Ops[4], Int64Ty);
 9259     Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane");
 9259     Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane");
 9260     Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
 9261     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9261     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9262     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9262     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9266     llvm::Type *Tys[2] = { VTy, Ops[1]->getType() };
 9268     Ops.push_back(Ops[1]);
 9268     Ops.push_back(Ops[1]);
 9269     Ops.erase(Ops.begin()+1);
 9269     Ops.erase(Ops.begin()+1);
 9270     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9270     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9271     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9271     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9272     Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
 9272     Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
 9273     Ops[4] = Builder.CreateBitCast(Ops[4], Ty);
 9273     Ops[4] = Builder.CreateBitCast(Ops[4], Ty);
 9274     Ops[5] = Builder.CreateZExt(Ops[5], Int64Ty);
 9274     Ops[5] = Builder.CreateZExt(Ops[5], Int64Ty);
 9275     Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld4_lane");
 9275     Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld4_lane");
 9276     Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
 9277     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9277     Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
 9278     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9278     return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]);
 9282     Ops.push_back(Ops[0]);
 9282     Ops.push_back(Ops[0]);
 9283     Ops.erase(Ops.begin());
 9283     Ops.erase(Ops.begin());
 9284     llvm::Type *Tys[2] = { VTy, Ops[2]->getType() };
 9286                         Ops, "");
 9290     Ops.push_back(Ops[0]);
 9290     Ops.push_back(Ops[0]);
 9291     Ops.erase(Ops.begin());
 9291     Ops.erase(Ops.begin());
 9292     Ops[2] = Builder.CreateZExt(Ops[2], Int64Ty);
 9292     Ops[2] = Builder.CreateZExt(Ops[2], Int64Ty);
 9293     llvm::Type *Tys[2] = { VTy, Ops[3]->getType() };
 9295                         Ops, "");
 9299     Ops.push_back(Ops[0]);
 9299     Ops.push_back(Ops[0]);
 9300     Ops.erase(Ops.begin());
 9300     Ops.erase(Ops.begin());
 9301     llvm::Type *Tys[2] = { VTy, Ops[3]->getType() };
 9303                         Ops, "");
 9307     Ops.push_back(Ops[0]);
 9307     Ops.push_back(Ops[0]);
 9308     Ops.erase(Ops.begin());
 9308     Ops.erase(Ops.begin());
 9309     Ops[3] = Builder.CreateZExt(Ops[3], Int64Ty);
 9309     Ops[3] = Builder.CreateZExt(Ops[3], Int64Ty);
 9310     llvm::Type *Tys[2] = { VTy, Ops[4]->getType() };
 9312                         Ops, "");
 9316     Ops.push_back(Ops[0]);
 9316     Ops.push_back(Ops[0]);
 9317     Ops.erase(Ops.begin());
 9317     Ops.erase(Ops.begin());
 9318     llvm::Type *Tys[2] = { VTy, Ops[4]->getType() };
 9320                         Ops, "");
 9324     Ops.push_back(Ops[0]);
 9324     Ops.push_back(Ops[0]);
 9325     Ops.erase(Ops.begin());
 9325     Ops.erase(Ops.begin());
 9326     Ops[4] = Builder.CreateZExt(Ops[4], Int64Ty);
 9326     Ops[4] = Builder.CreateZExt(Ops[4], Int64Ty);
 9327     llvm::Type *Tys[2] = { VTy, Ops[5]->getType() };
 9329                         Ops, "");
 9333     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
 9333     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
 9334     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9334     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9335     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9335     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9344       Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ty, Ops[0], vi);
 9345       SV = Builder.CreateShuffleVector(Ops[1], Ops[2], Indices, "vtrn");
 9345       SV = Builder.CreateShuffleVector(Ops[1], Ops[2], Indices, "vtrn");
 9352     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
 9352     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
 9353     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9353     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9354     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9354     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9362       Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ty, Ops[0], vi);
 9363       SV = Builder.CreateShuffleVector(Ops[1], Ops[2], Indices, "vuzp");
 9363       SV = Builder.CreateShuffleVector(Ops[1], Ops[2], Indices, "vuzp");
 9370     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
 9370     Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
 9371     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9371     Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
 9372     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9372     Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
 9381       Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ty, Ops[0], vi);
 9382       SV = Builder.CreateShuffleVector(Ops[1], Ops[2], Indices, "vzip");
 9382       SV = Builder.CreateShuffleVector(Ops[1], Ops[2], Indices, "vzip");
 9389                         Ops, "vtbl1");
 9393                         Ops, "vtbl2");
 9397                         Ops, "vtbl3");
 9401                         Ops, "vtbl4");
 9405                         Ops, "vtbx1");
 9409                         Ops, "vtbx2");
 9413                         Ops, "vtbx3");
 9417                         Ops, "vtbx4");
 9422     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vsqadd");
 9427     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vuqadd");