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

References

tools/clang/lib/CodeGen/CGBuiltin.cpp
10176       Ops.push_back(EmitScalarExpr(E->getArg(i)));
10185     Ops.push_back(llvm::ConstantInt::get(getLLVMContext(), Result));
10194   auto getCmpIntrinsicCall = [this, &Ops](Intrinsic::ID ID, unsigned Imm) {
10195     Ops.push_back(llvm::ConstantInt::get(Int8Ty, Imm));
10197     return Builder.CreateCall(F, Ops);
10205   auto getVectorFCmpIR = [this, &Ops](CmpInst::Predicate Pred) {
10206     Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]);
10206     Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]);
10207     llvm::VectorType *FPVecTy = cast<llvm::VectorType>(Ops[0]->getType());
10216     Value *Address = Ops[0];
10217     ConstantInt *C = cast<ConstantInt>(Ops[1]);
10226                               Ops[0]);
10246                                       Ops[0]);
10252     Function *F = CGM.getIntrinsic(Intrinsic::ctlz, Ops[0]->getType());
10253     return Builder.CreateCall(F, {Ops[0], Builder.getInt1(false)});
10258     Function *F = CGM.getIntrinsic(Intrinsic::cttz, Ops[0]->getType());
10259     return Builder.CreateCall(F, {Ops[0], Builder.getInt1(false)});
10273     return Builder.CreateBitCast(BuildVector(Ops),
10285     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
10286     uint64_t Index = cast<ConstantInt>(Ops[1])->getZExtValue();
10290     return Builder.CreateExtractElement(Ops[0], Index);
10300     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
10301     unsigned Index = cast<ConstantInt>(Ops[2])->getZExtValue();
10305     return Builder.CreateInsertElement(Ops[0], Ops[1], Index);
10305     return Builder.CreateInsertElement(Ops[0], Ops[1], Index);
10310     Builder.CreateStore(Ops[0], Tmp);
10361       Builder.CreateLShr(Ops[1], ConstantInt::get(Int64Ty, 32)), Int32Ty);
10362     Value *Mlo = Builder.CreateTrunc(Ops[1], Int32Ty);
10363     Ops[1] = Mhi;
10364     Ops.push_back(Mlo);
10365     return Builder.CreateCall(CGM.getIntrinsic(ID), Ops);
10369     return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_xgetbv), Ops);
10388     return EmitX86MaskedStore(*this, Ops, 1);
10392     return EmitX86MaskedStore(*this, Ops, 1);
10408     return Builder.CreateCall(F, Ops);
10422     return EmitX86SExtMask(*this, Ops[0], ConvertType(E->getType()));
10436     return EmitX86ConvertToMask(*this, Ops[0]);
10441     return EmitX86ConvertIntToFp(*this, Ops, /*IsSigned*/true);
10445     return EmitX86ConvertIntToFp(*this, Ops, /*IsSigned*/false);
10451     return EmitScalarFMAExpr(*this, Ops, Ops[0]);
10451     return EmitScalarFMAExpr(*this, Ops, Ops[0]);
10454     return EmitScalarFMAExpr(*this, Ops,
10455                              Constant::getNullValue(Ops[0]->getType()));
10458     return EmitScalarFMAExpr(*this, Ops, Ops[0], /*ZeroMask*/true);
10458     return EmitScalarFMAExpr(*this, Ops, Ops[0], /*ZeroMask*/true);
10461     return EmitScalarFMAExpr(*this, Ops, Ops[2], /*ZeroMask*/false, 2);
10461     return EmitScalarFMAExpr(*this, Ops, Ops[2], /*ZeroMask*/false, 2);
10464     return EmitScalarFMAExpr(*this, Ops, Ops[2], /*ZeroMask*/false, 2,
10464     return EmitScalarFMAExpr(*this, Ops, Ops[2], /*ZeroMask*/false, 2,
10478     return EmitX86FMAExpr(*this, Ops, BuiltinID, /*IsAddSub*/false);
10491     return EmitX86FMAExpr(*this, Ops, BuiltinID, /*IsAddSub*/true);
10507     return EmitX86MaskedStore(*this, Ops, Align);
10527     return EmitX86MaskedLoad(*this, Ops, 1);
10531     return EmitX86MaskedLoad(*this, Ops, 1);
10547     return EmitX86MaskedLoad(*this, Ops, Align);
10568     return EmitX86ExpandLoad(*this, Ops);
10588     return EmitX86CompressStore(*this, Ops);
10608     return EmitX86CompressExpand(*this, Ops, /*IsCompress*/false);
10628     return EmitX86CompressExpand(*this, Ops, /*IsCompress*/true);
10731     unsigned MinElts = std::min(Ops[0]->getType()->getVectorNumElements(),
10732                                 Ops[2]->getType()->getVectorNumElements());
10733     Ops[3] = getMaskVecValue(*this, Ops[3], MinElts);
10733     Ops[3] = getMaskVecValue(*this, Ops[3], MinElts);
10735     return Builder.CreateCall(Intr, Ops);
10839     unsigned MinElts = std::min(Ops[2]->getType()->getVectorNumElements(),
10840                                 Ops[3]->getType()->getVectorNumElements());
10841     Ops[1] = getMaskVecValue(*this, Ops[1], MinElts);
10841     Ops[1] = getMaskVecValue(*this, Ops[1], MinElts);
10843     return Builder.CreateCall(Intr, Ops);
10864     unsigned SrcNumElts = Ops[0]->getType()->getVectorNumElements();
10866     unsigned Index = cast<ConstantInt>(Ops[1])->getZExtValue();
10875     Value *Res = Builder.CreateShuffleVector(Ops[0],
10876                                              UndefValue::get(Ops[0]->getType()),
10880     if (Ops.size() == 4)
10881       Res = EmitX86Select(*this, Ops[3], Res, Ops[2]);
10881       Res = EmitX86Select(*this, Ops[3], Res, Ops[2]);
10901     unsigned DstNumElts = Ops[0]->getType()->getVectorNumElements();
10902     unsigned SrcNumElts = Ops[1]->getType()->getVectorNumElements();
10904     unsigned Index = cast<ConstantInt>(Ops[2])->getZExtValue();
10913     Value *Op1 = Builder.CreateShuffleVector(Ops[1],
10914                                              UndefValue::get(Ops[1]->getType()),
10925     return Builder.CreateShuffleVector(Ops[0], Op1,
10931     Value *Res = Builder.CreateTrunc(Ops[0], Ops[1]->getType());
10931     Value *Res = Builder.CreateTrunc(Ops[0], Ops[1]->getType());
10932     return EmitX86Select(*this, Ops[2], Res, Ops[1]);
10932     return EmitX86Select(*this, Ops[2], Res, Ops[1]);
10937     if (const auto *C = dyn_cast<Constant>(Ops[2]))
10939         return Builder.CreateTrunc(Ops[0], Ops[1]->getType());
10939         return Builder.CreateTrunc(Ops[0], Ops[1]->getType());
10956     return Builder.CreateCall(Intr, Ops);
10966     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
10967     unsigned Imm = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
10975     return Builder.CreateShuffleVector(Ops[0], Ops[1],
10975     return Builder.CreateShuffleVector(Ops[0], Ops[1],
10982     uint32_t Imm = cast<llvm::ConstantInt>(Ops[1])->getZExtValue();
10983     llvm::Type *Ty = Ops[0]->getType();
10999     return Builder.CreateShuffleVector(Ops[0], UndefValue::get(Ty),
11006     uint32_t Imm = cast<llvm::ConstantInt>(Ops[1])->getZExtValue();
11007     llvm::Type *Ty = Ops[0]->getType();
11023     return Builder.CreateShuffleVector(Ops[0], UndefValue::get(Ty),
11036     uint32_t Imm = cast<llvm::ConstantInt>(Ops[1])->getZExtValue();
11037     llvm::Type *Ty = Ops[0]->getType();
11053     return Builder.CreateShuffleVector(Ops[0], UndefValue::get(Ty),
11063     uint32_t Imm = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
11064     llvm::Type *Ty = Ops[0]->getType();
11083     return Builder.CreateShuffleVector(Ops[0], Ops[1],
11083     return Builder.CreateShuffleVector(Ops[0], Ops[1],
11091     unsigned Imm = cast<llvm::ConstantInt>(Ops[1])->getZExtValue();
11092     llvm::Type *Ty = Ops[0]->getType();
11101     return Builder.CreateShuffleVector(Ops[0], UndefValue::get(Ty),
11108     unsigned ShiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue() & 0xff;
11110     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
11122       Ops[1] = Ops[0];
11122       Ops[1] = Ops[0];
11123       Ops[0] = llvm::Constant::getNullValue(Ops[0]->getType());
11123       Ops[0] = llvm::Constant::getNullValue(Ops[0]->getType());
11137     return Builder.CreateShuffleVector(Ops[1], Ops[0],
11137     return Builder.CreateShuffleVector(Ops[1], Ops[0],
11147     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
11148     unsigned ShiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue() & 0xff;
11157     return Builder.CreateShuffleVector(Ops[1], Ops[0],
11157     return Builder.CreateShuffleVector(Ops[1], Ops[0],
11169     unsigned Imm = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
11170     llvm::Type *Ty = Ops[0]->getType();
11186     return Builder.CreateShuffleVector(Ops[0], Ops[1],
11186     return Builder.CreateShuffleVector(Ops[0], Ops[1],
11195     unsigned Imm = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
11196     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
11208         OutOps[l] = llvm::ConstantAggregateZero::get(Ops[0]->getType());
11210         OutOps[l] = Ops[1];
11212         OutOps[l] = Ops[0];
11233     unsigned ShiftVal = cast<llvm::ConstantInt>(Ops[1])->getZExtValue() & 0xff;
11234     llvm::Type *ResultType = Ops[0]->getType();
11253     Value *Cast = Builder.CreateBitCast(Ops[0], VecTy, "cast");
11258     return Builder.CreateBitCast(SV, Ops[0]->getType(), "cast");
11263     unsigned ShiftVal = cast<llvm::ConstantInt>(Ops[1])->getZExtValue() & 0xff;
11264     llvm::Type *ResultType = Ops[0]->getType();
11283     Value *Cast = Builder.CreateBitCast(Ops[0], VecTy, "cast");
11294     unsigned ShiftVal = cast<llvm::ConstantInt>(Ops[1])->getZExtValue() & 0xff;
11295     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11298       return llvm::Constant::getNullValue(Ops[0]->getType());
11300     Value *In = getMaskVecValue(*this, Ops[0], NumElts);
11310     return Builder.CreateBitCast(SV, Ops[0]->getType());
11316     unsigned ShiftVal = cast<llvm::ConstantInt>(Ops[1])->getZExtValue() & 0xff;
11317     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11320       return llvm::Constant::getNullValue(Ops[0]->getType());
11322     Value *In = getMaskVecValue(*this, Ops[0], NumElts);
11332     return Builder.CreateBitCast(SV, Ops[0]->getType());
11341     Value *Ptr = Ops[0];
11342     Value *Src = Ops[1];
11380     return EmitX86FunnelShift(*this, Ops[0], Ops[0], Ops[1], false);
11380     return EmitX86FunnelShift(*this, Ops[0], Ops[0], Ops[1], false);
11380     return EmitX86FunnelShift(*this, Ops[0], Ops[0], Ops[1], false);
11393     return EmitX86FunnelShift(*this, Ops[0], Ops[0], Ops[1], true);
11393     return EmitX86FunnelShift(*this, Ops[0], Ops[0], Ops[1], true);
11393     return EmitX86FunnelShift(*this, Ops[0], Ops[0], Ops[1], true);
11412     return EmitX86Select(*this, Ops[0], Ops[1], Ops[2]);
11412     return EmitX86Select(*this, Ops[0], Ops[1], Ops[2]);
11412     return EmitX86Select(*this, Ops[0], Ops[1], Ops[2]);
11415     Value *A = Builder.CreateExtractElement(Ops[1], (uint64_t)0);
11416     Value *B = Builder.CreateExtractElement(Ops[2], (uint64_t)0);
11417     A = EmitX86ScalarSelect(*this, Ops[0], A, B);
11418     return Builder.CreateInsertElement(Ops[1], A, (uint64_t)0);
11432     unsigned CC = cast<llvm::ConstantInt>(Ops[2])->getZExtValue() & 0x7;
11433     return EmitX86MaskedCompare(*this, CC, true, Ops);
11447     unsigned CC = cast<llvm::ConstantInt>(Ops[2])->getZExtValue() & 0x7;
11448     return EmitX86MaskedCompare(*this, CC, false, Ops);
11454     return EmitX86vpcom(*this, Ops, true);
11459     return EmitX86vpcom(*this, Ops, false);
11465     Value *Or = EmitX86MaskLogic(*this, Instruction::Or, Ops);
11466     Value *C = llvm::Constant::getAllOnesValue(Ops[0]->getType());
11474     Value *Or = EmitX86MaskLogic(*this, Instruction::Or, Ops);
11475     Value *C = llvm::Constant::getNullValue(Ops[0]->getType());
11517     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11518     Value *LHS = getMaskVecValue(*this, Ops[0], NumElts);
11519     Value *RHS = getMaskVecValue(*this, Ops[1], NumElts);
11545     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11546     Value *LHS = getMaskVecValue(*this, Ops[0], NumElts);
11547     Value *RHS = getMaskVecValue(*this, Ops[1], NumElts);
11550     return Builder.CreateBitCast(Res, Ops[0]->getType());
11556     return EmitX86MaskLogic(*this, Instruction::And, Ops);
11561     return EmitX86MaskLogic(*this, Instruction::And, Ops, true);
11566     return EmitX86MaskLogic(*this, Instruction::Or, Ops);
11571     return EmitX86MaskLogic(*this, Instruction::Xor, Ops, true);
11576     return EmitX86MaskLogic(*this, Instruction::Xor,  Ops);
11581     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11582     Value *Res = getMaskVecValue(*this, Ops[0], NumElts);
11584                                  Ops[0]->getType());
11593     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11594     Value *Res = getMaskVecValue(*this, Ops[0], NumElts);
11595     return Builder.CreateBitCast(Res, Ops[0]->getType());
11601     unsigned NumElts = Ops[0]->getType()->getIntegerBitWidth();
11602     Value *LHS = getMaskVecValue(*this, Ops[0], NumElts);
11603     Value *RHS = getMaskVecValue(*this, Ops[1], NumElts);
11618     return Builder.CreateBitCast(Res, Ops[0]->getType());
11627     Function *F = CGM.getIntrinsic(Intrinsic::ctlz, Ops[0]->getType());
11628     return Builder.CreateCall(F, {Ops[0],Builder.getInt1(false)});
11632     Value *A = Builder.CreateExtractElement(Ops[0], (uint64_t)0);
11635     return Builder.CreateInsertElement(Ops[0], A, (uint64_t)0);
11639     unsigned CC = cast<llvm::ConstantInt>(Ops[4])->getZExtValue();
11646       return Builder.CreateCall(CGM.getIntrinsic(IID), Ops);
11648     Value *A = Builder.CreateExtractElement(Ops[1], (uint64_t)0);
11651     Value *Src = Builder.CreateExtractElement(Ops[2], (uint64_t)0);
11652     A = EmitX86ScalarSelect(*this, Ops[3], A, Src);
11653     return Builder.CreateInsertElement(Ops[0], A, (uint64_t)0);
11661     if (Ops.size() == 2) {
11662       unsigned CC = cast<llvm::ConstantInt>(Ops[1])->getZExtValue();
11669         return Builder.CreateCall(CGM.getIntrinsic(IID), Ops);
11672     Function *F = CGM.getIntrinsic(Intrinsic::sqrt, Ops[0]->getType());
11673     return Builder.CreateCall(F, Ops[0]);
11687     return EmitX86Abs(*this, Ops);
11701     return EmitX86MinMax(*this, ICmpInst::ICMP_SGT, Ops);
11714     return EmitX86MinMax(*this, ICmpInst::ICMP_UGT, Ops);
11727     return EmitX86MinMax(*this, ICmpInst::ICMP_SLT, Ops);
11740     return EmitX86MinMax(*this, ICmpInst::ICMP_ULT, Ops);
11745     return EmitX86Muldq(*this, /*IsSigned*/false, Ops);
11750     return EmitX86Muldq(*this, /*IsSigned*/true, Ops);
11758     return EmitX86Ternlog(*this, /*ZeroMask*/false, Ops);
11766     return EmitX86Ternlog(*this, /*ZeroMask*/true, Ops);
11777     return EmitX86FunnelShift(*this, Ops[0], Ops[1], Ops[2], false);
11777     return EmitX86FunnelShift(*this, Ops[0], Ops[1], Ops[2], false);
11777     return EmitX86FunnelShift(*this, Ops[0], Ops[1], Ops[2], false);
11789     return EmitX86FunnelShift(*this, Ops[1], Ops[0], Ops[2], true);
11789     return EmitX86FunnelShift(*this, Ops[1], Ops[0], Ops[2], true);
11789     return EmitX86FunnelShift(*this, Ops[1], Ops[0], Ops[2], true);
11800     return EmitX86FunnelShift(*this, Ops[0], Ops[1], Ops[2], false);
11800     return EmitX86FunnelShift(*this, Ops[0], Ops[1], Ops[2], false);
11800     return EmitX86FunnelShift(*this, Ops[0], Ops[1], Ops[2], false);
11812     return EmitX86FunnelShift(*this, Ops[1], Ops[0], Ops[2], true);
11812     return EmitX86FunnelShift(*this, Ops[1], Ops[0], Ops[2], true);
11812     return EmitX86FunnelShift(*this, Ops[1], Ops[0], Ops[2], true);
11818     Ops[0] = Builder.CreateBitCast(Ops[0], MMXTy, "cast");
11818     Ops[0] = Builder.CreateBitCast(Ops[0], MMXTy, "cast");
11820     return Builder.CreateCall(F, Ops, "pswapd");
11853                                       Ops[0]);
11878                                      { Ops[0], Ops[1], Ops[2] });
11878                                      { Ops[0], Ops[1], Ops[2] });
11878                                      { Ops[0], Ops[1], Ops[2] });
11880                                       Ops[3]);
11890     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
11891     Value *MaskIn = Ops[2];
11892     Ops.erase(&Ops[2]);
11892     Ops.erase(&Ops[2]);
11917     Value *Fpclass = Builder.CreateCall(CGM.getIntrinsic(ID), Ops);
11927     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
11952     Value *Call = Builder.CreateCall(CGM.getIntrinsic(ID), {Ops[0], Ops[1]});
11952     Value *Call = Builder.CreateCall(CGM.getIntrinsic(ID), {Ops[0], Ops[1]});
11955     Builder.CreateDefaultAlignedStore(Result, Ops[2]);
11959     return Builder.CreateDefaultAlignedStore(Result, Ops[3]);
11979     return Builder.CreateCall(CGM.getIntrinsic(ID), Ops);
11985     unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
11986     Value *MaskIn = Ops[2];
11987     Ops.erase(&Ops[2]);
11987     Ops.erase(&Ops[2]);
12003     Value *Shufbit = Builder.CreateCall(CGM.getIntrinsic(ID), Ops);
12050     unsigned CC = cast<llvm::ConstantInt>(Ops[2])->getZExtValue() & 0x1f;
12101       unsigned NumElts = Ops[0]->getType()->getVectorNumElements();
12102       Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]);
12102       Value *Cmp = Builder.CreateFCmp(Pred, Ops[0], Ops[1]);
12103       return EmitX86MaskedCompareResult(*this, Cmp, NumElts, Ops[3]);
12146     Ops[2] = getMaskVecValue(*this, Ops[2],
12146     Ops[2] = getMaskVecValue(*this, Ops[2],
12147                              Ops[0]->getType()->getVectorNumElements());
12149     return Builder.CreateCall(CGM.getIntrinsic(IID), Ops);
12152     return EmitX86CvtBF16ToFloatExpr(*this, E, Ops);
12166     Value *Res = Builder.CreateCall(CGM.getIntrinsic(IID), Ops[0]);
12167     return EmitX86Select(*this, Ops[2], Res, Ops[1]);
12167     return EmitX86Select(*this, Ops[2], Res, Ops[1]);
12174     Value *LHS = Builder.CreateIntCast(Ops[0], Int64Ty, isSigned);
12175     Value *RHS = Builder.CreateIntCast(Ops[1], Int64Ty, isSigned);
12186     Value *LHS = Builder.CreateIntCast(Ops[0], Int128Ty, IsSigned);
12187     Value *RHS = Builder.CreateIntCast(Ops[1], Int128Ty, IsSigned);
12221         Builder.CreateShl(Builder.CreateZExt(Ops[1], Int128Ty), 64);
12222     Value *LowPart128 = Builder.CreateZExt(Ops[0], Int128Ty);
12224     Value *Amt = Builder.CreateAnd(Builder.CreateZExt(Ops[2], Int128Ty),
12273         Builder.CreateBitCast(Ops[0], Int128PtrTy);
12274     Value *ExchangeHigh128 = Builder.CreateZExt(Ops[1], Int128Ty);
12275     Value *ExchangeLow128 = Builder.CreateZExt(Ops[2], Int128Ty);
12276     Address ComparandResult(Builder.CreateBitCast(Ops[3], Int128PtrTy),
12307     return Builder.CreateMemSet(Ops[0], Ops[1], Ops[2], 1, true);
12307     return Builder.CreateMemSet(Ops[0], Ops[1], Ops[2], 1, true);
12307     return Builder.CreateMemSet(Ops[0], Ops[1], Ops[2], 1, true);
12330         Builder.CreateIntToPtr(Ops[0], llvm::PointerType::get(IntTy, 257));
12342         Builder.CreateIntToPtr(Ops[0], llvm::PointerType::get(IntTy, 256));
12354     return EmitX86AddSubSatExpr(*this, Ops, true, true);
12361     return EmitX86AddSubSatExpr(*this, Ops, false, true);
12368     return EmitX86AddSubSatExpr(*this, Ops, true, false);
12375     return EmitX86AddSubSatExpr(*this, Ops, false, false);