13#ifndef LLVM_CODEGEN_GLOBALISEL_MACHINEIRBUILDER_H
14#define LLVM_CODEGEN_GLOBALISEL_MACHINEIRBUILDER_H
205 return SrcMIB->getOperand(0).getReg();
256 State.Observer->createdInstr(*InsertedInstr);
285 assert(State.TII &&
"TargetInstrInfo is not set");
291 assert(State.MF &&
"MachineFunction is not set");
296 assert(State.MF &&
"MachineFunction is not set");
301 return getMF().getFunction().getDataLayout();
305 return getMF().getFunction().getContext();
323 assert(State.MBB &&
"MachineBasicBlock is not set");
343 "Basic block is in a different function");
361 State.II =
MBB.end();
363 "Basic block is in a different function");
369 assert(
MI.getParent() &&
"Instruction is not part of a basic block");
371 State.II =
MI.getIterator();
386 State.Observer = &Observer;
525 std::optional<unsigned> Flags = std::nullopt);
558 std::optional<MachineInstrBuilder>
561 std::optional<unsigned> Flags = std::nullopt);
578 std::optional<MachineInstrBuilder>
585 return buildInstr(TargetOpcode::G_PTRMASK, {Res}, {Op0, Op1});
646 return buildInstr(TargetOpcode::G_UADDO, {Res, CarryOut}, {Op0, Op1});
652 return buildInstr(TargetOpcode::G_USUBO, {Res, CarryOut}, {Op0, Op1});
658 return buildInstr(TargetOpcode::G_SADDO, {Res, CarryOut}, {Op0, Op1});
664 return buildInstr(TargetOpcode::G_SSUBO, {Res, CarryOut}, {Op0, Op1});
683 const SrcOp &CarryIn) {
684 return buildInstr(TargetOpcode::G_UADDE, {Res, CarryOut},
685 {Op0, Op1, CarryIn});
691 const SrcOp &CarryIn) {
692 return buildInstr(TargetOpcode::G_USUBE, {Res, CarryOut},
693 {Op0, Op1, CarryIn});
699 const SrcOp &CarryIn) {
700 return buildInstr(TargetOpcode::G_SADDE, {Res, CarryOut},
701 {Op0, Op1, CarryIn});
707 const SrcOp &CarryIn) {
708 return buildInstr(TargetOpcode::G_SSUBE, {Res, CarryOut},
709 {Op0, Op1, CarryIn});
749 std::optional<unsigned> Flags = std::nullopt) {
750 return buildInstr(TargetOpcode::G_FPEXT, {Res}, {
Op}, Flags);
755 return buildInstr(TargetOpcode::G_PTRTOINT, {Dst}, {Src});
760 return buildInstr(TargetOpcode::G_INTTOPTR, {Dst}, {Src});
765 return buildInstr(TargetOpcode::G_BITCAST, {Dst}, {Src});
770 return buildInstr(TargetOpcode::G_ADDRSPACE_CAST, {Dst}, {Src});
775 unsigned getBoolExtOp(
bool IsVec,
bool IsFP)
const;
802 std::optional<unsigned> Flags = std::nullopt);
863 return buildInstr(TargetOpcode::G_TRUNC_SSAT_S, {Res}, {
Op});
877 return buildInstr(TargetOpcode::G_TRUNC_SSAT_U, {Res}, {
Op});
891 return buildInstr(TargetOpcode::G_TRUNC_USAT_U, {Res}, {
Op});
1004 const SrcOp &
Op,
unsigned Val) {
1071 const SrcOp &BasePtr,
1154 std::initializer_list<SrcOp>
Ops);
1262 const SrcOp &Src1,
unsigned Index);
1274 const SrcOp &
Op,
unsigned Index);
1334 bool HasSideEffects,
bool isConvergent);
1337 bool HasSideEffects,
bool isConvergent);
1352 std::optional<unsigned> Flags = std::nullopt);
1366 std::optional<unsigned> Flags = std::nullopt);
1382 std::optional<unsigned> Flags = std::nullopt);
1398 std::optional<unsigned> Flags = std::nullopt);
1431 return buildInstr(TargetOpcode::G_IS_FPCLASS, {Res},
1432 {Src,
SrcOp(
static_cast<int64_t
>(Mask))});
1447 std::optional<unsigned> Flags = std::nullopt);
1508 buildAtomicCmpXchgWithSuccess(
const DstOp &OldValRes,
const DstOp &SuccessRes,
1528 const SrcOp &NewVal,
1838 unsigned Locality,
unsigned CacheType,
1843 return buildInstr(TargetOpcode::G_FREEZE, {Dst}, {Src});
1869 std::optional<unsigned> Flags = std::nullopt) {
1870 return buildInstr(TargetOpcode::G_ADD, {Dst}, {Src0, Src1}, Flags);
1886 std::optional<unsigned> Flags = std::nullopt) {
1887 return buildInstr(TargetOpcode::G_SUB, {Dst}, {Src0, Src1}, Flags);
1902 std::optional<unsigned> Flags = std::nullopt) {
1903 return buildInstr(TargetOpcode::G_MUL, {Dst}, {Src0, Src1}, Flags);
1916 const SrcOp &Src1) {
1917 return buildInstr(TargetOpcode::G_ABDS, {Dst}, {Src0, Src1});
1930 const SrcOp &Src1) {
1931 return buildInstr(TargetOpcode::G_ABDU, {Dst}, {Src0, Src1});
1936 std::optional<unsigned> Flags = std::nullopt) {
1937 return buildInstr(TargetOpcode::G_UMULH, {Dst}, {Src0, Src1}, Flags);
1942 std::optional<unsigned> Flags = std::nullopt) {
1943 return buildInstr(TargetOpcode::G_SMULH, {Dst}, {Src0, Src1}, Flags);
1949 std::optional<unsigned> Flags = std::nullopt) {
1950 return buildInstr(TargetOpcode::G_UREM, {Dst}, {Src0, Src1}, Flags);
1955 std::optional<unsigned> Flags = std::nullopt) {
1956 return buildInstr(TargetOpcode::G_FMUL, {Dst}, {Src0, Src1}, Flags);
1961 std::optional<unsigned> Flags = std::nullopt) {
1962 return buildInstr(TargetOpcode::G_FMINNUM, {Dst}, {Src0, Src1}, Flags);
1967 std::optional<unsigned> Flags = std::nullopt) {
1968 return buildInstr(TargetOpcode::G_FMAXNUM, {Dst}, {Src0, Src1}, Flags);
1973 std::optional<unsigned> Flags = std::nullopt) {
1974 return buildInstr(TargetOpcode::G_FMINNUM_IEEE, {Dst}, {Src0, Src1}, Flags);
1979 std::optional<unsigned> Flags = std::nullopt) {
1980 return buildInstr(TargetOpcode::G_FMAXNUM_IEEE, {Dst}, {Src0, Src1}, Flags);
1985 std::optional<unsigned> Flags = std::nullopt) {
1986 return buildInstr(TargetOpcode::G_SHL, {Dst}, {Src0, Src1}, Flags);
1991 std::optional<unsigned> Flags = std::nullopt) {
1992 return buildInstr(TargetOpcode::G_LSHR, {Dst}, {Src0, Src1}, Flags);
1997 std::optional<unsigned> Flags = std::nullopt) {
1998 return buildInstr(TargetOpcode::G_ASHR, {Dst}, {Src0, Src1}, Flags);
2013 const SrcOp &Src1) {
2014 return buildInstr(TargetOpcode::G_AND, {Dst}, {Src0, Src1});
2029 std::optional<unsigned> Flags = std::nullopt) {
2030 return buildInstr(TargetOpcode::G_OR, {Dst}, {Src0, Src1}, Flags);
2035 const SrcOp &Src1) {
2036 return buildInstr(TargetOpcode::G_XOR, {Dst}, {Src0, Src1});
2044 return buildInstr(TargetOpcode::G_XOR, {Dst}, {Src0, NegOne});
2052 return buildInstr(TargetOpcode::G_SUB, {Dst}, {Zero, Src0});
2057 return buildInstr(TargetOpcode::G_CTPOP, {Dst}, {Src0});
2062 return buildInstr(TargetOpcode::G_CTLZ, {Dst}, {Src0});
2067 const SrcOp &Src0) {
2068 return buildInstr(TargetOpcode::G_CTLZ_ZERO_POISON, {Dst}, {Src0});
2073 return buildInstr(TargetOpcode::G_CTTZ, {Dst}, {Src0});
2078 const SrcOp &Src0) {
2079 return buildInstr(TargetOpcode::G_CTTZ_ZERO_POISON, {Dst}, {Src0});
2084 return buildInstr(TargetOpcode::G_CTLS, {Dst}, {Src0});
2089 return buildInstr(TargetOpcode::G_BSWAP, {Dst}, {Src0});
2095 std::optional<unsigned> Flags = std::nullopt) {
2096 return buildInstr(TargetOpcode::G_FADD, {Dst}, {Src0, Src1}, Flags);
2102 std::optional<unsigned> Flags = std::nullopt) {
2103 return buildInstr(TargetOpcode::G_STRICT_FADD, {Dst}, {Src0, Src1}, Flags);
2109 std::optional<unsigned> Flags = std::nullopt) {
2110 return buildInstr(TargetOpcode::G_FSUB, {Dst}, {Src0, Src1}, Flags);
2116 std::optional<unsigned> Flags = std::nullopt) {
2117 return buildInstr(TargetOpcode::G_FDIV, {Dst}, {Src0, Src1}, Flags);
2123 std::optional<unsigned> Flags = std::nullopt) {
2124 return buildInstr(TargetOpcode::G_FMA, {Dst}, {Src0, Src1, Src2}, Flags);
2130 std::optional<unsigned> Flags = std::nullopt) {
2131 return buildInstr(TargetOpcode::G_FMAD, {Dst}, {Src0, Src1, Src2}, Flags);
2136 std::optional<unsigned> Flags = std::nullopt) {
2137 return buildInstr(TargetOpcode::G_FNEG, {Dst}, {Src0}, Flags);
2142 std::optional<unsigned> Flags = std::nullopt) {
2143 return buildInstr(TargetOpcode::G_FABS, {Dst}, {Src0}, Flags);
2149 std::optional<unsigned> Flags = std::nullopt) {
2150 return buildInstr(TargetOpcode::G_FCANONICALIZE, {Dst}, {Src0}, Flags);
2156 std::optional<unsigned> Flags = std::nullopt) {
2157 return buildInstr(TargetOpcode::G_INTRINSIC_TRUNC, {Dst}, {Src0}, Flags);
2163 std::optional<unsigned> Flags = std::nullopt) {
2164 return buildInstr(TargetOpcode::G_FFLOOR, {Dst}, {Src0}, Flags);
2169 std::optional<unsigned> Flags = std::nullopt) {
2170 return buildInstr(TargetOpcode::G_FLOG, {Dst}, {Src}, Flags);
2175 std::optional<unsigned> Flags = std::nullopt) {
2176 return buildInstr(TargetOpcode::G_FLOG2, {Dst}, {Src}, Flags);
2181 std::optional<unsigned> Flags = std::nullopt) {
2182 return buildInstr(TargetOpcode::G_FEXP2, {Dst}, {Src}, Flags);
2188 std::optional<unsigned> Flags = std::nullopt) {
2189 return buildInstr(TargetOpcode::G_FPOW, {Dst}, {Src0, Src1}, Flags);
2195 std::optional<unsigned> Flags = std::nullopt) {
2196 return buildInstr(TargetOpcode::G_FLDEXP, {Dst}, {Src0, Src1}, Flags);
2202 std::optional<unsigned> Flags = std::nullopt) {
2203 return buildInstr(TargetOpcode::G_FFREXP, {Fract, Exp}, {Src}, Flags);
2209 std::optional<unsigned> Flags = std::nullopt) {
2210 return buildInstr(TargetOpcode::G_FSINCOS, {Sin, Cos}, {Src}, Flags);
2216 std::optional<unsigned> Flags = std::nullopt) {
2217 return buildInstr(TargetOpcode::G_FMODF, {Fract,
Int}, {Src}, Flags);
2223 std::optional<unsigned> Flags = std::nullopt) {
2224 return buildInstr(TargetOpcode::G_FCOPYSIGN, {Dst}, {Src0, Src1}, Flags);
2229 return buildInstr(TargetOpcode::G_UITOFP, {Dst}, {Src0});
2234 return buildInstr(TargetOpcode::G_SITOFP, {Dst}, {Src0});
2239 return buildInstr(TargetOpcode::G_FPTOUI, {Dst}, {Src0});
2244 return buildInstr(TargetOpcode::G_FPTOSI, {Dst}, {Src0});
2249 return buildInstr(TargetOpcode::G_FPTOUI_SAT, {Dst}, {Src0});
2254 return buildInstr(TargetOpcode::G_FPTOSI_SAT, {Dst}, {Src0});
2259 std::optional<unsigned> Flags = std::nullopt) {
2260 return buildInstr(TargetOpcode::G_FRINT, {Dst}, {Src0}, Flags);
2266 std::optional<unsigned> Flags = std::nullopt) {
2267 return buildInstr(TargetOpcode::G_INTRINSIC_ROUNDEVEN, {Dst}, {Src0},
2273 const SrcOp &Src1) {
2274 return buildInstr(TargetOpcode::G_SMIN, {Dst}, {Src0, Src1});
2279 const SrcOp &Src1) {
2280 return buildInstr(TargetOpcode::G_SMAX, {Dst}, {Src0, Src1});
2285 const SrcOp &Src1) {
2286 return buildInstr(TargetOpcode::G_UMIN, {Dst}, {Src0, Src1});
2291 const SrcOp &Src1) {
2292 return buildInstr(TargetOpcode::G_UMAX, {Dst}, {Src0, Src1});
2297 return buildInstr(TargetOpcode::G_ABS, {Dst}, {Src});
2313 const SrcOp &ScalarIn,
2314 const SrcOp &VecIn) {
2315 return buildInstr(TargetOpcode::G_VECREDUCE_SEQ_FADD, {Dst},
2316 {ScalarIn, {VecIn}});
2324 const SrcOp &ScalarIn,
2325 const SrcOp &VecIn) {
2326 return buildInstr(TargetOpcode::G_VECREDUCE_SEQ_FMUL, {Dst},
2327 {ScalarIn, {VecIn}});
2335 const SrcOp &ScalarIn,
2336 const SrcOp &VecIn) {
2337 return buildInstr(TargetOpcode::G_VECREDUCE_FADD, {Dst}, {ScalarIn, VecIn});
2345 const SrcOp &ScalarIn,
2346 const SrcOp &VecIn) {
2347 return buildInstr(TargetOpcode::G_VECREDUCE_FMUL, {Dst}, {ScalarIn, VecIn});
2352 return buildInstr(TargetOpcode::G_VECREDUCE_FMAX, {Dst}, {Src});
2357 return buildInstr(TargetOpcode::G_VECREDUCE_FMIN, {Dst}, {Src});
2363 return buildInstr(TargetOpcode::G_VECREDUCE_FMAXIMUM, {Dst}, {Src});
2369 return buildInstr(TargetOpcode::G_VECREDUCE_FMINIMUM, {Dst}, {Src});
2374 return buildInstr(TargetOpcode::G_VECREDUCE_ADD, {Dst}, {Src});
2379 return buildInstr(TargetOpcode::G_VECREDUCE_MUL, {Dst}, {Src});
2384 return buildInstr(TargetOpcode::G_VECREDUCE_AND, {Dst}, {Src});
2389 return buildInstr(TargetOpcode::G_VECREDUCE_OR, {Dst}, {Src});
2394 return buildInstr(TargetOpcode::G_VECREDUCE_XOR, {Dst}, {Src});
2399 return buildInstr(TargetOpcode::G_VECREDUCE_SMAX, {Dst}, {Src});
2404 return buildInstr(TargetOpcode::G_VECREDUCE_SMIN, {Dst}, {Src});
2409 return buildInstr(TargetOpcode::G_VECREDUCE_UMAX, {Dst}, {Src});
2414 return buildInstr(TargetOpcode::G_VECREDUCE_UMIN, {Dst}, {Src});
2419 const SrcOp &SrcPtr,
2424 Opcode, {}, {DstPtr, SrcPtr,
Size,
SrcOp(INT64_C(0) )});
2425 MIB.addMemOperand(&DstMMO);
2426 MIB.addMemOperand(&SrcMMO);
2439 return buildInstr(
Debug ? TargetOpcode::G_DEBUGTRAP : TargetOpcode::G_TRAP);
2445 return buildInstr(TargetOpcode::G_SBFX, {Dst}, {Src, LSB, Width});
2451 return buildInstr(TargetOpcode::G_UBFX, {Dst}, {Src, LSB, Width});
2457 return buildInstr(TargetOpcode::G_ROTR, {Dst}, {Src, Amt});
2463 return buildInstr(TargetOpcode::G_ROTL, {Dst}, {Src, Amt});
2468 return buildInstr(TargetOpcode::G_BITREVERSE, {Dst}, {Src});
2473 return buildInstr(TargetOpcode::G_GET_FPENV, {Dst}, {});
2478 return buildInstr(TargetOpcode::G_SET_FPENV, {}, {Src});
2483 return buildInstr(TargetOpcode::G_RESET_FPENV, {}, {});
2488 return buildInstr(TargetOpcode::G_GET_FPMODE, {Dst}, {});
2493 return buildInstr(TargetOpcode::G_SET_FPMODE, {}, {Src});
2498 return buildInstr(TargetOpcode::G_RESET_FPMODE, {}, {});
2503 return buildInstr(TargetOpcode::G_GET_ROUNDING, {Dst}, {});
2508 return buildInstr(TargetOpcode::G_SET_ROUNDING, {}, {Src});
2513 std::optional<unsigned> Flags = std::nullopt);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static const Function * getParent(const Value *V)
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
This contains common code to allow clients to notify changes to machine instr.
Module.h This file contains the declarations for the Module class.
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
uint64_t IntrinsicInst * II
This file describes how to lower LLVM code to machine code.
Class for arbitrary precision integers.
Represent a constant reference to an array (0 or more elements consecutively in memory),...
The address of a basic block.
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
ConstantFP - Floating Point Values [float, double].
This is the shared class of boolean and integer constants.
A signed pointer, in the ptrauth sense.
This is an important base class in LLVM.
A parsed version of the target data layout string in and methods for querying it.
void addDefToMIB(MachineRegisterInfo &MRI, MachineInstrBuilder &MIB) const
LLT getLLTTy(const MachineRegisterInfo &MRI) const
MachineRegisterInfo::VRegAttrs Attrs
DstOp(MachineRegisterInfo::VRegAttrs Attrs)
DstOp(const MachineOperand &Op)
MachineRegisterInfo::VRegAttrs getVRegAttrs() const
DstType getDstOpKind() const
const TargetRegisterClass * RC
const TargetRegisterClass * getRegClass() const
DstOp(const TargetRegisterClass *TRC)
DstOp(RegClassOrRegBank RCOrRB, LLT Ty)
Abstract class that contains various methods for clients to notify about changes.
This is an important class for using LLVM in a threaded context.
MCRegisterClass - Base class of TargetRegisterClass.
MachineInstrBundleIterator< MachineInstr > iterator
MachineInstrBuilder buildFPTOUI_SAT(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_FPTOUI_SAT Src0.
MachineInstrBuilder buildFSub(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FSUB Op0, Op1.
MachineInstrBuilder buildFPTOSI(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_FPTOSI Src0.
GISelChangeObserver * getObserver()
MachineInstrBuilder buildFMul(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder insertInstr(MachineInstrBuilder MIB)
Insert an existing instruction at the insertion point.
MachineInstrBuilder buildFLdexp(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FLDEXP Src0, Src1.
MachineInstrBuilder buildFreeze(const DstOp &Dst, const SrcOp &Src)
Build and insert Dst = G_FREEZE Src.
MachineInstrBuilder buildTruncUSatU(const DstOp &Res, const SrcOp &Op)
Build and insert Res = G_TRUNC_USAT_U Op.
MachineInstrBuilder buildModf(const DstOp &Fract, const DstOp &Int, const SrcOp &Src, std::optional< unsigned > Flags=std::nullopt)
Build and insert Fract, Int = G_FMODF Src.
void setInsertPt(MachineBasicBlock &MBB, MachineBasicBlock::iterator II)
Set the insertion point before the specified position.
const MachineFunction & getMF() const
LLVMContext & getContext() const
MachineInstrBuilder buildAdd(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_ADD Op0, Op1.
MachineInstrBuilder buildResetFPMode()
Build and insert G_RESET_FPMODE.
MachineInstrBuilder buildFPExt(const DstOp &Res, const SrcOp &Op, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FPEXT Op.
MachineInstrBuilder buildNot(const DstOp &Dst, const SrcOp &Src0)
Build and insert a bitwise not, NegOne = G_CONSTANT -1 Res = G_OR Op0, NegOne.
Value * getDeactivationSymbol()
MachineInstrBuilder buildFPTOSI_SAT(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_FPTOSI_SAT Src0.
MachineInstrBuilder buildVecReduceSeqFAdd(const DstOp &Dst, const SrcOp &ScalarIn, const SrcOp &VecIn)
Build and insert Res = G_VECREDUCE_SEQ_FADD ScalarIn, VecIn.
MachineInstrBuilder buildAtomicRMWUSubSat(const DstOp &OldValRes, const SrcOp &Addr, const SrcOp &Val, MachineMemOperand &MMO)
Build and insert OldValRes<def> = G_ATOMICRMW_USUB_SAT Addr, Val, MMO.
MachineInstrBuilder buildRotateRight(const DstOp &Dst, const SrcOp &Src, const SrcOp &Amt)
Build and insert Dst = G_ROTR Src, Amt.
MachineInstrBuilder buildCTTZ(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_CTTZ Op0, Src0.
virtual ~MachineIRBuilder()=default
MachineInstrBuilder buildVecReduceOr(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_OR Src.
MachineInstrBuilder buildFLog2(const DstOp &Dst, const SrcOp &Src, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FLOG2 Src.
MachineInstrBuilder buildAShr(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildGetRounding(const DstOp &Dst)
Build and insert Dst = G_GET_ROUNDING.
MachineInstrBuilder buildFAbs(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FABS Op0.
MachineInstrBuilder buildFence(unsigned Ordering, unsigned Scope)
Build and insert G_FENCE Ordering, Scope.
MachineInstrBuilder buildFMinNumIEEE(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildFMA(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, const SrcOp &Src2, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FMA Op0, Op1, Op2.
MachineInstrBuilder buildGetFPMode(const DstOp &Dst)
Build and insert Dst = G_GET_FPMODE.
MachineInstrBuilder buildSMulH(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
GISelCSEInfo * getCSEInfo()
MachineInstrBuilder buildVecReduceFMax(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_FMAX Src.
MachineInstrBuilder buildMul(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_MUL Op0, Op1.
MachineInstrBuilder buildAnd(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_AND Op0, Op1.
const TargetInstrInfo & getTII()
MachineInstrBuilder buildSAdde(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1, const SrcOp &CarryIn)
Build and insert Res, CarryOut = G_SADDE Op0, Op1, CarryInp.
MachineInstrBuilder buildTruncSSatU(const DstOp &Res, const SrcOp &Op)
Build and insert Res = G_TRUNC_SSAT_U Op.
MachineInstrBuilder buildURem(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_UREM Op0, Op1.
MachineInstrBuilder buildSAddo(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1)
Build and insert Res, CarryOut = G_SADDO Op0, Op1.
MachineInstrBuilder buildFPTOUI(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_FPTOUI Src0.
MachineInstrBuilder buildLShr(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildFPow(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FPOW Src0, Src1.
MachineInstrBuilder buildIntrinsicTrunc(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_INTRINSIC_TRUNC Src0.
MachineBasicBlock::iterator getInsertPt()
Current insertion point for new instructions.
MachineInstrBuilder buildVecReduceSeqFMul(const DstOp &Dst, const SrcOp &ScalarIn, const SrcOp &VecIn)
Build and insert Res = G_VECREDUCE_SEQ_FMUL ScalarIn, VecIn.
MachineInstrBuilder buildAtomicRMWUSubCond(const DstOp &OldValRes, const SrcOp &Addr, const SrcOp &Val, MachineMemOperand &MMO)
Build and insert OldValRes<def> = G_ATOMICRMW_USUB_COND Addr, Val, MMO.
MachineInstrBuilder buildSub(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_SUB Op0, Op1.
void setInstr(MachineInstr &MI)
Set the insertion point to before MI.
MDNode * getPCSections()
Get the current instruction's PC sections metadata.
MachineInstrBuilder buildBSwap(const DstOp &Dst, const SrcOp &Src0)
Build and insert Dst = G_BSWAP Src0.
MachineInstrBuilder buildVecReduceFMul(const DstOp &Dst, const SrcOp &ScalarIn, const SrcOp &VecIn)
Build and insert Res = G_VECREDUCE_FMUL Src.
MachineInstrBuilder buildCTLZ_ZERO_POISON(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_CTLZ_ZERO_POISON Op0, Src0.
MachineInstrBuilder buildAddrSpaceCast(const DstOp &Dst, const SrcOp &Src)
Build and insert Dst = G_ADDRSPACE_CAST Src.
MachineInstrBuilder buildFExp2(const DstOp &Dst, const SrcOp &Src, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FEXP2 Src.
MachineInstrBuilder buildSetFPMode(const SrcOp &Src)
Build and insert G_SET_FPMODE Src.
MachineInstrBuilder buildIntToPtr(const DstOp &Dst, const SrcOp &Src)
Build and insert a G_INTTOPTR instruction.
MachineInstrBuilder buildUSubo(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1)
Build and insert Res, CarryOut = G_USUBO Op0, Op1.
MachineInstrBuilder buildVecReduceFAdd(const DstOp &Dst, const SrcOp &ScalarIn, const SrcOp &VecIn)
Build and insert Res = G_VECREDUCE_FADD Src.
MachineIRBuilder(MachineBasicBlock &MBB, MachineBasicBlock::iterator InsPt)
MachineInstrBuilder buildAbdu(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_ABDU Op0, Op1.
MachineInstrBuilder buildVecReduceFMinimum(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_FMINIMUM Src.
MachineInstrBuilder buildNeg(const DstOp &Dst, const SrcOp &Src0)
Build and insert integer negation Zero = G_CONSTANT 0 Res = G_SUB Zero, Op0.
MachineInstrBuilder buildVecReduceSMin(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_SMIN Src.
MachineInstrBuilder buildCTLZ(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_CTLZ Op0, Src0.
MachineInstrBuilder buildSMax(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_SMAX Op0, Op1.
MachineInstrBuilder buildAssertZExt(const DstOp &Res, const SrcOp &Op, unsigned Size)
Build and insert Res = G_ASSERT_ZEXT Op, Size.
void recordInsertion(MachineInstr *InsertedInstr) const
MachineInstrBuilder buildUMulH(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildStrictFAdd(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_STRICT_FADD Op0, Op1.
MachineInstrBuilder buildVecReduceXor(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_XOR Src.
MachineInstrBuilder buildVecReduceFMin(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_FMIN Src.
MachineInstrBuilder buildFDiv(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FDIV Op0, Op1.
const GISelCSEInfo * getCSEInfo() const
MachineInstrBuilder buildSetRounding(const SrcOp &Src)
Build and insert G_SET_ROUNDING.
MachineInstrBuilder buildExtractVectorElement(const DstOp &Res, const SrcOp &Val, const SrcOp &Idx)
Build and insert Res = G_EXTRACT_VECTOR_ELT Val, Idx.
MachineInstrBuilder buildLoad(const DstOp &Res, const SrcOp &Addr, MachineMemOperand &MMO)
Build and insert Res = G_LOAD Addr, MMO.
MachineBasicBlock & getMBB()
MachineIRBuilder(MachineInstr &MI)
MachineInstrBuilder buildExtractVectorElementConstant(const DstOp &Res, const SrcOp &Val, const int Idx)
Build and insert Res = G_EXTRACT_VECTOR_ELT Val, Idx.
void stopObservingChanges()
MachineInstrBuilder buildBitReverse(const DstOp &Dst, const SrcOp &Src)
Build and insert Dst = G_BITREVERSE Src.
MachineInstrBuilder buildShl(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildUITOFP(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_UITOFP Src0.
MachineInstrBuilder buildInstr(unsigned Opcode)
Build and insert <empty> = Opcode <empty>.
MachineInstrBuilder buildSITOFP(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_SITOFP Src0.
MachineIRBuilder(MachineInstr &MI, GISelChangeObserver &Observer)
MachineInstrBuilder buildFMAD(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, const SrcOp &Src2, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FMAD Op0, Op1, Op2.
MachineInstrBuilder buildAbds(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_ABDS Op0, Op1.
MachineInstrBuilder buildFLog(const DstOp &Dst, const SrcOp &Src, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FLOG Src.
void validateSelectOp(const LLT ResTy, const LLT TstTy, const LLT Op0Ty, const LLT Op1Ty)
MachineInstrBuilder buildVecReduceUMax(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_UMAX Src.
const DebugLoc & getDL()
Getter for DebugLoc.
MachineInstrBuilder buildUbfx(const DstOp &Dst, const SrcOp &Src, const SrcOp &LSB, const SrcOp &Width)
Build and insert Dst = G_UBFX Src, LSB, Width.
const MachineRegisterInfo * getMRI() const
MachineInstrBuilder buildCTLS(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_CTLS Op0, Src0.
MachineInstrBuilder buildCTPOP(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_CTPOP Op0, Src0.
MachineInstrBuilder buildAbs(const DstOp &Dst, const SrcOp &Src)
Build and insert Dst = G_ABS Src.
void validateBinaryOp(const LLT Res, const LLT Op0, const LLT Op1)
MachineInstrBuilder buildVecReduceAnd(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_AND Src.
MachineInstrBuilder buildVecReduceFMaximum(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_FMAXIMUM Src.
void validateShiftOp(const LLT Res, const LLT Op0, const LLT Op1)
MachineFunction & getMF()
Getter for the function we currently build.
MachineInstrBuilder buildFCopysign(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FCOPYSIGN Op0, Op1.
MachineIRBuilder(MachineFunction &MF)
MachineIRBuilder(const MachineIRBuilderState &BState)
MachineInstrBuilder buildTruncSSatS(const DstOp &Res, const SrcOp &Op)
Build and insert Res = G_TRUNC_SSAT_S Op.
MachineInstrBuilder buildMemCpy(const SrcOp &DstPtr, const SrcOp &SrcPtr, const SrcOp &Size, MachineMemOperand &DstMMO, MachineMemOperand &SrcMMO)
MachineInstrBuilder buildAssertAlign(const DstOp &Res, const SrcOp &Op, Align AlignVal)
Build and insert Res = G_ASSERT_ALIGN Op, AlignVal.
MachineInstrBuilder buildFRint(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FRINT Src0.
MachineInstrBuilder buildSbfx(const DstOp &Dst, const SrcOp &Src, const SrcOp &LSB, const SrcOp &Width)
Build and insert Dst = G_SBFX Src, LSB, Width.
MachineInstrBuilder buildFMaxNum(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildSMin(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_SMIN Op0, Op1.
MachineInstrBuilder buildFMinNum(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildVecReduceUMin(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_UMIN Src.
void setInstrAndDebugLoc(MachineInstr &MI)
Set the insertion point to before MI, and set the debug loc to MI's loc.
void setMMRAMetadata(MDNode *MMRA)
Set the PC sections metadata to MD for all the next build instructions.
MachineInstrBuilder buildSSube(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1, const SrcOp &CarryIn)
Build and insert Res, CarryOut = G_SSUBE Op0, Op1, CarryInp.
void setDeactivationSymbol(Value *DS)
MachineInstrBuilder buildIntrinsicRoundeven(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_INTRINSIC_ROUNDEVEN Src0, Src1.
MachineInstrBuilder buildResetFPEnv()
Build and insert G_RESET_FPENV.
void setPCSections(MDNode *MD)
Set the PC sections metadata to MD for all the next build instructions.
MachineInstrBuilder buildVecReduceAdd(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_ADD Src.
MachineInstrBuilder buildIsFPClass(const DstOp &Res, const SrcOp &Src, unsigned Mask)
Build and insert a Res = G_IS_FPCLASS Src, Mask.
MachineInstrBuilder buildUAdde(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1, const SrcOp &CarryIn)
Build and insert Res, CarryOut = G_UADDE Op0, Op1, CarryIn.
void setDebugLoc(const DebugLoc &DL)
Set the debug location to DL for all the next build instructions.
MachineInstrBuilder buildGetFPEnv(const DstOp &Dst)
Build and insert Dst = G_GET_FPENV.
MachineInstrBuilder buildSSubo(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1)
Build and insert Res, CarryOut = G_SUBO Op0, Op1.
bool isObservingChanges() const
MachineInstrBuilder buildUSube(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1, const SrcOp &CarryIn)
Build and insert Res, CarryOut = G_USUBE Op0, Op1, CarryInp.
const MachineBasicBlock & getMBB() const
Getter for the basic block we currently build.
MachineInstrBuilder buildFNeg(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FNEG Op0.
void setMBB(MachineBasicBlock &MBB)
Set the insertion point to the end of MBB.
MachineInstrBuilder buildBitcast(const DstOp &Dst, const SrcOp &Src)
Build and insert Dst = G_BITCAST Src.
const DebugLoc & getDebugLoc()
Get the current instruction's debug location.
MachineInstrBuilder buildUAddo(const DstOp &Res, const DstOp &CarryOut, const SrcOp &Op0, const SrcOp &Op1)
Build and insert Res, CarryOut = G_UADDO Op0, Op1.
void setCSEInfo(GISelCSEInfo *Info)
MachineInstrBuilder buildFMaxNumIEEE(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
MachineInstrBuilder buildTrap(bool Debug=false)
Build and insert G_TRAP or G_DEBUGTRAP.
MachineInstrBuilder buildFFloor(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = GFFLOOR Op0, Op1.
MachineInstrBuilder buildFFrexp(const DstOp &Fract, const DstOp &Exp, const SrcOp &Src, std::optional< unsigned > Flags=std::nullopt)
Build and insert Fract, Exp = G_FFREXP Src.
MachineIRBuilder()=default
Some constructors for easy use.
MachineRegisterInfo * getMRI()
Getter for MRI.
MachineInstrBuilder buildOr(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_OR Op0, Op1.
MachineInstrBuilder buildFSincos(const DstOp &Sin, const DstOp &Cos, const SrcOp &Src, std::optional< unsigned > Flags=std::nullopt)
Build and insert Sin, Cos = G_FSINCOS Src.
MachineIRBuilderState & getState()
Getter for the State.
MachineInstrBuilder buildAssertInstr(unsigned Opc, const DstOp &Res, const SrcOp &Op, unsigned Val)
Build and insert G_ASSERT_SEXT, G_ASSERT_ZEXT, or G_ASSERT_ALIGN.
void validateTruncExt(const LLT Dst, const LLT Src, bool IsExtend)
MachineInstrBuilder buildInstrNoInsert(unsigned Opcode)
Build but don't insert <empty> = Opcode <empty>.
MachineInstrBuilder buildPtrMask(const DstOp &Res, const SrcOp &Op0, const SrcOp &Op1)
Build and insert Res = G_PTRMASK Op0, Op1.
MachineInstrBuilder buildVecReduceSMax(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_SMAX Src.
MachineInstrBuilder buildMemTransferInst(unsigned Opcode, const SrcOp &DstPtr, const SrcOp &SrcPtr, const SrcOp &Size, MachineMemOperand &DstMMO, MachineMemOperand &SrcMMO)
Build and insert G_MEMCPY or G_MEMMOVE.
void validateUnaryOp(const LLT Res, const LLT Op0)
MDNode * getMMRAMetadata()
Get the current instruction's MMRA metadata.
MachineInstrBuilder buildPrefetch(const SrcOp &Addr, unsigned RW, unsigned Locality, unsigned CacheType, MachineMemOperand &MMO)
Build and insert G_PREFETCH Addr, RW, Locality, CacheType.
const DataLayout & getDataLayout() const
MachineInstrBuilder buildLoadInstr(unsigned Opcode, const DstOp &Res, const SrcOp &Addr, MachineMemOperand &MMO)
Build and insert Res = <opcode> Addr, MMO.
MachineInstrBuilder buildCTTZ_ZERO_POISON(const DstOp &Dst, const SrcOp &Src0)
Build and insert Res = G_CTTZ_ZERO_POISON Op0, Src0.
void setMF(MachineFunction &MF)
MachineInstrBuilder buildAssertSExt(const DstOp &Res, const SrcOp &Op, unsigned Size)
Build and insert Res = G_ASSERT_SEXT Op, Size.
MachineInstrBuilder buildXor(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_XOR Op0, Op1.
void setState(const MachineIRBuilderState &NewState)
Setter for the State.
void setChangeObserver(GISelChangeObserver &Observer)
virtual MachineInstrBuilder buildConstant(const DstOp &Res, const ConstantInt &Val)
Build and insert Res = G_CONSTANT Val.
MachineInstrBuilder buildVecReduceMul(const DstOp &Dst, const SrcOp &Src)
Build and insert Res = G_VECREDUCE_MUL Src.
MachineInstrBuilder buildUMin(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_UMIN Op0, Op1.
MachineInstrBuilder buildUMax(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1)
Build and insert Res = G_UMAX Op0, Op1.
MachineInstrBuilder buildFAdd(const DstOp &Dst, const SrcOp &Src0, const SrcOp &Src1, std::optional< unsigned > Flags=std::nullopt)
Build and insert Res = G_FADD Op0, Op1.
MachineInstrBuilder buildSetFPEnv(const SrcOp &Src)
Build and insert G_SET_FPENV Src.
MachineInstrBuilder buildPtrToInt(const DstOp &Dst, const SrcOp &Src)
Build and insert a G_PTRTOINT instruction.
MachineInstrBuilder buildFCanonicalize(const DstOp &Dst, const SrcOp &Src0, std::optional< unsigned > Flags=std::nullopt)
Build and insert Dst = G_FCANONICALIZE Src0.
MachineInstrBuilder buildSExtInReg(const DstOp &Res, const SrcOp &Op, int64_t ImmOp)
Build and insert Res = G_SEXT_INREG Op, ImmOp.
MachineInstrBuilder buildRotateLeft(const DstOp &Dst, const SrcOp &Src, const SrcOp &Amt)
Build and insert Dst = G_ROTL Src, Amt.
const MachineInstrBuilder & addUse(Register RegNo, RegState Flags={}, unsigned SubReg=0) const
Add a virtual register use operand.
const MachineInstrBuilder & addImm(int64_t Val) const
Add a new immediate operand.
const MachineInstrBuilder & addPredicate(CmpInst::Predicate Pred) const
const MachineInstrBuilder & addDef(Register RegNo, RegState Flags={}, unsigned SubReg=0) const
Add a virtual register definition operand.
Representation of each machine instruction.
A description of a memory reference used in the backend.
Flags
Flags values. These may be or'd together.
MachineOperand class - Representation of each machine instruction operand.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
LLVM_ABI Register createVirtualRegister(const TargetRegisterClass *RegClass, StringRef Name="")
createVirtualRegister - Create and return a new virtual register in the function with the specified r...
LLT getType(Register Reg) const
Get the low-level type of Reg or LLT{} if Reg is not a generic (target independent) virtual register.
LLVM_ABI Register createGenericVirtualRegister(LLT Ty, StringRef Name="")
Create and return a new generic virtual register with low-level type Ty.
Wrapper class representing virtual and physical registers.
SrcOp(const MachineInstrBuilder &MIB)
SrcOp(const CmpInst::Predicate P)
MachineInstrBuilder SrcMIB
CmpInst::Predicate getPredicate() const
SrcType getSrcOpKind() const
LLT getLLTTy(const MachineRegisterInfo &MRI) const
SrcOp(const MachineOperand &Op)
void addSrcToMIB(MachineInstrBuilder &MIB) const
SrcOp(unsigned)=delete
Use of registers held in unsigned integer variables (or more rarely signed integers) is no longer per...
TargetInstrInfo - Interface to description of machine instruction set.
LLT getVectorIdxLLT(const DataLayout &DL) const
Returns the type to be used for the index operand of: G_INSERT_VECTOR_ELT, G_EXTRACT_VECTOR_ELT,...
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
LLVM Value Representation.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
PointerUnion< const TargetRegisterClass *, const RegisterBank * > RegClassOrRegBank
Convenient type to represent either a register class or a register bank.
@ Debug
Register 'use' is for debugging purpose.
DWARFExpression::Operation Op
MCRegisterClass TargetRegisterClass
A collection of metadata nodes that might be associated with a memory access used by the alias-analys...
This struct is a compact representation of a valid (non-zero power of two) alignment.
constexpr uint64_t value() const
This is a hole in the type system and should not be abused.
Class which stores all the state required in a MachineIRBuilder.
MachineFunction * MF
MachineFunction under construction.
MDNode * MMRA
MMRA Metadata to be set on any instruction we create.
DebugLoc DL
Debug location to be set to any instruction we create.
const TargetInstrInfo * TII
Information used to access the description of the opcodes.
MDNode * PCSections
PC sections metadata to be set to any instruction we create.
MachineBasicBlock::iterator II
MachineRegisterInfo * MRI
Information used to verify types are consistent and to create virtual registers.
GISelChangeObserver * Observer
This class contains a discriminated union of information about pointers in memory operands,...
All attributes(register class or bank and low-level type) a virtual register can have.