Lines Matching refs:Ops
1641 Value *CodeGenFunction::EmitNeonCall(Function *F, SmallVectorImpl<Value*> &Ops, in EmitNeonCall() argument
1648 Ops[j] = EmitNeonShiftVector(Ops[j], ai->getType(), rightshift); in EmitNeonCall()
1650 Ops[j] = Builder.CreateBitCast(Ops[j], ai->getType(), name); in EmitNeonCall()
1652 return Builder.CreateCall(F, Ops, name); in EmitNeonCall()
1768 SmallVector<Value *, 4> Ops; in EmitAArch64ScalarBuiltinExpr() local
1770 Ops.push_back(CGF.EmitScalarExpr(E->getArg(i))); in EmitAArch64ScalarBuiltinExpr()
1781 return CGF.Builder.CreateExtractElement(Ops[0], Ops[1], "vdup_lane"); in EmitAArch64ScalarBuiltinExpr()
1795 Value* SV = llvm::ConstantVector::getSplat(1, cast<ConstantInt>(Ops[1])); in EmitAArch64ScalarBuiltinExpr()
1796 Value *Result = CGF.Builder.CreateShuffleVector(Ops[0], Ops[0], SV, s); in EmitAArch64ScalarBuiltinExpr()
1826 MulOps.push_back(Ops[1]); in EmitAArch64ScalarBuiltinExpr()
1827 MulOps.push_back(Ops[2]); in EmitAArch64ScalarBuiltinExpr()
1829 MulOps[1] = CGF.Builder.CreateExtractElement(MulOps[1], Ops[3], "extract"); in EmitAArch64ScalarBuiltinExpr()
1835 AddOps.push_back(Ops[0]); in EmitAArch64ScalarBuiltinExpr()
1848 Ops[2] = CGF.Builder.CreateExtractElement(Ops[2], Ops[3], "extract"); in EmitAArch64ScalarBuiltinExpr()
1849 return CGF.Builder.CreateCall3(F, Ops[1], Ops[2], Ops[0]); in EmitAArch64ScalarBuiltinExpr()
1856 return CGF.EmitNeonCall(CGF.CGM.getIntrinsic(Int, Ty), Ops, "vmulx"); in EmitAArch64ScalarBuiltinExpr()
1862 Ops[0] = CGF.Builder.CreateBitCast(Ops[0], VTy); in EmitAArch64ScalarBuiltinExpr()
1864 Ops[0] = CGF.Builder.CreateExtractElement(Ops[0], Idx, "extract"); in EmitAArch64ScalarBuiltinExpr()
1865 Value *Result = CGF.Builder.CreateFMul(Ops[0], Ops[1]); in EmitAArch64ScalarBuiltinExpr()
2209 Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); in EmitAArch64ScalarBuiltinExpr()
2222 Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); in EmitAArch64ScalarBuiltinExpr()
2235 Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); in EmitAArch64ScalarBuiltinExpr()
2240 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2243 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2248 Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); in EmitAArch64ScalarBuiltinExpr()
2253 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2256 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2261 Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); in EmitAArch64ScalarBuiltinExpr()
2273 Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); in EmitAArch64ScalarBuiltinExpr()
2286 Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); in EmitAArch64ScalarBuiltinExpr()
2299 Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); in EmitAArch64ScalarBuiltinExpr()
2312 Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); in EmitAArch64ScalarBuiltinExpr()
2319 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2325 Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); in EmitAArch64ScalarBuiltinExpr()
2342 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2347 OverloadCmpInt = true; std::swap(Ops[0], Ops[1]); break; in EmitAArch64ScalarBuiltinExpr()
2630 Value *Result = CGF.EmitNeonCall(F, Ops, s); in EmitAArch64ScalarBuiltinExpr()
2652 static Value *packTBLDVectorList(CodeGenFunction &CGF, ArrayRef<Value *> Ops, in packTBLDVectorList() argument
2662 llvm::VectorType *TblTy = cast<llvm::VectorType>(Ops[0]->getType()); in packTBLDVectorList()
2669 int PairPos = 0, End = Ops.size() - 1; in packTBLDVectorList()
2671 TblOps.push_back(CGF.Builder.CreateShuffleVector(Ops[PairPos], in packTBLDVectorList()
2672 Ops[PairPos+1], SV, Name)); in packTBLDVectorList()
2680 TblOps.push_back(CGF.Builder.CreateShuffleVector(Ops[PairPos], in packTBLDVectorList()
2750 SmallVector<Value *, 4> Ops; in EmitAArch64TblBuiltinExpr() local
2752 Ops.push_back(CGF.EmitScalarExpr(E->getArg(i))); in EmitAArch64TblBuiltinExpr()
2766 TblOps.push_back(Ops[0]); in EmitAArch64TblBuiltinExpr()
2767 return packTBLDVectorList(CGF, TblOps, 0, Ops[1], Ty, in EmitAArch64TblBuiltinExpr()
2771 TblOps.push_back(Ops[0]); in EmitAArch64TblBuiltinExpr()
2772 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2773 return packTBLDVectorList(CGF, TblOps, 0, Ops[2], Ty, in EmitAArch64TblBuiltinExpr()
2777 TblOps.push_back(Ops[0]); in EmitAArch64TblBuiltinExpr()
2778 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2779 TblOps.push_back(Ops[2]); in EmitAArch64TblBuiltinExpr()
2780 return packTBLDVectorList(CGF, TblOps, 0, Ops[3], Ty, in EmitAArch64TblBuiltinExpr()
2784 TblOps.push_back(Ops[0]); in EmitAArch64TblBuiltinExpr()
2785 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2786 TblOps.push_back(Ops[2]); in EmitAArch64TblBuiltinExpr()
2787 TblOps.push_back(Ops[3]); in EmitAArch64TblBuiltinExpr()
2788 return packTBLDVectorList(CGF, TblOps, 0, Ops[4], Ty, in EmitAArch64TblBuiltinExpr()
2792 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2793 Value *TblRes = packTBLDVectorList(CGF, TblOps, 0, Ops[2], Ty, in EmitAArch64TblBuiltinExpr()
2798 Value *CmpRes = CGF.Builder.CreateICmp(ICmpInst::ICMP_UGE, Ops[2], EightV); in EmitAArch64TblBuiltinExpr()
2803 BslOps.push_back(Ops[0]); in EmitAArch64TblBuiltinExpr()
2809 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2810 TblOps.push_back(Ops[2]); in EmitAArch64TblBuiltinExpr()
2811 return packTBLDVectorList(CGF, TblOps, Ops[0], Ops[3], Ty, in EmitAArch64TblBuiltinExpr()
2815 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2816 TblOps.push_back(Ops[2]); in EmitAArch64TblBuiltinExpr()
2817 TblOps.push_back(Ops[3]); in EmitAArch64TblBuiltinExpr()
2818 Value *TblRes = packTBLDVectorList(CGF, TblOps, 0, Ops[4], Ty, in EmitAArch64TblBuiltinExpr()
2823 Value *CmpRes = CGF.Builder.CreateICmp(ICmpInst::ICMP_UGE, Ops[4], in EmitAArch64TblBuiltinExpr()
2829 BslOps.push_back(Ops[0]); in EmitAArch64TblBuiltinExpr()
2835 TblOps.push_back(Ops[1]); in EmitAArch64TblBuiltinExpr()
2836 TblOps.push_back(Ops[2]); in EmitAArch64TblBuiltinExpr()
2837 TblOps.push_back(Ops[3]); in EmitAArch64TblBuiltinExpr()
2838 TblOps.push_back(Ops[4]); in EmitAArch64TblBuiltinExpr()
2839 return packTBLDVectorList(CGF, TblOps, Ops[0], Ops[5], Ty, in EmitAArch64TblBuiltinExpr()
2873 return CGF.EmitNeonCall(F, Ops, s); in EmitAArch64TblBuiltinExpr()
2891 SmallVector<Value *, 2> Ops; in EmitAArch64BuiltinExpr() local
2893 Ops.push_back(EmitScalarExpr(E->getArg(i))); in EmitAArch64BuiltinExpr()
2897 return EmitNounwindRuntimeCall(CGM.CreateRuntimeFunction(FTy, Name), Ops); in EmitAArch64BuiltinExpr()
2900 SmallVector<Value *, 4> Ops; in EmitAArch64BuiltinExpr() local
2920 Ops.push_back(Src.first); in EmitAArch64BuiltinExpr()
2946 Ops.push_back(Src.first); in EmitAArch64BuiltinExpr()
2951 Ops.push_back(EmitScalarExpr(E->getArg(i))); in EmitAArch64BuiltinExpr()
3020 std::swap(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3033 return EmitNeonCall(F, Ops, "vcage"); in EmitAArch64BuiltinExpr()
3037 std::swap(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3044 return EmitNeonCall(F, Ops, "vcage"); in EmitAArch64BuiltinExpr()
3048 std::swap(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3061 return EmitNeonCall(F, Ops, "vcagt"); in EmitAArch64BuiltinExpr()
3065 std::swap(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3072 return EmitNeonCall(F, Ops, "vcagt"); in EmitAArch64BuiltinExpr()
3162 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshr_n"); in EmitAArch64BuiltinExpr()
3167 return EmitNeonCall(CGM.getIntrinsic(Int), Ops, "vsra_n"); in EmitAArch64BuiltinExpr()
3176 return EmitNeonCall(CGM.getIntrinsic(Int), Ops, "vrsra_n"); in EmitAArch64BuiltinExpr()
3180 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3181 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3184 Ops[1] = Builder.CreateCall2(CGM.getIntrinsic(Int, Ty), Ops[1], Ops[2]); in EmitAArch64BuiltinExpr()
3185 return Builder.CreateAdd(Ops[0], Ops[1], "vrsra_n"); in EmitAArch64BuiltinExpr()
3198 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshlu_n"); in EmitAArch64BuiltinExpr()
3202 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vsri_n"); in EmitAArch64BuiltinExpr()
3206 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vsli_n"); in EmitAArch64BuiltinExpr()
3209 Ops[0] = Builder.CreateBitCast(Ops[0], SrcTy); in EmitAArch64BuiltinExpr()
3211 Ops[0] = Builder.CreateZExt(Ops[0], VTy); in EmitAArch64BuiltinExpr()
3213 Ops[0] = Builder.CreateSExt(Ops[0], VTy); in EmitAArch64BuiltinExpr()
3214 Ops[1] = EmitNeonShiftVector(Ops[1], VTy, false); in EmitAArch64BuiltinExpr()
3215 return Builder.CreateShl(Ops[0], Ops[1], "vshll_n"); in EmitAArch64BuiltinExpr()
3219 Ops[0] = Builder.CreateBitCast(Ops[0], SrcTy); in EmitAArch64BuiltinExpr()
3220 Ops[1] = EmitNeonShiftVector(Ops[1], SrcTy, false); in EmitAArch64BuiltinExpr()
3222 Ops[0] = Builder.CreateLShr(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3224 Ops[0] = Builder.CreateAShr(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3225 return Builder.CreateTrunc(Ops[0], Ty, "vshrn_n"); in EmitAArch64BuiltinExpr()
3229 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrun_n"); in EmitAArch64BuiltinExpr()
3232 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshrn_n"); in EmitAArch64BuiltinExpr()
3235 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrun_n"); in EmitAArch64BuiltinExpr()
3239 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrn_n"); in EmitAArch64BuiltinExpr()
3243 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrn_n"); in EmitAArch64BuiltinExpr()
3260 return EmitNeonCall(F, Ops, "vcvt_n"); in EmitAArch64BuiltinExpr()
3280 return EmitNeonCall(F, Ops, "vcvt_n"); in EmitAArch64BuiltinExpr()
3338 Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld1xN"); in EmitAArch64BuiltinExpr()
3339 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitAArch64BuiltinExpr()
3340 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3341 return Builder.CreateStore(Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3349 Ops.push_back(Align); in EmitAArch64BuiltinExpr()
3365 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, ""); in EmitAArch64BuiltinExpr()
3369 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3371 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3372 LoadInst *Ld = Builder.CreateLoad(Ops[0]); in EmitAArch64BuiltinExpr()
3374 return Builder.CreateInsertElement(Ops[1], Ld, Ops[2], "vld1_lane"); in EmitAArch64BuiltinExpr()
3390 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3391 Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]); in EmitAArch64BuiltinExpr()
3392 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitAArch64BuiltinExpr()
3394 Builder.CreateStore(Ops[1], Builder.CreateBitCast(Ops[0], Ty)); in EmitAArch64BuiltinExpr()
3437 Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld_dup"); in EmitAArch64BuiltinExpr()
3438 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitAArch64BuiltinExpr()
3439 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3440 return Builder.CreateStore(Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3460 Args.push_back(Ops[1]); in EmitAArch64BuiltinExpr()
3467 Ops[1] = Builder.CreateCall(F, Args, "vld_dup"); in EmitAArch64BuiltinExpr()
3470 Value *Val = Builder.CreateExtractValue(Ops[1], i); in EmitAArch64BuiltinExpr()
3474 Ops[1] = Builder.CreateInsertValue(Ops[1], Elt, i); in EmitAArch64BuiltinExpr()
3476 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitAArch64BuiltinExpr()
3477 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3478 return Builder.CreateStore(Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3484 Ops, "aese"); in EmitAArch64BuiltinExpr()
3487 Ops, "aesd"); in EmitAArch64BuiltinExpr()
3490 Ops, "aesmc"); in EmitAArch64BuiltinExpr()
3493 Ops, "aesimc"); in EmitAArch64BuiltinExpr()
3496 Ops, "sha1su1"); in EmitAArch64BuiltinExpr()
3499 Ops, "sha256su0"); in EmitAArch64BuiltinExpr()
3502 Ops, "sha1su0"); in EmitAArch64BuiltinExpr()
3505 Ops, "sha256h"); in EmitAArch64BuiltinExpr()
3508 Ops, "sha256h2"); in EmitAArch64BuiltinExpr()
3511 Ops, "sha256su1"); in EmitAArch64BuiltinExpr()
3518 Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy); in EmitAArch64BuiltinExpr()
3521 Ops[1] = Builder.CreateBitCast(Ops[1], VTy); in EmitAArch64BuiltinExpr()
3522 Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2], "extract"); in EmitAArch64BuiltinExpr()
3523 Value *Result = Builder.CreateFMul(Ops[0], Ops[1]); in EmitAArch64BuiltinExpr()
3530 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3531 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3533 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitAArch64BuiltinExpr()
3534 Ops[2] = EmitNeonSplat(Ops[2], cast<ConstantInt>(Ops[3])); in EmitAArch64BuiltinExpr()
3535 return Builder.CreateCall3(F, Ops[2], Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3539 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3540 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3545 Ops[2] = Builder.CreateBitCast(Ops[2], STy); in EmitAArch64BuiltinExpr()
3547 cast<ConstantInt>(Ops[3])); in EmitAArch64BuiltinExpr()
3548 Ops[2] = Builder.CreateShuffleVector(Ops[2], Ops[2], SV, "lane"); in EmitAArch64BuiltinExpr()
3550 return Builder.CreateCall3(F, Ops[2], Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3556 Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy); in EmitAArch64BuiltinExpr()
3557 Ops[1] = Builder.CreateBitCast(Ops[1], DoubleTy); in EmitAArch64BuiltinExpr()
3560 Ops[2] = Builder.CreateBitCast(Ops[2], VTy); in EmitAArch64BuiltinExpr()
3561 Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract"); in EmitAArch64BuiltinExpr()
3563 Value *Result = Builder.CreateCall3(F, Ops[1], Ops[2], Ops[0]); in EmitAArch64BuiltinExpr()
3567 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3568 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3570 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitAArch64BuiltinExpr()
3571 Ops[2] = EmitNeonSplat(Ops[2], cast<ConstantInt>(Ops[3])); in EmitAArch64BuiltinExpr()
3572 return Builder.CreateCall3(F, Ops[2], Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3578 Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy); in EmitAArch64BuiltinExpr()
3579 Ops[1] = Builder.CreateBitCast(Ops[1], DoubleTy); in EmitAArch64BuiltinExpr()
3582 Ops[2] = Builder.CreateBitCast(Ops[2], VTy); in EmitAArch64BuiltinExpr()
3583 Ops[2] = Builder.CreateExtractElement(Ops[2], Ops[3], "extract"); in EmitAArch64BuiltinExpr()
3585 Value *Result = Builder.CreateCall3(F, Ops[1], Ops[2], Ops[0]); in EmitAArch64BuiltinExpr()
3589 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3590 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3594 Ops[2] = Builder.CreateBitCast(Ops[2], STy); in EmitAArch64BuiltinExpr()
3596 cast<ConstantInt>(Ops[3])); in EmitAArch64BuiltinExpr()
3597 Ops[2] = Builder.CreateShuffleVector(Ops[2], Ops[2], SV, "lane"); in EmitAArch64BuiltinExpr()
3599 return Builder.CreateCall3(F, Ops[2], Ops[1], Ops[0]); in EmitAArch64BuiltinExpr()
3604 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3605 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitAArch64BuiltinExpr()
3606 Ops[1] = Builder.CreateFNeg(Ops[1]); in EmitAArch64BuiltinExpr()
3607 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitAArch64BuiltinExpr()
3611 return Builder.CreateCall3(F, Ops[1], Ops[2], Ops[0]); in EmitAArch64BuiltinExpr()
3616 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmaxnm"); in EmitAArch64BuiltinExpr()
3621 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vminnm"); in EmitAArch64BuiltinExpr()
3626 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmaxnm"); in EmitAArch64BuiltinExpr()
3631 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpminnm"); in EmitAArch64BuiltinExpr()
3635 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmax"); in EmitAArch64BuiltinExpr()
3639 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmin"); in EmitAArch64BuiltinExpr()
3643 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpadd"); in EmitAArch64BuiltinExpr()
3648 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmulx"); in EmitAArch64BuiltinExpr()
3665 return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs"); in EmitAArch64BuiltinExpr()
3672 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vsqadd"); in EmitAArch64BuiltinExpr()
3677 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vuqadd"); in EmitAArch64BuiltinExpr()
3691 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrbit"); in EmitAArch64BuiltinExpr()
3703 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3705 return Builder.CreateFPTrunc(Ops[0], Ty, "vcvt"); in EmitAArch64BuiltinExpr()
3712 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtx_f32_f64"); in EmitAArch64BuiltinExpr()
3717 Ops[0] = Builder.CreateBitCast(Ops[0], OpTy); in EmitAArch64BuiltinExpr()
3718 return Builder.CreateFPExt(Ops[0], Ty, "vcvt"); in EmitAArch64BuiltinExpr()
3722 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitAArch64BuiltinExpr()
3724 return usgn ? Builder.CreateUIToFP(Ops[0], Ty, "vcvt") in EmitAArch64BuiltinExpr()
3725 : Builder.CreateSIToFP(Ops[0], Ty, "vcvt"); in EmitAArch64BuiltinExpr()
3730 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndn"); in EmitAArch64BuiltinExpr()
3735 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrnda"); in EmitAArch64BuiltinExpr()
3740 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndp"); in EmitAArch64BuiltinExpr()
3745 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndm"); in EmitAArch64BuiltinExpr()
3750 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndx"); in EmitAArch64BuiltinExpr()
3755 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrnd"); in EmitAArch64BuiltinExpr()
3760 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrndi"); in EmitAArch64BuiltinExpr()
3773 Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy); in EmitAArch64BuiltinExpr()
3774 return usgn ? Builder.CreateFPToUI(Ops[0], Ty, "vcvt") in EmitAArch64BuiltinExpr()
3775 : Builder.CreateFPToSI(Ops[0], Ty, "vcvt"); in EmitAArch64BuiltinExpr()
3782 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtns_f32"); in EmitAArch64BuiltinExpr()
3789 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtns_f64"); in EmitAArch64BuiltinExpr()
3796 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtnu_f32"); in EmitAArch64BuiltinExpr()
3803 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtnu_f64"); in EmitAArch64BuiltinExpr()
3810 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtps_f32"); in EmitAArch64BuiltinExpr()
3817 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtps_f64"); in EmitAArch64BuiltinExpr()
3824 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtpu_f32"); in EmitAArch64BuiltinExpr()
3831 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtpu_f64"); in EmitAArch64BuiltinExpr()
3838 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtms_f32"); in EmitAArch64BuiltinExpr()
3845 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtms_f64"); in EmitAArch64BuiltinExpr()
3852 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtmu_f32"); in EmitAArch64BuiltinExpr()
3859 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtmu_f64"); in EmitAArch64BuiltinExpr()
3866 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtas_f32"); in EmitAArch64BuiltinExpr()
3873 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtas_f64"); in EmitAArch64BuiltinExpr()
3880 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtau_f32"); in EmitAArch64BuiltinExpr()
3887 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtau_f64"); in EmitAArch64BuiltinExpr()
3898 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vsqrt"); in EmitAArch64BuiltinExpr()
3905 return EmitAArch64CompareBuiltinExpr(Ops[0], Ty, ICmpInst::FCMP_OEQ, in EmitAArch64BuiltinExpr()
3909 return EmitAArch64CompareBuiltinExpr(Ops[0], Ty, ICmpInst::FCMP_OGE, in EmitAArch64BuiltinExpr()
3913 return EmitAArch64CompareBuiltinExpr(Ops[0], Ty, ICmpInst::FCMP_OLE, in EmitAArch64BuiltinExpr()
3917 return EmitAArch64CompareBuiltinExpr(Ops[0], Ty, ICmpInst::FCMP_OGT, in EmitAArch64BuiltinExpr()
3921 return EmitAArch64CompareBuiltinExpr(Ops[0], Ty, ICmpInst::FCMP_OLT, in EmitAArch64BuiltinExpr()
3931 SmallVector<Value*, 2> Ops; in EmitARMBuiltinExpr() local
3933 Ops.push_back(EmitScalarExpr(E->getArg(i))); in EmitARMBuiltinExpr()
3937 return EmitNounwindRuntimeCall(CGM.CreateRuntimeFunction(FTy, Name), Ops); in EmitARMBuiltinExpr()
4072 SmallVector<Value*, 4> Ops; in EmitARMBuiltinExpr() local
4103 Ops.push_back(Src.first); in EmitARMBuiltinExpr()
4129 Ops.push_back(Src.first); in EmitARMBuiltinExpr()
4134 Ops.push_back(EmitScalarExpr(E->getArg(i))); in EmitARMBuiltinExpr()
4151 return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)), in EmitARMBuiltinExpr()
4163 Ops.push_back(EmitScalarExpr(E->getArg(2))); in EmitARMBuiltinExpr()
4164 return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane"); in EmitARMBuiltinExpr()
4188 return Builder.CreateCall(F, Ops, "vcvtr"); in EmitARMBuiltinExpr()
4208 Ops, "vbsl"); in EmitARMBuiltinExpr()
4212 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vabd"); in EmitARMBuiltinExpr()
4216 Ops, "vabs"); in EmitARMBuiltinExpr()
4222 Ops[0] = Builder.CreateBitCast(Ops[0], SrcTy); in EmitARMBuiltinExpr()
4223 Ops[1] = Builder.CreateBitCast(Ops[1], SrcTy); in EmitARMBuiltinExpr()
4224 Ops[0] = Builder.CreateAdd(Ops[0], Ops[1], "vaddhn"); in EmitARMBuiltinExpr()
4230 Ops[0] = Builder.CreateLShr(Ops[0], ShiftAmt, "vaddhn"); in EmitARMBuiltinExpr()
4233 return Builder.CreateTrunc(Ops[0], VTy, "vaddhn"); in EmitARMBuiltinExpr()
4236 std::swap(Ops[0], Ops[1]); in EmitARMBuiltinExpr()
4239 return EmitNeonCall(F, Ops, "vcage"); in EmitARMBuiltinExpr()
4242 std::swap(Ops[0], Ops[1]); in EmitARMBuiltinExpr()
4245 return EmitNeonCall(F, Ops, "vcage"); in EmitARMBuiltinExpr()
4248 std::swap(Ops[0], Ops[1]); in EmitARMBuiltinExpr()
4251 return EmitNeonCall(F, Ops, "vcagt"); in EmitARMBuiltinExpr()
4254 std::swap(Ops[0], Ops[1]); in EmitARMBuiltinExpr()
4257 return EmitNeonCall(F, Ops, "vcagt"); in EmitARMBuiltinExpr()
4262 return EmitNeonCall(F, Ops, "vcls"); in EmitARMBuiltinExpr()
4269 Ops.push_back(Builder.getInt1(getTarget().isCLZForZeroUndef())); in EmitARMBuiltinExpr()
4270 return EmitNeonCall(F, Ops, "vclz"); in EmitARMBuiltinExpr()
4276 return EmitNeonCall(F, Ops, "vctpop"); in EmitARMBuiltinExpr()
4282 return EmitNeonCall(F, Ops, "vcvt"); in EmitARMBuiltinExpr()
4288 return EmitNeonCall(F, Ops, "vcvt"); in EmitARMBuiltinExpr()
4292 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4294 return usgn ? Builder.CreateUIToFP(Ops[0], Ty, "vcvt") in EmitARMBuiltinExpr()
4295 : Builder.CreateSIToFP(Ops[0], Ty, "vcvt"); in EmitARMBuiltinExpr()
4302 Ops[0] = Builder.CreateBitCast(Ops[0], FloatTy); in EmitARMBuiltinExpr()
4303 return usgn ? Builder.CreateFPToUI(Ops[0], Ty, "vcvt") in EmitARMBuiltinExpr()
4304 : Builder.CreateFPToSI(Ops[0], Ty, "vcvt"); in EmitARMBuiltinExpr()
4314 return EmitNeonCall(F, Ops, "vcvt_n"); in EmitARMBuiltinExpr()
4326 return EmitNeonCall(F, Ops, "vcvt_n"); in EmitARMBuiltinExpr()
4330 int CV = cast<ConstantInt>(Ops[2])->getSExtValue(); in EmitARMBuiltinExpr()
4335 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4336 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4338 return Builder.CreateShuffleVector(Ops[0], Ops[1], SV, "vext"); in EmitARMBuiltinExpr()
4343 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vhadd"); in EmitARMBuiltinExpr()
4347 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vhsub"); in EmitARMBuiltinExpr()
4350 Ops.push_back(Align); in EmitARMBuiltinExpr()
4352 Ops, "vld1"); in EmitARMBuiltinExpr()
4358 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4359 int Lane = cast<ConstantInt>(Ops[2])->getZExtValue(); in EmitARMBuiltinExpr()
4361 Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV); in EmitARMBuiltinExpr()
4365 Value *Ld = Builder.CreateCall2(F, Ops[0], Align); in EmitARMBuiltinExpr()
4371 return Builder.CreateShuffleVector(Ops[1], Ld, SV, "vld1q_lane"); in EmitARMBuiltinExpr()
4375 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4377 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4378 LoadInst *Ld = Builder.CreateLoad(Ops[0]); in EmitARMBuiltinExpr()
4380 return Builder.CreateInsertElement(Ops[1], Ld, Ops[2], "vld1_lane"); in EmitARMBuiltinExpr()
4386 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4387 LoadInst *Ld = Builder.CreateLoad(Ops[0]); in EmitARMBuiltinExpr()
4390 Ops[0] = Builder.CreateInsertElement(V, Ld, CI); in EmitARMBuiltinExpr()
4391 return EmitNeonSplat(Ops[0], CI); in EmitARMBuiltinExpr()
4396 Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld2"); in EmitARMBuiltinExpr()
4397 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4398 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4399 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4404 Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld3"); in EmitARMBuiltinExpr()
4405 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4406 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4407 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4412 Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld4"); in EmitARMBuiltinExpr()
4413 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4414 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4415 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4420 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4421 Ops[3] = Builder.CreateBitCast(Ops[3], Ty); in EmitARMBuiltinExpr()
4422 Ops.push_back(Align); in EmitARMBuiltinExpr()
4423 Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld2_lane"); in EmitARMBuiltinExpr()
4424 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4425 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4426 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4431 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4432 Ops[3] = Builder.CreateBitCast(Ops[3], Ty); in EmitARMBuiltinExpr()
4433 Ops[4] = Builder.CreateBitCast(Ops[4], Ty); in EmitARMBuiltinExpr()
4434 Ops.push_back(Align); in EmitARMBuiltinExpr()
4435 Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane"); in EmitARMBuiltinExpr()
4436 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4437 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4438 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4443 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4444 Ops[3] = Builder.CreateBitCast(Ops[3], Ty); in EmitARMBuiltinExpr()
4445 Ops[4] = Builder.CreateBitCast(Ops[4], Ty); in EmitARMBuiltinExpr()
4446 Ops[5] = Builder.CreateBitCast(Ops[5], Ty); in EmitARMBuiltinExpr()
4447 Ops.push_back(Align); in EmitARMBuiltinExpr()
4448 Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane"); in EmitARMBuiltinExpr()
4449 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4450 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4451 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4471 Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld_dup"); in EmitARMBuiltinExpr()
4472 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4473 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4474 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4492 Args.push_back(Ops[1]); in EmitARMBuiltinExpr()
4499 Ops[1] = Builder.CreateCall(F, Args, "vld_dup"); in EmitARMBuiltinExpr()
4502 Value *Val = Builder.CreateExtractValue(Ops[1], i); in EmitARMBuiltinExpr()
4506 Ops[1] = Builder.CreateInsertValue(Ops[1], Elt, i); in EmitARMBuiltinExpr()
4508 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4509 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4510 return Builder.CreateStore(Ops[1], Ops[0]); in EmitARMBuiltinExpr()
4515 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmax"); in EmitARMBuiltinExpr()
4519 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmin"); in EmitARMBuiltinExpr()
4522 Ops[0] = Builder.CreateBitCast(Ops[0], DTy); in EmitARMBuiltinExpr()
4524 return Builder.CreateZExt(Ops[0], Ty, "vmovl"); in EmitARMBuiltinExpr()
4525 return Builder.CreateSExt(Ops[0], Ty, "vmovl"); in EmitARMBuiltinExpr()
4529 Ops[0] = Builder.CreateBitCast(Ops[0], QTy); in EmitARMBuiltinExpr()
4530 return Builder.CreateTrunc(Ops[0], Ty, "vmovn"); in EmitARMBuiltinExpr()
4536 Ops, "vmul"); in EmitARMBuiltinExpr()
4545 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmull"); in EmitARMBuiltinExpr()
4549 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4550 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4551 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4554 return Builder.CreateCall3(F, Ops[1], Ops[2], Ops[0]); in EmitARMBuiltinExpr()
4566 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vpadal"); in EmitARMBuiltinExpr()
4570 Ops, "vpadd"); in EmitARMBuiltinExpr()
4580 return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vpaddl"); in EmitARMBuiltinExpr()
4584 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmax"); in EmitARMBuiltinExpr()
4587 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmin"); in EmitARMBuiltinExpr()
4591 Ops, "vqabs"); in EmitARMBuiltinExpr()
4595 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqadd"); in EmitARMBuiltinExpr()
4597 SmallVector<Value *, 2> MulOps(Ops.begin() + 1, Ops.end()); in EmitARMBuiltinExpr()
4602 AddOps.push_back(Ops[0]); in EmitARMBuiltinExpr()
4608 SmallVector<Value *, 2> MulOps(Ops.begin() + 1, Ops.end()); in EmitARMBuiltinExpr()
4613 SubOps.push_back(Ops[0]); in EmitARMBuiltinExpr()
4621 Ops, "vqdmulh"); in EmitARMBuiltinExpr()
4624 Ops, "vqdmull"); in EmitARMBuiltinExpr()
4627 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqmovn"); in EmitARMBuiltinExpr()
4630 Ops, "vqdmull"); in EmitARMBuiltinExpr()
4634 Ops, "vqneg"); in EmitARMBuiltinExpr()
4638 Ops, "vqrdmulh"); in EmitARMBuiltinExpr()
4642 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshl"); in EmitARMBuiltinExpr()
4646 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrn_n", in EmitARMBuiltinExpr()
4650 Ops, "vqrshrun_n", 1, true); in EmitARMBuiltinExpr()
4654 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshl"); in EmitARMBuiltinExpr()
4658 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshl_n", in EmitARMBuiltinExpr()
4663 Ops, "vqshlu", 1, false); in EmitARMBuiltinExpr()
4666 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrn_n", in EmitARMBuiltinExpr()
4670 Ops, "vqshrun_n", 1, true); in EmitARMBuiltinExpr()
4674 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqsub"); in EmitARMBuiltinExpr()
4677 Ops, "vraddhn"); in EmitARMBuiltinExpr()
4681 Ops, "vrecpe"); in EmitARMBuiltinExpr()
4685 Ops, "vrecps"); in EmitARMBuiltinExpr()
4689 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrhadd"); in EmitARMBuiltinExpr()
4693 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshl"); in EmitARMBuiltinExpr()
4696 Ops, "vrshrn_n", 1, true); in EmitARMBuiltinExpr()
4700 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshr_n", 1, true); in EmitARMBuiltinExpr()
4704 Ops, "vrsqrte"); in EmitARMBuiltinExpr()
4708 Ops, "vrsqrts"); in EmitARMBuiltinExpr()
4711 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4712 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4713 Ops[2] = EmitNeonShiftVector(Ops[2], Ty, true); in EmitARMBuiltinExpr()
4715 Ops[1] = Builder.CreateCall2(CGM.getIntrinsic(Int, Ty), Ops[1], Ops[2]); in EmitARMBuiltinExpr()
4716 return Builder.CreateAdd(Ops[0], Ops[1], "vrsra_n"); in EmitARMBuiltinExpr()
4719 Ops, "vrsubhn"); in EmitARMBuiltinExpr()
4723 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vshl"); in EmitARMBuiltinExpr()
4726 return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vshll", 1); in EmitARMBuiltinExpr()
4729 Ops[1] = EmitNeonShiftVector(Ops[1], Ty, false); in EmitARMBuiltinExpr()
4730 return Builder.CreateShl(Builder.CreateBitCast(Ops[0],Ty), Ops[1], in EmitARMBuiltinExpr()
4734 Ops, "vshrn_n", 1, true); in EmitARMBuiltinExpr()
4737 return EmitNeonRShiftImm(Ops[0], Ops[1], Ty, usgn, "vshr_n"); in EmitARMBuiltinExpr()
4743 Ops[2] = EmitNeonShiftVector(Ops[2], Ty, rightShift); in EmitARMBuiltinExpr()
4745 Ops, "vsli_n"); in EmitARMBuiltinExpr()
4748 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4749 Ops[1] = EmitNeonRShiftImm(Ops[1], Ops[2], Ty, usgn, "vsra_n"); in EmitARMBuiltinExpr()
4750 return Builder.CreateAdd(Ops[0], Ops[1]); in EmitARMBuiltinExpr()
4753 Ops.push_back(Align); in EmitARMBuiltinExpr()
4755 Ops, ""); in EmitARMBuiltinExpr()
4760 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4761 Value *SV = llvm::ConstantVector::get(cast<llvm::Constant>(Ops[2])); in EmitARMBuiltinExpr()
4762 Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV); in EmitARMBuiltinExpr()
4763 Ops[2] = Align; in EmitARMBuiltinExpr()
4765 Ops[1]->getType()), Ops); in EmitARMBuiltinExpr()
4769 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4770 Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]); in EmitARMBuiltinExpr()
4771 Ty = llvm::PointerType::getUnqual(Ops[1]->getType()); in EmitARMBuiltinExpr()
4772 StoreInst *St = Builder.CreateStore(Ops[1], in EmitARMBuiltinExpr()
4773 Builder.CreateBitCast(Ops[0], Ty)); in EmitARMBuiltinExpr()
4779 Ops.push_back(Align); in EmitARMBuiltinExpr()
4781 Ops, ""); in EmitARMBuiltinExpr()
4784 Ops.push_back(Align); in EmitARMBuiltinExpr()
4786 Ops, ""); in EmitARMBuiltinExpr()
4789 Ops.push_back(Align); in EmitARMBuiltinExpr()
4791 Ops, ""); in EmitARMBuiltinExpr()
4794 Ops.push_back(Align); in EmitARMBuiltinExpr()
4796 Ops, ""); in EmitARMBuiltinExpr()
4799 Ops.push_back(Align); in EmitARMBuiltinExpr()
4801 Ops, ""); in EmitARMBuiltinExpr()
4804 Ops.push_back(Align); in EmitARMBuiltinExpr()
4806 Ops, ""); in EmitARMBuiltinExpr()
4812 Ops[0] = Builder.CreateBitCast(Ops[0], SrcTy); in EmitARMBuiltinExpr()
4813 Ops[1] = Builder.CreateBitCast(Ops[1], SrcTy); in EmitARMBuiltinExpr()
4814 Ops[0] = Builder.CreateSub(Ops[0], Ops[1], "vsubhn"); in EmitARMBuiltinExpr()
4820 Ops[0] = Builder.CreateLShr(Ops[0], ShiftAmt, "vsubhn"); in EmitARMBuiltinExpr()
4823 return Builder.CreateTrunc(Ops[0], VTy, "vsubhn"); in EmitARMBuiltinExpr()
4827 Ops, "vtbl1"); in EmitARMBuiltinExpr()
4830 Ops, "vtbl2"); in EmitARMBuiltinExpr()
4833 Ops, "vtbl3"); in EmitARMBuiltinExpr()
4836 Ops, "vtbl4"); in EmitARMBuiltinExpr()
4839 Ops, "vtbx1"); in EmitARMBuiltinExpr()
4842 Ops, "vtbx2"); in EmitARMBuiltinExpr()
4845 Ops, "vtbx3"); in EmitARMBuiltinExpr()
4848 Ops, "vtbx4"); in EmitARMBuiltinExpr()
4851 Ops[0] = Builder.CreateBitCast(Ops[0], Ty); in EmitARMBuiltinExpr()
4852 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4853 Ops[0] = Builder.CreateAnd(Ops[0], Ops[1]); in EmitARMBuiltinExpr()
4854 Ops[0] = Builder.CreateICmp(ICmpInst::ICMP_NE, Ops[0], in EmitARMBuiltinExpr()
4856 return Builder.CreateSExt(Ops[0], Ty, "vtst"); in EmitARMBuiltinExpr()
4860 Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty)); in EmitARMBuiltinExpr()
4861 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4862 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4871 Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi); in EmitARMBuiltinExpr()
4873 SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vtrn"); in EmitARMBuiltinExpr()
4880 Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty)); in EmitARMBuiltinExpr()
4881 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4882 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4890 Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi); in EmitARMBuiltinExpr()
4892 SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vuzp"); in EmitARMBuiltinExpr()
4899 Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty)); in EmitARMBuiltinExpr()
4900 Ops[1] = Builder.CreateBitCast(Ops[1], Ty); in EmitARMBuiltinExpr()
4901 Ops[2] = Builder.CreateBitCast(Ops[2], Ty); in EmitARMBuiltinExpr()
4910 Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi); in EmitARMBuiltinExpr()
4912 SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vzip"); in EmitARMBuiltinExpr()
4921 BuildVector(ArrayRef<llvm::Value*> Ops) { in BuildVector() argument
4922 assert((Ops.size() & (Ops.size() - 1)) == 0 && in BuildVector()
4925 for (unsigned i = 0, e = Ops.size(); i != e && AllConstants; ++i) in BuildVector()
4926 AllConstants &= isa<Constant>(Ops[i]); in BuildVector()
4931 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in BuildVector()
4932 CstOps.push_back(cast<Constant>(Ops[i])); in BuildVector()
4938 llvm::UndefValue::get(llvm::VectorType::get(Ops[0]->getType(), Ops.size())); in BuildVector()
4940 for (unsigned i = 0, e = Ops.size(); i != e; ++i) in BuildVector()
4941 Result = Builder.CreateInsertElement(Result, Ops[i], Builder.getInt32(i)); in BuildVector()
4948 SmallVector<Value*, 4> Ops; in EmitX86BuiltinExpr() local
4959 Ops.push_back(EmitScalarExpr(E->getArg(i))); in EmitX86BuiltinExpr()
4968 Ops.push_back(llvm::ConstantInt::get(getLLVMContext(), Result)); in EmitX86BuiltinExpr()
4976 return Builder.CreateBitCast(BuildVector(Ops), in EmitX86BuiltinExpr()
4979 return Builder.CreateExtractElement(Ops[0], in EmitX86BuiltinExpr()
4980 llvm::ConstantInt::get(Ops[1]->getType(), 0)); in EmitX86BuiltinExpr()
4983 Builder.CreateStore(Ops[0], Tmp); in EmitX86BuiltinExpr()
4999 Ops[1] = Builder.CreateBitCast(Ops[1], VecTy, "cast"); in EmitX86BuiltinExpr()
5004 Ops[1] = Builder.CreateExtractElement(Ops[1], Idx, "extract"); in EmitX86BuiltinExpr()
5007 Ops[0] = Builder.CreateBitCast(Ops[0], PtrTy); in EmitX86BuiltinExpr()
5008 return Builder.CreateStore(Ops[1], Ops[0]); in EmitX86BuiltinExpr()
5011 unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue(); in EmitX86BuiltinExpr()
5021 return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr"); in EmitX86BuiltinExpr()
5030 Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast"); in EmitX86BuiltinExpr()
5031 Ops[1] = llvm::ConstantInt::get(VecTy, (shiftVal-8) * 8); in EmitX86BuiltinExpr()
5035 return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr"); in EmitX86BuiltinExpr()
5042 unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue(); in EmitX86BuiltinExpr()
5052 return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr"); in EmitX86BuiltinExpr()
5060 Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast"); in EmitX86BuiltinExpr()
5061 Ops[1] = llvm::ConstantInt::get(Int32Ty, (shiftVal-16) * 8); in EmitX86BuiltinExpr()
5065 return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr"); in EmitX86BuiltinExpr()
5072 unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue(); in EmitX86BuiltinExpr()
5090 return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr"); in EmitX86BuiltinExpr()
5098 Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast"); in EmitX86BuiltinExpr()
5099 Ops[1] = llvm::ConstantInt::get(Int32Ty, (shiftVal-16) * 8); in EmitX86BuiltinExpr()
5103 return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr"); in EmitX86BuiltinExpr()
5121 Value *BC = Builder.CreateBitCast(Ops[0], in EmitX86BuiltinExpr()
5122 llvm::PointerType::getUnqual(Ops[1]->getType()), in EmitX86BuiltinExpr()
5124 StoreInst *SI = Builder.CreateStore(Ops[1], BC); in EmitX86BuiltinExpr()
5152 Ops[0] = Builder.CreateBitCast(Ops[0], MMXTy, "cast"); in EmitX86BuiltinExpr()
5154 return Builder.CreateCall(F, Ops, name); in EmitX86BuiltinExpr()
5186 Builder.CreateStore(Builder.CreateExtractValue(Call, 0), Ops[0]); in EmitX86BuiltinExpr()
5192 Builder.CreateStore(Ops[0], VecTmp); in EmitX86BuiltinExpr()
5202 SmallVector<Value*, 4> Ops; in EmitPPCBuiltinExpr() local
5205 Ops.push_back(EmitScalarExpr(E->getArg(i))); in EmitPPCBuiltinExpr()
5221 Ops[1] = Builder.CreateBitCast(Ops[1], Int8PtrTy); in EmitPPCBuiltinExpr()
5223 Ops[0] = Builder.CreateGEP(Ops[1], Ops[0]); in EmitPPCBuiltinExpr()
5224 Ops.pop_back(); in EmitPPCBuiltinExpr()
5251 return Builder.CreateCall(F, Ops, ""); in EmitPPCBuiltinExpr()
5261 Ops[2] = Builder.CreateBitCast(Ops[2], Int8PtrTy); in EmitPPCBuiltinExpr()
5262 Ops[1] = Builder.CreateGEP(Ops[2], Ops[1]); in EmitPPCBuiltinExpr()
5263 Ops.pop_back(); in EmitPPCBuiltinExpr()
5284 return Builder.CreateCall(F, Ops, ""); in EmitPPCBuiltinExpr()