Lines Matching refs:MRI

41 Register llvm::constrainRegToClass(MachineRegisterInfo &MRI,  in constrainRegToClass()  argument
45 if (!RBI.constrainGenericRegister(Reg, RegClass, MRI)) in constrainRegToClass()
46 return MRI.createVirtualRegister(&RegClass); in constrainRegToClass()
53 MachineRegisterInfo &MRI, const TargetInstrInfo &TII, in constrainOperandRegClass() argument
64 auto *OldRegClass = MRI.getRegClassOrNull(Reg); in constrainOperandRegClass()
65 Register ConstrainedReg = constrainRegToClass(MRI, TII, RBI, Reg, RegClass); in constrainOperandRegClass()
90 } else if (OldRegClass != MRI.getRegClassOrNull(Reg)) { in constrainOperandRegClass()
93 MachineInstr *RegDef = MRI.getVRegDef(Reg); in constrainOperandRegClass()
96 Observer->changingAllUsesOfReg(MRI, Reg); in constrainOperandRegClass()
105 MachineRegisterInfo &MRI, const TargetInstrInfo &TII, in constrainOperandRegClass() argument
124 OpRC, TRI.getConstrainedRegClassForOperand(RegMO, MRI))) in constrainOperandRegClass()
146 return constrainOperandRegClass(MF, TRI, MRI, TII, RBI, InsertPt, *OpRC, in constrainOperandRegClass()
158 MachineRegisterInfo &MRI = MF.getRegInfo(); in constrainSelectedInstRegOperands() local
183 constrainOperandRegClass(MF, TRI, MRI, TII, RBI, I, I.getDesc(), MO, OpI); in constrainSelectedInstRegOperands()
197 MachineRegisterInfo &MRI) { in canReplaceReg() argument
202 if (MRI.getType(DstReg) != MRI.getType(SrcReg)) in canReplaceReg()
206 return !MRI.getRegClassOrRegBank(DstReg) || in canReplaceReg()
207 MRI.getRegClassOrRegBank(DstReg) == MRI.getRegClassOrRegBank(SrcReg); in canReplaceReg()
211 const MachineRegisterInfo &MRI) { in isTriviallyDead() argument
236 if (Register::isPhysicalRegister(Reg) || !MRI.use_nodbg_empty(Reg)) in isTriviallyDead()
287 const MachineRegisterInfo &MRI) { in getIConstantVRegVal() argument
289 VReg, MRI, /*LookThroughInstrs*/ false); in getIConstantVRegVal()
298 llvm::getIConstantVRegSExtVal(Register VReg, const MachineRegisterInfo &MRI) { in getIConstantVRegSExtVal() argument
299 Optional<APInt> Val = getIConstantVRegVal(VReg, MRI); in getIConstantVRegSExtVal()
311 Register VReg, const MachineRegisterInfo &MRI, IsOpcodeFn IsConstantOpcode, in getConstantVRegValWithLookThrough() argument
317 while ((MI = MRI.getVRegDef(VReg)) && !IsConstantOpcode(MI) && in getConstantVRegValWithLookThrough()
329 MRI.getType(MI->getOperand(0).getReg()).getSizeInBits())); in getConstantVRegValWithLookThrough()
408 Register VReg, const MachineRegisterInfo &MRI, bool LookThroughInstrs) { in getIConstantVRegValWithLookThrough() argument
409 return getConstantVRegValWithLookThrough(VReg, MRI, isIConstant, in getIConstantVRegValWithLookThrough()
414 Register VReg, const MachineRegisterInfo &MRI, bool LookThroughInstrs, in getAnyConstantVRegValWithLookThrough() argument
417 VReg, MRI, isAnyConstant, getCImmOrFPImmAsAPInt, LookThroughInstrs, in getAnyConstantVRegValWithLookThrough()
422 Register VReg, const MachineRegisterInfo &MRI, bool LookThroughInstrs) { in getFConstantVRegValWithLookThrough() argument
424 VReg, MRI, isFConstant, getCImmOrFPImmAsAPInt, LookThroughInstrs); in getFConstantVRegValWithLookThrough()
427 return FPValueAndVReg{getConstantFPVRegVal(Reg->VReg, MRI)->getValueAPF(), in getFConstantVRegValWithLookThrough()
432 llvm::getConstantFPVRegVal(Register VReg, const MachineRegisterInfo &MRI) { in getConstantFPVRegVal() argument
433 MachineInstr *MI = MRI.getVRegDef(VReg); in getConstantFPVRegVal()
440 llvm::getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI) { in getDefSrcRegIgnoringCopies() argument
442 auto *DefMI = MRI.getVRegDef(Reg); in getDefSrcRegIgnoringCopies()
443 auto DstTy = MRI.getType(DefMI->getOperand(0).getReg()); in getDefSrcRegIgnoringCopies()
449 auto SrcTy = MRI.getType(SrcReg); in getDefSrcRegIgnoringCopies()
452 DefMI = MRI.getVRegDef(SrcReg); in getDefSrcRegIgnoringCopies()
460 const MachineRegisterInfo &MRI) { in getDefIgnoringCopies() argument
462 getDefSrcRegIgnoringCopies(Reg, MRI); in getDefIgnoringCopies()
467 const MachineRegisterInfo &MRI) { in getSrcRegIgnoringCopies() argument
469 getDefSrcRegIgnoringCopies(Reg, MRI); in getSrcRegIgnoringCopies()
474 const MachineRegisterInfo &MRI) { in getOpcodeDef() argument
475 MachineInstr *DefMI = getDefIgnoringCopies(Reg, MRI); in getOpcodeDef()
494 const MachineRegisterInfo &MRI) { in ConstantFoldBinOp() argument
495 auto MaybeOp2Cst = getAnyConstantVRegValWithLookThrough(Op2, MRI, false); in ConstantFoldBinOp()
499 auto MaybeOp1Cst = getAnyConstantVRegValWithLookThrough(Op1, MRI, false); in ConstantFoldBinOp()
558 const MachineRegisterInfo &MRI) { in ConstantFoldFPBinOp() argument
559 const ConstantFP *Op2Cst = getConstantFPVRegVal(Op2, MRI); in ConstantFoldFPBinOp()
563 const ConstantFP *Op1Cst = getConstantFPVRegVal(Op1, MRI); in ConstantFoldFPBinOp()
613 const MachineRegisterInfo &MRI) { in ConstantFoldVectorBinop() argument
614 auto *SrcVec2 = getOpcodeDef<GBuildVector>(Op2, MRI); in ConstantFoldVectorBinop()
618 auto *SrcVec1 = getOpcodeDef<GBuildVector>(Op1, MRI); in ConstantFoldVectorBinop()
625 SrcVec2->getSourceReg(Idx), MRI); in ConstantFoldVectorBinop()
633 bool llvm::isKnownNeverNaN(Register Val, const MachineRegisterInfo &MRI, in isKnownNeverNaN() argument
635 const MachineInstr *DefMI = MRI.getVRegDef(Val); in isKnownNeverNaN()
644 if (const ConstantFP *FPVal = getConstantFPVRegVal(Val, MRI)) { in isKnownNeverNaN()
651 if (!isKnownNeverNaN(Op.getReg(), MRI, SNaN)) in isKnownNeverNaN()
665 return (isKnownNeverNaN(DefMI->getOperand(1).getReg(), MRI) && in isKnownNeverNaN()
666 isKnownNeverSNaN(DefMI->getOperand(2).getReg(), MRI)) || in isKnownNeverNaN()
667 (isKnownNeverSNaN(DefMI->getOperand(1).getReg(), MRI) && in isKnownNeverNaN()
668 isKnownNeverNaN(DefMI->getOperand(2).getReg(), MRI)); in isKnownNeverNaN()
674 return isKnownNeverNaN(DefMI->getOperand(1).getReg(), MRI, SNaN) || in isKnownNeverNaN()
675 isKnownNeverNaN(DefMI->getOperand(2).getReg(), MRI, SNaN); in isKnownNeverNaN()
718 MachineRegisterInfo &MRI = MF.getRegInfo(); in getFunctionLiveInPhysReg() local
719 Register LiveIn = MRI.getLiveInVirtReg(PhysReg); in getFunctionLiveInPhysReg()
721 MachineInstr *Def = MRI.getVRegDef(LiveIn); in getFunctionLiveInPhysReg()
735 MRI.setType(LiveIn, RegTy); in getFunctionLiveInPhysReg()
747 const MachineRegisterInfo &MRI) { in ConstantFoldExtOp() argument
748 auto MaybeOp1Cst = getIConstantVRegVal(Op1, MRI); in ConstantFoldExtOp()
754 LLT Ty = MRI.getType(Op1); in ConstantFoldExtOp()
764 const MachineRegisterInfo &MRI) { in ConstantFoldIntToFloat() argument
766 if (auto MaybeSrcVal = getIConstantVRegVal(Src, MRI)) { in ConstantFoldIntToFloat()
776 llvm::ConstantFoldCTLZ(Register Src, const MachineRegisterInfo &MRI) { in ConstantFoldCTLZ() argument
777 LLT Ty = MRI.getType(Src); in ConstantFoldCTLZ()
780 auto MaybeCst = getIConstantVRegVal(R, MRI); in ConstantFoldCTLZ()
787 auto *BV = getOpcodeDef<GBuildVector>(Src, MRI); in ConstantFoldCTLZ()
806 bool llvm::isKnownToBeAPowerOfTwo(Register Reg, const MachineRegisterInfo &MRI, in isKnownToBeAPowerOfTwo() argument
809 getDefSrcRegIgnoringCopies(Reg, MRI); in isKnownToBeAPowerOfTwo()
814 const LLT Ty = MRI.getType(Reg); in isKnownToBeAPowerOfTwo()
827 if (auto ConstLHS = getIConstantVRegVal(MI.getOperand(1).getReg(), MRI)) { in isKnownToBeAPowerOfTwo()
835 if (auto ConstLHS = getIConstantVRegVal(MI.getOperand(1).getReg(), MRI)) { in isKnownToBeAPowerOfTwo()
846 if (!isKnownToBeAPowerOfTwo(MO.getReg(), MRI, KB)) in isKnownToBeAPowerOfTwo()
856 auto Const = getIConstantVRegVal(MO.getReg(), MRI); in isKnownToBeAPowerOfTwo()
1022 const MachineRegisterInfo &MRI, in getAnyConstantSplat() argument
1024 MachineInstr *MI = getDefIgnoringCopies(VReg, MRI); in getAnyConstantSplat()
1035 getAnyConstantVRegValWithLookThrough(Element, MRI, true, true); in getAnyConstantSplat()
1039 if (AllowUndef && isa<GImplicitDef>(MRI.getVRegDef(Element))) in getAnyConstantSplat()
1059 const MachineRegisterInfo &MRI, in isBuildVectorConstantSplat() argument
1061 if (auto SplatValAndReg = getAnyConstantSplat(Reg, MRI, AllowUndef)) in isBuildVectorConstantSplat()
1062 return mi_match(SplatValAndReg->VReg, MRI, m_SpecificICst(SplatValue)); in isBuildVectorConstantSplat()
1067 const MachineRegisterInfo &MRI, in isBuildVectorConstantSplat() argument
1069 return isBuildVectorConstantSplat(MI.getOperand(0).getReg(), MRI, SplatValue, in isBuildVectorConstantSplat()
1074 const MachineRegisterInfo &MRI) { in getIConstantSplatVal() argument
1076 getAnyConstantSplat(Reg, MRI, /* AllowUndef */ false)) { in getIConstantSplatVal()
1078 getIConstantVRegValWithLookThrough(SplatValAndReg->VReg, MRI); in getIConstantSplatVal()
1086 const MachineRegisterInfo &MRI) { in getIConstantSplatVal() argument
1087 return getIConstantSplatVal(MI.getOperand(0).getReg(), MRI); in getIConstantSplatVal()
1092 const MachineRegisterInfo &MRI) { in getIConstantSplatSExtVal() argument
1094 getAnyConstantSplat(Reg, MRI, /* AllowUndef */ false)) in getIConstantSplatSExtVal()
1095 return getIConstantVRegSExtVal(SplatValAndReg->VReg, MRI); in getIConstantSplatSExtVal()
1101 const MachineRegisterInfo &MRI) { in getIConstantSplatSExtVal() argument
1102 return getIConstantSplatSExtVal(MI.getOperand(0).getReg(), MRI); in getIConstantSplatSExtVal()
1106 const MachineRegisterInfo &MRI, in getFConstantSplat() argument
1108 if (auto SplatValAndReg = getAnyConstantSplat(VReg, MRI, AllowUndef)) in getFConstantSplat()
1109 return getFConstantVRegValWithLookThrough(SplatValAndReg->VReg, MRI); in getFConstantSplat()
1114 const MachineRegisterInfo &MRI, in isBuildVectorAllZeros() argument
1116 return isBuildVectorConstantSplat(MI, MRI, 0, AllowUndef); in isBuildVectorAllZeros()
1120 const MachineRegisterInfo &MRI, in isBuildVectorAllOnes() argument
1122 return isBuildVectorConstantSplat(MI, MRI, -1, AllowUndef); in isBuildVectorAllOnes()
1126 const MachineRegisterInfo &MRI) { in getVectorSplat() argument
1130 if (auto Splat = getIConstantSplatSExtVal(MI, MRI)) in getVectorSplat()
1140 const MachineRegisterInfo &MRI, in isConstantScalar() argument
1160 const MachineRegisterInfo &MRI) { in isConstantOrConstantVector() argument
1162 if (auto C = getIConstantVRegValWithLookThrough(Def, MRI)) in isConstantOrConstantVector()
1168 if (getIConstantVRegValWithLookThrough(BV->getSourceReg(SrcIdx), MRI) || in isConstantOrConstantVector()
1169 getOpcodeDef<GImplicitDef>(BV->getSourceReg(SrcIdx), MRI)) in isConstantOrConstantVector()
1177 const MachineRegisterInfo &MRI, in isConstantOrConstantVector() argument
1179 if (isConstantScalar(MI, MRI, AllowFP, AllowOpaqueConstants)) in isConstantOrConstantVector()
1187 const MachineInstr *ElementDef = MRI.getVRegDef(MI.getOperand(I).getReg()); in isConstantOrConstantVector()
1188 if (!isConstantScalar(*ElementDef, MRI, AllowFP, AllowOpaqueConstants)) in isConstantOrConstantVector()
1197 const MachineRegisterInfo &MRI) { in isConstantOrConstantSplatVector() argument
1199 if (auto C = getIConstantVRegValWithLookThrough(Def, MRI)) in isConstantOrConstantSplatVector()
1201 auto MaybeCst = getIConstantSplatSExtVal(MI, MRI); in isConstantOrConstantSplatVector()
1204 const unsigned ScalarSize = MRI.getType(Def).getScalarSizeInBits(); in isConstantOrConstantSplatVector()
1209 const MachineRegisterInfo &MRI, bool AllowUndefs) { in isNullOrNullSplat() argument
1222 return isBuildVectorAllZeros(MI, MRI); in isNullOrNullSplat()
1227 const MachineRegisterInfo &MRI, in isAllOnesOrAllOnesSplat() argument
1237 return isBuildVectorAllOnes(MI, MRI); in isAllOnesOrAllOnesSplat()
1242 const MachineRegisterInfo &MRI, Register Reg, in matchUnaryPredicate() argument
1245 const MachineInstr *Def = getDefIgnoringCopies(Reg, MRI); in matchUnaryPredicate()
1258 const MachineInstr *SrcDef = getDefIgnoringCopies(SrcElt, MRI); in matchUnaryPredicate()
1305 void llvm::saveUsesAndErase(MachineInstr &MI, MachineRegisterInfo &MRI, in saveUsesAndErase() argument
1310 DeadInstChain.insert(MRI.getVRegDef(Op.getReg())); in saveUsesAndErase()
1320 MachineRegisterInfo &MRI, in eraseInstrs() argument
1324 saveUsesAndErase(*MI, MRI, LocObserver, DeadInstChain); in eraseInstrs()
1328 if (!isTriviallyDead(*Inst, MRI)) in eraseInstrs()
1330 saveUsesAndErase(*Inst, MRI, LocObserver, DeadInstChain); in eraseInstrs()
1334 void llvm::eraseInstr(MachineInstr &MI, MachineRegisterInfo &MRI, in eraseInstr() argument
1336 return eraseInstrs({&MI}, MRI, LocObserver); in eraseInstr()