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

References

lib/CodeGen/GlobalISel/Legalizer.cpp
  210     Helper.MIRBuilder.stopObservingChanges();
lib/CodeGen/GlobalISel/LegalizerHelper.cpp
   71   MIRBuilder.setMF(MF);
   72   MIRBuilder.setChangeObserver(Observer);
   79   MIRBuilder.setMF(MF);
   80   MIRBuilder.setChangeObserver(Observer);
   88     return LI.legalizeIntrinsic(MI, MRI, MIRBuilder) ? Legalized
  115     return LI.legalizeCustom(MI, MRI, MIRBuilder, Observer) ? Legalized
  127   MIRBuilder.buildUnmerge(VRegs, Reg);
  145     MIRBuilder.buildUnmerge(VRegs, Reg);
  162     MIRBuilder.buildExtract(NewReg, Reg, MainSize * I);
  169     MIRBuilder.buildExtract(NewReg, Reg, Offset);
  204       MIRBuilder.buildMerge(DstReg, PartRegs);
  209       MIRBuilder.buildConcatVectors(DstReg, PartRegs);
  211       MIRBuilder.buildBuildVector(DstReg, PartRegs);
  219   MIRBuilder.buildUndef(CurResultReg);
  224     MIRBuilder.buildInsert(NewResultReg, CurResultReg, PartReg, Offset);
  234     MIRBuilder.buildInsert(NewResultReg, CurResultReg, LeftoverRegs[I], Offset);
  493   auto &Ctx = MIRBuilder.getMF().getFunction().getContext();
  495   MIRBuilder.setInstr(MI);
  506     auto Status = simpleLibcall(MI, MIRBuilder, Size, HLTy);
  532     auto Status = simpleLibcall(MI, MIRBuilder, Size, HLTy);
  544         MI, MIRBuilder, Type::getDoubleTy(Ctx), Type::getFloatTy(Ctx));
  556         MI, MIRBuilder, Type::getFloatTy(Ctx), Type::getDoubleTy(Ctx));
  569         MI, MIRBuilder,
  584         MI, MIRBuilder,
  600   MIRBuilder.setInstr(MI);
  618           MIRBuilder.buildUndef(NarrowTy)->getOperand(0).getReg());
  622       MIRBuilder.buildBuildVector(DstReg, DstRegs);
  624       MIRBuilder.buildMerge(DstReg, DstRegs);
  638       auto K = MIRBuilder.buildConstant(NarrowTy,
  648       auto K = MIRBuilder.buildConstant(
  677         MIRBuilder.buildConstant(LLT::scalar(64), NarrowTy.getSizeInBits() - 1);
  678     auto Shift = MIRBuilder.buildAShr(NarrowTy, SrcReg, ShiftAmt);
  679     MIRBuilder.buildMerge(MI.getOperand(0).getReg(), {SrcReg, Shift.getReg(0)});
  694     Register ZeroReg = MIRBuilder.buildConstant(SrcTy, 0).getReg(0);
  699     MIRBuilder.buildMerge(MI.getOperand(0).getReg(), Srcs);
  713     auto Unmerge = MIRBuilder.buildUnmerge(NarrowTy, MI.getOperand(1).getReg());
  714     MIRBuilder.buildCopy(MI.getOperand(0).getReg(), Unmerge.getReg(0));
  737         MIRBuilder.buildUAddo(DstReg, CarryOut, Src1Regs[i], Src2Regs[i]);
  739         MIRBuilder.buildUAdde(DstReg, CarryOut, Src1Regs[i],
  748       MIRBuilder.buildBuildVector(DstReg, DstRegs);
  750       MIRBuilder.buildMerge(DstReg, DstRegs);
  768     MIRBuilder.buildInstr(TargetOpcode::G_USUBO, {DstReg, BorrowOut},
  776       MIRBuilder.buildInstr(TargetOpcode::G_USUBE, {DstReg, BorrowOut},
  782     MIRBuilder.buildMerge(MI.getOperand(0).getReg(), DstRegs);
  803       MIRBuilder.buildLoad(TmpReg, MI.getOperand(1).getReg(), MMO);
  804       MIRBuilder.buildAnyExt(DstReg, TmpReg);
  820       MIRBuilder.buildLoad(TmpReg, PtrReg, MMO);
  824       MIRBuilder.buildInstr(ExtLoad)
  831       MIRBuilder.buildZExt(DstReg, TmpReg);
  833       MIRBuilder.buildSExt(DstReg, TmpReg);
  855       MIRBuilder.buildTrunc(TmpReg, SrcReg);
  856       MIRBuilder.buildStore(TmpReg, MI.getOperand(1).getReg(), MMO);
  920       MIRBuilder.setInsertPt(OpMBB, OpMBB.getFirstTerminator());
  925     MIRBuilder.setInsertPt(MBB, MI);
  929           MIRBuilder.buildInstr(TargetOpcode::G_PHI).addDef(DstRegs[i]);
  933     MIRBuilder.setInsertPt(MBB, MBB.getFirstNonPHI());
  934     MIRBuilder.buildMerge(MI.getOperand(0).getReg(), DstRegs);
  958     MIRBuilder.buildUnmerge({LHSL, LHSH}, MI.getOperand(2).getReg());
  962     MIRBuilder.buildUnmerge({RHSL, RHSH}, MI.getOperand(3).getReg());
  969       MachineInstrBuilder XorL = MIRBuilder.buildXor(NarrowTy, LHSL, RHSL);
  970       MachineInstrBuilder XorH = MIRBuilder.buildXor(NarrowTy, LHSH, RHSH);
  971       MachineInstrBuilder Or = MIRBuilder.buildOr(NarrowTy, XorL, XorH);
  972       MachineInstrBuilder Zero = MIRBuilder.buildConstant(NarrowTy, 0);
  973       MIRBuilder.buildICmp(Pred, MI.getOperand(0).getReg(), Or, Zero);
  975       MachineInstrBuilder CmpH = MIRBuilder.buildICmp(Pred, ResTy, LHSH, RHSH);
  977           MIRBuilder.buildICmp(CmpInst::Predicate::ICMP_EQ, ResTy, LHSH, RHSH);
  978       MachineInstrBuilder CmpLU = MIRBuilder.buildICmp(
  980       MIRBuilder.buildSelect(MI.getOperand(0).getReg(), CmpHEQ, CmpLU, CmpH);
 1001       auto TruncMIB = MIRBuilder.buildTrunc(NarrowTy, MO1.getReg());
 1006       MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1006       MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1006       MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1007       MIRBuilder.buildInstr(TargetOpcode::G_SEXT, {MO2.getReg()}, {DstExt});
 1034     MIRBuilder.buildUnmerge(SrcRegs, MI.getOperand(1).getReg());
 1037         MIRBuilder.buildConstant(NarrowTy, NarrowTy.getScalarSizeInBits() - 1)
 1054         DstRegs.push_back(MIRBuilder
 1062             MIRBuilder
 1074     MIRBuilder.buildMerge(DstReg, DstRegs);
 1084   auto ExtB = MIRBuilder.buildInstr(ExtOpcode, {WideTy}, {MO.getReg()});
 1091   auto ExtB = MIRBuilder.buildInstr(TargetOpcode::G_TRUNC, {NarrowTy},
 1100   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1100   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1100   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1101   MIRBuilder.buildInstr(TruncOpcode, {MO.getReg()}, {DstExt});
 1109   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1109   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1109   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1110   MIRBuilder.buildInstr(ExtOpcode, {MO.getReg()}, {DstTrunc});
 1118   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1118   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1118   MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1119   MIRBuilder.buildExtract(MO.getReg(), DstExt, 0);
 1138     Register ImpDef = MIRBuilder.buildUndef(OldTy).getReg(0);
 1142     auto Concat = MIRBuilder.buildConcatVectors(MoreTy, Parts);
 1148   Register ImpDef = MIRBuilder.buildUndef(MoreTy).getReg(0);
 1149   MIRBuilder.buildInsert(MoreReg, ImpDef, MO.getReg(), 0);
 1177     Register ResultReg = MIRBuilder.buildZExt(WideTy, Src1).getReg(0);
 1185       auto ZextInput = MIRBuilder.buildZExt(WideTy, SrcReg);
 1190       auto ShiftAmt = MIRBuilder.buildConstant(WideTy, Offset);
 1191       auto Shl = MIRBuilder.buildShl(WideTy, ZextInput, ShiftAmt);
 1192       MIRBuilder.buildOr(NextResult, ResultReg, Shl);
 1197       MIRBuilder.buildTrunc(DstReg, ResultReg);
 1199       MIRBuilder.buildIntToPtr(DstReg, ResultReg);
 1240       auto Unmerge = MIRBuilder.buildUnmerge(GCDTy, SrcReg);
 1248     Register UndefReg = MIRBuilder.buildUndef(GCDTy).getReg(0);
 1258     auto Merge = MIRBuilder.buildMerge(WideTy, Slicer.take_front(PartsPerGCD));
 1265     MIRBuilder.buildMerge(DstReg, NewMergeRegs);
 1267     auto FinalMerge = MIRBuilder.buildMerge(WideDstTy, NewMergeRegs);
 1268     MIRBuilder.buildTrunc(DstReg, FinalMerge.getReg(0));
 1296   auto WideSrc = MIRBuilder.buildZExt(NewSrcTy, SrcReg);
 1299     auto ShiftAmt = MIRBuilder.buildConstant(NewSrcTy, SizeDiff * I);
 1300     auto Shl = MIRBuilder.buildShl(NewSrcTy, WideSrc, ShiftAmt);
 1301     WideSrc = MIRBuilder.buildOr(NewSrcTy, WideSrc, Shl);
 1333       const DataLayout &DL = MIRBuilder.getDataLayout();
 1338       Src = MIRBuilder.buildPtrToInt(SrcAsIntTy, Src);
 1347       MIRBuilder.buildTrunc(DstReg,
 1348                             MIRBuilder.buildAnyExtOrTrunc(WideTy, Src));
 1356       Src = MIRBuilder.buildAnyExt(WideTy, Src);
 1361     auto LShr = MIRBuilder.buildLShr(
 1362       ShiftTy, Src, MIRBuilder.buildConstant(ShiftTy, Offset));
 1363     MIRBuilder.buildTrunc(DstReg, LShr);
 1408   MIRBuilder.setInstr(MI);
 1425     auto LHSZext = MIRBuilder.buildInstr(TargetOpcode::G_ZEXT, {WideTy},
 1427     auto RHSZext = MIRBuilder.buildInstr(TargetOpcode::G_ZEXT, {WideTy},
 1433     auto NewOp = MIRBuilder.buildInstr(Opcode, {WideTy}, {LHSZext, RHSZext});
 1436     auto AndOp = MIRBuilder.buildInstr(
 1438         {NewOp, MIRBuilder.buildConstant(WideTy, Mask.getZExtValue())});
 1440     MIRBuilder.buildICmp(CmpInst::ICMP_NE, MI.getOperand(1).getReg(), NewOp,
 1443     MIRBuilder.buildTrunc(MI.getOperand(0).getReg(), NewOp);
 1462     auto MIBSrc = MIRBuilder.buildZExt(WideTy, SrcReg);
 1470       MIBSrc = MIRBuilder.buildOr(
 1471         WideTy, MIBSrc, MIRBuilder.buildConstant(WideTy, TopBit));
 1475     auto MIBNewOp = MIRBuilder.buildInstr(MI.getOpcode(), {WideTy}, {MIBSrc});
 1481       MIBNewOp = MIRBuilder.buildInstr(
 1483           {MIBNewOp, MIRBuilder.buildConstant(WideTy, SizeDiff)});
 1486     MIRBuilder.buildZExtOrTrunc(MI.getOperand(0), MIBNewOp);
 1501     MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1501     MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1501     MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1505     MIRBuilder.buildConstant(ShiftAmtReg, DiffBits);
 1506     MIRBuilder.buildInstr(TargetOpcode::G_LSHR)
 1511     MIRBuilder.buildTrunc(DstReg, ShrReg);
 1525     MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1525     MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1525     MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
 1527     auto ShiftAmt = MIRBuilder.buildConstant(WideTy, DiffBits);
 1528     auto Shift = MIRBuilder.buildLShr(WideTy, DstExt, ShiftAmt);
 1529     MIRBuilder.buildTrunc(DstReg, Shift);
 1618       widenScalarSrc(MI, WideTy, 1, MIRBuilder.getBoolExtOp(IsVec, false));
 1677     LLVMContext &Ctx = MIRBuilder.getMF().getFunction().getContext();
 1688     LLVMContext &Ctx = MIRBuilder.getMF().getFunction().getContext();
 1721     widenScalarSrc(MI, WideTy, 0, MIRBuilder.getBoolExtOp(false, false));
 1764       MIRBuilder.setInsertPt(OpMBB, OpMBB.getFirstTerminator());
 1769     MIRBuilder.setInsertPt(MBB, --MBB.getFirstNonPHI());
 1911   MIRBuilder.setInstr(MI);
 1919     MIRBuilder.buildInstr(MI.getOpcode() == G_SREM ? G_SDIV : G_UDIV)
 1925     MIRBuilder.buildMul(ProdReg, QuotReg, MI.getOperand(2).getReg());
 1926     MIRBuilder.buildSub(MI.getOperand(0).getReg(), MI.getOperand(1).getReg(),
 1943     MIRBuilder.buildMul(Res, LHS, RHS);
 1950     MIRBuilder.buildInstr(Opcode)
 1956     MIRBuilder.buildConstant(Zero, 0);
 1963       MIRBuilder.buildConstant(ShiftAmt, Ty.getSizeInBits() - 1);
 1964       MIRBuilder.buildInstr(TargetOpcode::G_ASHR)
 1968       MIRBuilder.buildICmp(CmpInst::ICMP_NE, Overflow, HiPart, Shifted);
 1970       MIRBuilder.buildICmp(CmpInst::ICMP_NE, Overflow, HiPart, Zero);
 1982     LLVMContext &Ctx = MIRBuilder.getMF().getFunction().getContext();
 2001     auto Zero = MIRBuilder.buildFConstant(Ty, ZeroForNegation);
 2004     MIRBuilder.buildInstr(TargetOpcode::G_FSUB, {Res}, {ZeroReg, SubByReg},
 2019     MIRBuilder.buildInstr(TargetOpcode::G_FNEG).addDef(Neg).addUse(RHS);
 2020     MIRBuilder.buildInstr(TargetOpcode::G_FADD, {Res}, {LHS, Neg}, MI.getFlags());
 2032     MIRBuilder.buildAtomicCmpXchg(OldValRes, Addr, CmpVal, NewVal,
 2034     MIRBuilder.buildICmp(CmpInst::ICMP_EQ, SuccessRes, OldValRes, CmpVal);
 2070         MachineFunction &MF = MIRBuilder.getMF();
 2082             MIRBuilder.buildLoad(LargeLdReg, PtrReg, *LargeMMO);
 2085             MIRBuilder.buildConstant(LLT::scalar(64), LargeSplitSize / 8);
 2087         auto SmallPtr = MIRBuilder.buildGEP(GEPReg, PtrReg, OffsetCst.getReg(0));
 2088         auto SmallLoad = MIRBuilder.buildLoad(SmallLdReg, SmallPtr.getReg(0),
 2091         auto ShiftAmt = MIRBuilder.buildConstant(AnyExtTy, LargeSplitSize);
 2092         auto Shift = MIRBuilder.buildShl(AnyExtTy, SmallLoad, ShiftAmt);
 2093         auto Or = MIRBuilder.buildOr(AnyExtTy, Shift, LargeLoad);
 2094         MIRBuilder.buildTrunc(DstReg, {Or.getReg(0)});
 2098       MIRBuilder.buildLoad(DstReg, PtrReg, MMO);
 2106       MIRBuilder.buildLoad(TmpReg, PtrReg, MMO);
 2111         MIRBuilder.buildAnyExt(DstReg, TmpReg);
 2114         MIRBuilder.buildSExt(DstReg, TmpReg);
 2117         MIRBuilder.buildZExt(DstReg, TmpReg);
 2146     auto ExtVal = MIRBuilder.buildAnyExt(ExtendTy, SrcReg);
 2151     auto ShiftAmt = MIRBuilder.buildConstant(ExtendTy, LargeSplitSize);
 2152     auto SmallVal = MIRBuilder.buildLShr(ExtendTy, ExtVal, ShiftAmt);
 2157         MIRBuilder.buildConstant(LLT::scalar(64), LargeSplitSize / 8);
 2159     auto SmallPtr = MIRBuilder.buildGEP(GEPReg, PtrReg, OffsetCst.getReg(0));
 2161     MachineFunction &MF = MIRBuilder.getMF();
 2166     MIRBuilder.buildStore(ExtVal.getReg(0), PtrReg, *LargeMMO);
 2167     MIRBuilder.buildStore(SmallVal.getReg(0), SmallPtr.getReg(0), *SmallMMO);
 2183     MIRBuilder.buildAdd(Res, LHS, RHS);
 2184     MIRBuilder.buildICmp(CmpInst::ICMP_ULT, CarryOut, Res, RHS);
 2199     MIRBuilder.buildAdd(TmpRes, LHS, RHS);
 2200     MIRBuilder.buildZExt(ZExtCarryIn, CarryIn);
 2201     MIRBuilder.buildAdd(Res, TmpRes, ZExtCarryIn);
 2202     MIRBuilder.buildICmp(CmpInst::ICMP_ULT, CarryOut, Res, LHS);
 2213     MIRBuilder.buildSub(Res, LHS, RHS);
 2214     MIRBuilder.buildICmp(CmpInst::ICMP_ULT, BorrowOut, LHS, RHS);
 2231     MIRBuilder.buildSub(TmpRes, LHS, RHS);
 2232     MIRBuilder.buildZExt(ZExtBorrowIn, BorrowIn);
 2233     MIRBuilder.buildSub(Res, TmpRes, ZExtBorrowIn);
 2234     MIRBuilder.buildICmp(CmpInst::ICMP_EQ, LHS_EQ_RHS, LHS, RHS);
 2235     MIRBuilder.buildICmp(CmpInst::ICMP_ULT, LHS_ULT_RHS, LHS, RHS);
 2236     MIRBuilder.buildSelect(BorrowOut, LHS_EQ_RHS, BorrowIn, LHS_ULT_RHS);
 2268     auto MIBSz = MIRBuilder.buildConstant(DstTy, DstTy.getScalarSizeInBits() - SizeInBits);
 2269     MIRBuilder.buildInstr(TargetOpcode::G_SHL, {TmpRes}, {SrcReg, MIBSz->getOperand(0).getReg()});
 2270     MIRBuilder.buildInstr(TargetOpcode::G_ASHR, {DstReg}, {TmpRes, MIBSz->getOperand(0).getReg()});
 2300     MIRBuilder.buildUndef(TmpReg);
 2305     MIRBuilder.buildConcatVectors(DstReg, DstRegs);
 2307     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 2335     MIRBuilder.buildUndef(AccumDstReg);
 2343         MIRBuilder.buildExtract(PartOpReg, MI.getOperand(I).getReg(), Offset);
 2348       MIRBuilder.buildInstr(Opc, {PartDstReg}, SrcOps, Flags);
 2351       MIRBuilder.buildInsert(PartInsertReg, AccumDstReg, PartDstReg, Offset);
 2359       MIRBuilder.buildExtract(PartOpReg, MI.getOperand(I).getReg(),
 2365     MIRBuilder.buildInstr(Opc, {PartDstReg}, SrcOps, Flags);
 2366     MIRBuilder.buildInsert(DstReg, AccumDstReg, PartDstReg, BitsForNumParts);
 2386       MIRBuilder.buildInstr(Opc, {DstReg}, {Src0Regs[i]}, Flags);
 2388       MIRBuilder.buildInstr(Opc, {DstReg}, {Src0Regs[i], Src1Regs[i]}, Flags);
 2390       MIRBuilder.buildInstr(Opc, {DstReg},
 2398     MIRBuilder.buildConcatVectors(DstReg, DstRegs);
 2400     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 2462         NewInsts.push_back(MIRBuilder.buildInstrNoInsert(MI.getOpcode())
 2470         NewInsts.push_back(MIRBuilder.buildInstrNoInsert(MI.getOpcode())
 2494     MIRBuilder.insertInstr(MIB);
 2534     MachineInstr *NewInst = MIRBuilder.buildInstr(MI.getOpcode())
 2543     MIRBuilder.buildConcatVectors(DstReg, DstRegs);
 2545     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 2601       MIRBuilder.buildICmp(Pred, DstReg, Src1Regs[I], Src2Regs[I]);
 2604         = MIRBuilder.buildFCmp(Pred, DstReg, Src1Regs[I], Src2Regs[I]);
 2610     MIRBuilder.buildConcatVectors(DstReg, DstRegs);
 2612     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 2676     MIRBuilder.buildSelect(DstReg, CondTy.isVector() ? Src0Regs[i] : CondReg,
 2682     MIRBuilder.buildConcatVectors(DstReg, DstRegs);
 2684     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 2715     NewInsts.push_back(MIRBuilder.buildInstr(TargetOpcode::G_PHI)
 2724   MIRBuilder.setInsertPt(*MBB, MBB->getFirstNonPHI());
 2736     MIRBuilder.setInsertPt(OpMBB, OpMBB.getFirstTerminator());
 2781   auto Unmerge = MIRBuilder.buildUnmerge(GCDTy, SrcReg);
 2786     auto MIB = MIRBuilder.buildInstr(TargetOpcode::G_UNMERGE_VALUES);
 2816     UndefReg = MIRBuilder.buildUndef(SrcTy).getReg(0);
 2840     auto BuildVec = MIRBuilder.buildBuildVector(NarrowTy, SubBuildVector);
 2846     MIRBuilder.buildConcatVectors(DstReg, ConcatOps);
 2848     auto Concat = MIRBuilder.buildConcatVectors(WidenedDstTy, ConcatOps);
 2849     MIRBuilder.buildExtract(DstReg, Concat, 0);
 2903     MachineFunction &MF = MIRBuilder.getMF();
 2911       MIRBuilder.materializeGEP(NewAddrReg, AddrReg, OffsetTy, ByteOffset);
 2919         MIRBuilder.buildLoad(Dst, NewAddrReg, *NewMMO);
 2921         MIRBuilder.buildStore(ValRegs[Idx], NewAddrReg, *NewMMO);
 2948   MIRBuilder.setInstr(MI);
 3047   MIRBuilder.buildUnmerge({InL, InH}, MI.getOperand(1).getReg());
 3050     MIRBuilder.buildMerge(MI.getOperand(0).getReg(), {InL, InH});
 3062       Lo = Hi = MIRBuilder.buildConstant(NVT, 0);
 3064       Lo = MIRBuilder.buildConstant(NVT, 0);
 3065       Hi = MIRBuilder.buildShl(NVT, InL,
 3066                                MIRBuilder.buildConstant(AmtTy, Amt - NVTBits));
 3068       Lo = MIRBuilder.buildConstant(NVT, 0);
 3071       Lo = MIRBuilder.buildShl(NVT, InL, MIRBuilder.buildConstant(AmtTy, Amt));
 3071       Lo = MIRBuilder.buildShl(NVT, InL, MIRBuilder.buildConstant(AmtTy, Amt));
 3073           MIRBuilder.buildShl(NVT, InH, MIRBuilder.buildConstant(AmtTy, Amt));
 3073           MIRBuilder.buildShl(NVT, InH, MIRBuilder.buildConstant(AmtTy, Amt));
 3074       auto OrRHS = MIRBuilder.buildLShr(
 3075           NVT, InL, MIRBuilder.buildConstant(AmtTy, -Amt + NVTBits));
 3076       Hi = MIRBuilder.buildOr(NVT, OrLHS, OrRHS);
 3080       Lo = Hi = MIRBuilder.buildConstant(NVT, 0);
 3082       Lo = MIRBuilder.buildLShr(NVT, InH,
 3083                                 MIRBuilder.buildConstant(AmtTy, Amt - NVTBits));
 3084       Hi = MIRBuilder.buildConstant(NVT, 0);
 3087       Hi = MIRBuilder.buildConstant(NVT, 0);
 3089       auto ShiftAmtConst = MIRBuilder.buildConstant(AmtTy, Amt);
 3091       auto OrLHS = MIRBuilder.buildLShr(NVT, InL, ShiftAmtConst);
 3092       auto OrRHS = MIRBuilder.buildShl(
 3093           NVT, InH, MIRBuilder.buildConstant(AmtTy, -Amt + NVTBits));
 3095       Lo = MIRBuilder.buildOr(NVT, OrLHS, OrRHS);
 3096       Hi = MIRBuilder.buildLShr(NVT, InH, ShiftAmtConst);
 3100       Hi = Lo = MIRBuilder.buildAShr(
 3101           NVT, InH, MIRBuilder.buildConstant(AmtTy, NVTBits - 1));
 3103       Lo = MIRBuilder.buildAShr(NVT, InH,
 3104                                 MIRBuilder.buildConstant(AmtTy, Amt - NVTBits));
 3105       Hi = MIRBuilder.buildAShr(NVT, InH,
 3106                                 MIRBuilder.buildConstant(AmtTy, NVTBits - 1));
 3109       Hi = MIRBuilder.buildAShr(NVT, InH,
 3110                                 MIRBuilder.buildConstant(AmtTy, NVTBits - 1));
 3112       auto ShiftAmtConst = MIRBuilder.buildConstant(AmtTy, Amt);
 3114       auto OrLHS = MIRBuilder.buildLShr(NVT, InL, ShiftAmtConst);
 3115       auto OrRHS = MIRBuilder.buildShl(
 3116           NVT, InH, MIRBuilder.buildConstant(AmtTy, -Amt + NVTBits));
 3118       Lo = MIRBuilder.buildOr(NVT, OrLHS, OrRHS);
 3119       Hi = MIRBuilder.buildAShr(NVT, InH, ShiftAmtConst);
 3123   MIRBuilder.buildMerge(MI.getOperand(0).getReg(), {Lo.getReg(), Hi.getReg()});
 3167   auto NewBits = MIRBuilder.buildConstant(ShiftAmtTy, NewBitSize);
 3171   MIRBuilder.buildUnmerge({InL, InH}, MI.getOperand(1).getReg());
 3173   auto AmtExcess = MIRBuilder.buildSub(ShiftAmtTy, Amt, NewBits);
 3174   auto AmtLack = MIRBuilder.buildSub(ShiftAmtTy, NewBits, Amt);
 3176   auto Zero = MIRBuilder.buildConstant(ShiftAmtTy, 0);
 3177   auto IsShort = MIRBuilder.buildICmp(ICmpInst::ICMP_ULT, CondTy, Amt, NewBits);
 3178   auto IsZero = MIRBuilder.buildICmp(ICmpInst::ICMP_EQ, CondTy, Amt, Zero);
 3184     auto LoS = MIRBuilder.buildShl(HalfTy, InL, Amt);
 3186     auto LoOr = MIRBuilder.buildLShr(HalfTy, InL, AmtLack);
 3187     auto HiOr = MIRBuilder.buildShl(HalfTy, InH, Amt);
 3188     auto HiS = MIRBuilder.buildOr(HalfTy, LoOr, HiOr);
 3191     auto LoL = MIRBuilder.buildConstant(HalfTy, 0);         // Lo part is zero.
 3192     auto HiL = MIRBuilder.buildShl(HalfTy, InL, AmtExcess); // Hi from Lo part.
 3194     auto Lo = MIRBuilder.buildSelect(HalfTy, IsShort, LoS, LoL);
 3195     auto Hi = MIRBuilder.buildSelect(
 3196         HalfTy, IsZero, InH, MIRBuilder.buildSelect(HalfTy, IsShort, HiS, HiL));
 3205     auto HiS = MIRBuilder.buildInstr(MI.getOpcode(), {HalfTy}, {InH, Amt});
 3207     auto LoOr = MIRBuilder.buildLShr(HalfTy, InL, Amt);
 3208     auto HiOr = MIRBuilder.buildShl(HalfTy, InH, AmtLack);
 3209     auto LoS = MIRBuilder.buildOr(HalfTy, LoOr, HiOr);
 3214       HiL = MIRBuilder.buildConstant(HalfTy, 0);            // Hi part is zero.
 3216       auto ShiftAmt = MIRBuilder.buildConstant(ShiftAmtTy, NewBitSize - 1);
 3217       HiL = MIRBuilder.buildAShr(HalfTy, InH, ShiftAmt);    // Sign of Hi part.
 3219     auto LoL = MIRBuilder.buildInstr(MI.getOpcode(), {HalfTy},
 3222     auto Lo = MIRBuilder.buildSelect(
 3223         HalfTy, IsZero, InL, MIRBuilder.buildSelect(HalfTy, IsShort, LoS, LoL));
 3225     auto Hi = MIRBuilder.buildSelect(HalfTy, IsShort, HiS, HiL);
 3235   MIRBuilder.buildMerge(DstReg, ResultRegs);
 3248     MIRBuilder.setInsertPt(OpMBB, OpMBB.getFirstTerminator());
 3253   MIRBuilder.setInsertPt(MBB, --MBB.getFirstNonPHI());
 3262   MIRBuilder.setInstr(MI);
 3330     auto MIB = MIRBuilder.buildInstr(TargetOpcode::G_UNMERGE_VALUES);
 3353   MachineIRBuilder &B = MIRBuilder;
 3442   MIRBuilder.buildMerge(DstReg, DstRegs);
 3497       MIRBuilder.buildExtract(SegReg, SrcRegs[i], ExtractOffset);
 3505     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 3507     MIRBuilder.buildMerge(DstReg, DstRegs);
 3569       MIRBuilder.buildExtract(SegReg, OpReg, ExtractOffset);
 3573     MIRBuilder.buildInsert(DstReg, SrcRegs[i], SegReg, InsertOffset);
 3580     MIRBuilder.buildBuildVector(DstReg, DstRegs);
 3582     MIRBuilder.buildMerge(DstReg, DstRegs);
 3609     auto Inst = MIRBuilder.buildInstr(MI.getOpcode(), {NarrowTy},
 3615     auto Inst = MIRBuilder.buildInstr(
 3656     auto Select = MIRBuilder.buildSelect(NarrowTy,
 3662     auto Select = MIRBuilder.buildSelect(
 3697       auto MIBCtlzZU = MIRBuilder.buildInstr(TargetOpcode::G_CTLZ_ZERO_UNDEF,
 3699       auto MIBZero = MIRBuilder.buildConstant(Ty, 0);
 3700       auto MIBLen = MIRBuilder.buildConstant(Ty, Len);
 3701       auto MIBICmp = MIRBuilder.buildICmp(CmpInst::ICMP_EQ, LLT::scalar(1),
 3703       MIRBuilder.buildSelect(MI.getOperand(0).getReg(), MIBICmp, MIBLen,
 3722       auto MIBShiftAmt = MIRBuilder.buildConstant(Ty, 1ULL << i);
 3723       auto MIBOp = MIRBuilder.buildInstr(
 3725           {Op, MIRBuilder.buildInstr(TargetOpcode::G_LSHR, {Ty},
 3729     auto MIBPop = MIRBuilder.buildInstr(TargetOpcode::G_CTPOP, {Ty}, {Op});
 3730     MIRBuilder.buildInstr(TargetOpcode::G_SUB, {MI.getOperand(0).getReg()},
 3731                           {MIRBuilder.buildConstant(Ty, Len), MIBPop});
 3748       auto MIBCttzZU = MIRBuilder.buildInstr(TargetOpcode::G_CTTZ_ZERO_UNDEF,
 3750       auto MIBZero = MIRBuilder.buildConstant(Ty, 0);
 3751       auto MIBLen = MIRBuilder.buildConstant(Ty, Len);
 3752       auto MIBICmp = MIRBuilder.buildICmp(CmpInst::ICMP_EQ, LLT::scalar(1),
 3754       MIRBuilder.buildSelect(MI.getOperand(0).getReg(), MIBICmp, MIBLen,
 3763     auto MIBCstNeg1 = MIRBuilder.buildConstant(Ty, -1);
 3765         MIRBuilder.buildInstr(TargetOpcode::G_XOR, {Ty}, {SrcReg, MIBCstNeg1});
 3766     auto MIBTmp = MIRBuilder.buildInstr(
 3768         {MIBNot, MIRBuilder.buildInstr(TargetOpcode::G_ADD, {Ty},
 3772       auto MIBCstLen = MIRBuilder.buildConstant(Ty, Len);
 3773       MIRBuilder.buildInstr(
 3776            MIRBuilder.buildInstr(TargetOpcode::G_CTLZ, {Ty}, {MIBTmp})});
 3809   auto Zero32 = MIRBuilder.buildConstant(S32, 0);
 3810   auto Zero64 = MIRBuilder.buildConstant(S64, 0);
 3812   auto LZ = MIRBuilder.buildCTLZ_ZERO_UNDEF(S32, Src);
 3814   auto K = MIRBuilder.buildConstant(S32, 127U + 63U);
 3815   auto Sub = MIRBuilder.buildSub(S32, K, LZ);
 3817   auto NotZero = MIRBuilder.buildICmp(CmpInst::ICMP_NE, S1, Src, Zero64);
 3818   auto E = MIRBuilder.buildSelect(S32, NotZero, Sub, Zero32);
 3820   auto Mask0 = MIRBuilder.buildConstant(S64, (-1ULL) >> 1);
 3821   auto ShlLZ = MIRBuilder.buildShl(S64, Src, LZ);
 3823   auto U = MIRBuilder.buildAnd(S64, ShlLZ, Mask0);
 3825   auto Mask1 = MIRBuilder.buildConstant(S64, 0xffffffffffULL);
 3826   auto T = MIRBuilder.buildAnd(S64, U, Mask1);
 3828   auto UShl = MIRBuilder.buildLShr(S64, U, MIRBuilder.buildConstant(S64, 40));
 3828   auto UShl = MIRBuilder.buildLShr(S64, U, MIRBuilder.buildConstant(S64, 40));
 3829   auto ShlE = MIRBuilder.buildShl(S32, E, MIRBuilder.buildConstant(S32, 23));
 3829   auto ShlE = MIRBuilder.buildShl(S32, E, MIRBuilder.buildConstant(S32, 23));
 3830   auto V = MIRBuilder.buildOr(S32, ShlE, MIRBuilder.buildTrunc(S32, UShl));
 3830   auto V = MIRBuilder.buildOr(S32, ShlE, MIRBuilder.buildTrunc(S32, UShl));
 3832   auto C = MIRBuilder.buildConstant(S64, 0x8000000000ULL);
 3833   auto RCmp = MIRBuilder.buildICmp(CmpInst::ICMP_UGT, S1, T, C);
 3834   auto TCmp = MIRBuilder.buildICmp(CmpInst::ICMP_EQ, S1, T, C);
 3835   auto One = MIRBuilder.buildConstant(S32, 1);
 3837   auto VTrunc1 = MIRBuilder.buildAnd(S32, V, One);
 3838   auto Select0 = MIRBuilder.buildSelect(S32, TCmp, VTrunc1, Zero32);
 3839   auto R = MIRBuilder.buildSelect(S32, RCmp, One, Select0);
 3840   MIRBuilder.buildAdd(Dst, V, R);
 3887     auto SignBit = MIRBuilder.buildConstant(S64, 63);
 3888     auto S = MIRBuilder.buildAShr(S64, L, SignBit);
 3890     auto LPlusS = MIRBuilder.buildAdd(S64, L, S);
 3891     auto Xor = MIRBuilder.buildXor(S64, LPlusS, S);
 3892     auto R = MIRBuilder.buildUITOFP(S32, Xor);
 3894     auto RNeg = MIRBuilder.buildFNeg(S32, R);
 3895     auto SignNotZero = MIRBuilder.buildICmp(CmpInst::ICMP_NE, S1, S,
 3896                                             MIRBuilder.buildConstant(S64, 0));
 3897     MIRBuilder.buildSelect(Dst, SignNotZero, RNeg, R);
 3928   MachineInstrBuilder FPTOSI = MIRBuilder.buildFPTOSI(DstTy, Src);
 3930   MachineInstrBuilder Threshold = MIRBuilder.buildFConstant(SrcTy, TwoPExpFP);
 3933   MachineInstrBuilder FSub = MIRBuilder.buildFSub(SrcTy, Src, Threshold);
 3934   MachineInstrBuilder ResLowBits = MIRBuilder.buildFPTOSI(DstTy, FSub);
 3935   MachineInstrBuilder ResHighBit = MIRBuilder.buildConstant(DstTy, TwoPExpInt);
 3936   MachineInstrBuilder Res = MIRBuilder.buildXor(DstTy, ResLowBits, ResHighBit);
 3939       MIRBuilder.buildFCmp(CmpInst::FCMP_ULT, DstTy, Src, Threshold);
 3940   MIRBuilder.buildSelect(Dst, FCMP, FPTOSI, Res);
 3970   auto Cmp = MIRBuilder.buildICmp(Pred, CmpType, Src0, Src1);
 3971   MIRBuilder.buildSelect(Dst, Cmp, Src0, Src1);
 3989   auto SignBitMask = MIRBuilder.buildConstant(
 3992   auto NotSignBitMask = MIRBuilder.buildConstant(
 3995   auto And0 = MIRBuilder.buildAnd(Src0Ty, Src0, NotSignBitMask);
 3999     auto And1 = MIRBuilder.buildAnd(Src1Ty, Src0, SignBitMask);
 4000     Or = MIRBuilder.buildOr(Dst, And0, And1);
 4002     auto ShiftAmt = MIRBuilder.buildConstant(Src0Ty, Src0Size - Src1Size);
 4003     auto Zext = MIRBuilder.buildZExt(Src0Ty, Src1);
 4004     auto Shift = MIRBuilder.buildShl(Src0Ty, Zext, ShiftAmt);
 4005     auto And1 = MIRBuilder.buildAnd(Src0Ty, Shift, SignBitMask);
 4006     Or = MIRBuilder.buildOr(Dst, And0, And1);
 4008     auto ShiftAmt = MIRBuilder.buildConstant(Src1Ty, Src1Size - Src0Size);
 4009     auto Shift = MIRBuilder.buildLShr(Src1Ty, Src1, ShiftAmt);
 4010     auto Trunc = MIRBuilder.buildTrunc(Src0Ty, Shift);
 4011     auto And1 = MIRBuilder.buildAnd(Src0Ty, Trunc, SignBitMask);
 4012     Or = MIRBuilder.buildOr(Dst, And0, And1);
 4043       Src0 = MIRBuilder.buildFCanonicalize(Ty, Src0, MI.getFlags()).getReg(0);
 4046       Src1 = MIRBuilder.buildFCanonicalize(Ty, Src1, MI.getFlags()).getReg(0);
 4051   MIRBuilder.buildInstr(NewOp, {Dst}, {Src0, Src1}, MI.getFlags());
 4062   auto Mul = MIRBuilder.buildFMul(Ty, MI.getOperand(1), MI.getOperand(2),
 4064   MIRBuilder.buildFAdd(DstReg, Mul, MI.getOperand(3), Flags);
 4083     Register Cast = MIRBuilder.buildBitcast(IntTy, SrcReg).getReg(0);
 4085     MIRBuilder.buildTrunc(Dst0Reg, Cast);
 4090       auto ShiftAmt = MIRBuilder.buildConstant(IntTy, Offset);
 4091       auto Shift = MIRBuilder.buildLShr(IntTy, Cast, ShiftAmt);
 4092       MIRBuilder.buildTrunc(MI.getOperand(I), Shift);
 4124       Val = MIRBuilder.buildUndef(DstTy).getReg(0);
 4127     MIRBuilder.buildCopy(DstReg, Val);
 4139         Undef = MIRBuilder.buildUndef(EltTy).getReg(0);
 4150       auto IdxK = MIRBuilder.buildConstant(IdxTy, ExtractIdx);
 4151       auto Extract = MIRBuilder.buildExtractVectorElement(EltTy, SrcVec, IdxK);
 4156   MIRBuilder.buildBuildVector(DstReg, BuildVec);
 4174   auto SPTmp = MIRBuilder.buildCopy(PtrTy, SPReg);
 4175   SPTmp = MIRBuilder.buildCast(IntPtrTy, SPTmp);
 4180   auto Alloc = MIRBuilder.buildSub(IntPtrTy, SPTmp, AllocSize);
 4184     auto AlignCst = MIRBuilder.buildConstant(IntPtrTy, AlignMask);
 4185     Alloc = MIRBuilder.buildAnd(IntPtrTy, Alloc, AlignCst);
 4188   SPTmp = MIRBuilder.buildCast(PtrTy, Alloc);
 4189   MIRBuilder.buildCopy(SPReg, SPTmp);
 4190   MIRBuilder.buildCopy(Dst, SPTmp);
 4211       Src = MIRBuilder.buildBitcast(SrcIntTy, Src).getReg(0);
 4215       MIRBuilder.buildTrunc(Dst, Src);
 4217       auto ShiftAmt = MIRBuilder.buildConstant(SrcIntTy, Offset);
 4218       auto Shr = MIRBuilder.buildLShr(SrcIntTy, Src, ShiftAmt);
 4219       MIRBuilder.buildTrunc(Dst, Shr);
 4244       Src = MIRBuilder.buildBitcast(IntDstTy, Src).getReg(0);
 4247     Register ExtInsSrc = MIRBuilder.buildZExt(IntDstTy, InsertSrc).getReg(0);
 4249       auto ShiftAmt = MIRBuilder.buildConstant(IntDstTy, Offset);
 4250       ExtInsSrc = MIRBuilder.buildShl(IntDstTy, ExtInsSrc, ShiftAmt).getReg(0);
 4256     auto Mask = MIRBuilder.buildConstant(IntDstTy, MaskVal);
 4257     auto MaskedSrc = MIRBuilder.buildAnd(IntDstTy, Src, Mask);
 4258     auto Or = MIRBuilder.buildOr(IntDstTy, MaskedSrc, ExtInsSrc);
 4260     MIRBuilder.buildBitcast(Dst, Or);
 4280     MIRBuilder.buildAdd(Dst0, LHS, RHS);
 4282     MIRBuilder.buildSub(Dst0, LHS, RHS);
 4286   auto Zero = MIRBuilder.buildConstant(Ty, 0);
 4295       MIRBuilder.buildICmp(CmpInst::ICMP_SLT, BoolTy, Dst0, LHS);
 4296   auto ConditionRHS = MIRBuilder.buildICmp(
 4299   MIRBuilder.buildXor(Dst1, ConditionRHS, ResultLowerThanLHS);