|
reference, declaration → definition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
|
References
tools/clang/lib/CodeGen/CGBuiltin.cpp10176 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);