Lines Matching refs:MRI
46 Register llvm::constrainRegToClass(MachineRegisterInfo &MRI, in constrainRegToClass() argument
50 if (!RBI.constrainGenericRegister(Reg, RegClass, MRI)) in constrainRegToClass()
51 return MRI.createVirtualRegister(&RegClass); in constrainRegToClass()
58 MachineRegisterInfo &MRI, const TargetInstrInfo &TII, in constrainOperandRegClass() argument
69 auto *OldRegClass = MRI.getRegClassOrNull(Reg); in constrainOperandRegClass()
70 Register ConstrainedReg = constrainRegToClass(MRI, TII, RBI, Reg, RegClass); in constrainOperandRegClass()
95 } else if (OldRegClass != MRI.getRegClassOrNull(Reg)) { in constrainOperandRegClass()
98 MachineInstr *RegDef = MRI.getVRegDef(Reg); in constrainOperandRegClass()
101 Observer->changingAllUsesOfReg(MRI, Reg); in constrainOperandRegClass()
110 MachineRegisterInfo &MRI, const TargetInstrInfo &TII, in constrainOperandRegClass() argument
129 OpRC, TRI.getConstrainedRegClassForOperand(RegMO, MRI))) in constrainOperandRegClass()
151 return constrainOperandRegClass(MF, TRI, MRI, TII, RBI, InsertPt, *OpRC, in constrainOperandRegClass()
163 MachineRegisterInfo &MRI = MF.getRegInfo(); in constrainSelectedInstRegOperands() local
188 constrainOperandRegClass(MF, TRI, MRI, TII, RBI, I, I.getDesc(), MO, OpI); in constrainSelectedInstRegOperands()
202 MachineRegisterInfo &MRI) { in canReplaceReg() argument
207 if (MRI.getType(DstReg) != MRI.getType(SrcReg)) in canReplaceReg()
211 const auto &DstRBC = MRI.getRegClassOrRegBank(DstReg); in canReplaceReg()
212 if (!DstRBC || DstRBC == MRI.getRegClassOrRegBank(SrcReg)) in canReplaceReg()
217 return isa<const RegisterBank *>(DstRBC) && MRI.getRegClassOrNull(SrcReg) && in canReplaceReg()
219 *MRI.getRegClassOrNull(SrcReg)); in canReplaceReg()
223 const MachineRegisterInfo &MRI) { in isTriviallyDead() argument
229 if (Reg.isPhysical() || !MRI.use_nodbg_empty(Reg)) in isTriviallyDead()
295 const MachineRegisterInfo &MRI) { in getIConstantVRegVal() argument
297 VReg, MRI, /*LookThroughInstrs*/ false); in getIConstantVRegVal()
306 const MachineRegisterInfo &MRI) { in getIConstantFromReg() argument
307 MachineInstr *Const = MRI.getVRegDef(Reg); in getIConstantFromReg()
314 llvm::getIConstantVRegSExtVal(Register VReg, const MachineRegisterInfo &MRI) { in getIConstantVRegSExtVal() argument
315 std::optional<APInt> Val = getIConstantVRegVal(VReg, MRI); in getIConstantVRegSExtVal()
336 getConstantVRegValWithLookThrough(Register VReg, const MachineRegisterInfo &MRI, in getConstantVRegValWithLookThrough() argument
342 while ((MI = MRI.getVRegDef(VReg)) && !IsConstantOpcode(MI) && in getConstantVRegValWithLookThrough()
354 MRI.getType(MI->getOperand(0).getReg()).getSizeInBits())); in getConstantVRegValWithLookThrough()
434 Register VReg, const MachineRegisterInfo &MRI, bool LookThroughInstrs) { in getIConstantVRegValWithLookThrough() argument
436 VReg, MRI, LookThroughInstrs); in getIConstantVRegValWithLookThrough()
440 Register VReg, const MachineRegisterInfo &MRI, bool LookThroughInstrs, in getAnyConstantVRegValWithLookThrough() argument
444 VReg, MRI, LookThroughInstrs, LookThroughAnyExt); in getAnyConstantVRegValWithLookThrough()
448 Register VReg, const MachineRegisterInfo &MRI, bool LookThroughInstrs) { in getFConstantVRegValWithLookThrough() argument
451 VReg, MRI, LookThroughInstrs); in getFConstantVRegValWithLookThrough()
454 return FPValueAndVReg{getConstantFPVRegVal(Reg->VReg, MRI)->getValueAPF(), in getFConstantVRegValWithLookThrough()
459 llvm::getConstantFPVRegVal(Register VReg, const MachineRegisterInfo &MRI) { in getConstantFPVRegVal() argument
460 MachineInstr *MI = MRI.getVRegDef(VReg); in getConstantFPVRegVal()
467 llvm::getDefSrcRegIgnoringCopies(Register Reg, const MachineRegisterInfo &MRI) { in getDefSrcRegIgnoringCopies() argument
469 auto *DefMI = MRI.getVRegDef(Reg); in getDefSrcRegIgnoringCopies()
470 auto DstTy = MRI.getType(DefMI->getOperand(0).getReg()); in getDefSrcRegIgnoringCopies()
476 auto SrcTy = MRI.getType(SrcReg); in getDefSrcRegIgnoringCopies()
479 DefMI = MRI.getVRegDef(SrcReg); in getDefSrcRegIgnoringCopies()
487 const MachineRegisterInfo &MRI) { in getDefIgnoringCopies() argument
489 getDefSrcRegIgnoringCopies(Reg, MRI); in getDefIgnoringCopies()
494 const MachineRegisterInfo &MRI) { in getSrcRegIgnoringCopies() argument
496 getDefSrcRegIgnoringCopies(Reg, MRI); in getSrcRegIgnoringCopies()
503 MachineRegisterInfo &MRI) { in extractParts() argument
505 VRegs.push_back(MRI.createGenericVirtualRegister(Ty)); in extractParts()
513 MachineRegisterInfo &MRI) { in extractParts() argument
524 VRegs.push_back(MRI.createGenericVirtualRegister(MainTy)); in extractParts()
548 MIRBuilder, MRI); in extractParts()
577 MRI); in extractParts()
581 LeftoverTy = MRI.getType(LeftoverRegs[0]); in extractParts()
588 Register NewReg = MRI.createGenericVirtualRegister(MainTy); in extractParts()
595 Register NewReg = MRI.createGenericVirtualRegister(LeftoverTy); in extractParts()
606 MachineRegisterInfo &MRI) { in extractVectorParts() argument
607 LLT RegTy = MRI.getType(Reg); in extractVectorParts()
619 MRI); in extractVectorParts()
625 extractParts(Reg, EltTy, RegNumElts, Elts, MIRBuilder, MRI); in extractVectorParts()
646 const MachineRegisterInfo &MRI) { in getOpcodeDef() argument
647 MachineInstr *DefMI = getDefIgnoringCopies(Reg, MRI); in getOpcodeDef()
667 const MachineRegisterInfo &MRI) { in ConstantFoldBinOp() argument
668 auto MaybeOp2Cst = getAnyConstantVRegValWithLookThrough(Op2, MRI, false); in ConstantFoldBinOp()
672 auto MaybeOp1Cst = getAnyConstantVRegValWithLookThrough(Op1, MRI, false); in ConstantFoldBinOp()
734 const Register Op2, const MachineRegisterInfo &MRI) { in ConstantFoldFPBinOp() argument
735 const ConstantFP *Op2Cst = getConstantFPVRegVal(Op2, MRI); in ConstantFoldFPBinOp()
739 const ConstantFP *Op1Cst = getConstantFPVRegVal(Op1, MRI); in ConstantFoldFPBinOp()
789 const MachineRegisterInfo &MRI) { in ConstantFoldVectorBinop() argument
790 auto *SrcVec2 = getOpcodeDef<GBuildVector>(Op2, MRI); in ConstantFoldVectorBinop()
794 auto *SrcVec1 = getOpcodeDef<GBuildVector>(Op1, MRI); in ConstantFoldVectorBinop()
801 SrcVec2->getSourceReg(Idx), MRI); in ConstantFoldVectorBinop()
809 bool llvm::isKnownNeverNaN(Register Val, const MachineRegisterInfo &MRI, in isKnownNeverNaN() argument
811 const MachineInstr *DefMI = MRI.getVRegDef(Val); in isKnownNeverNaN()
820 if (const ConstantFP *FPVal = getConstantFPVRegVal(Val, MRI)) { in isKnownNeverNaN()
827 if (!isKnownNeverNaN(Op.getReg(), MRI, SNaN)) in isKnownNeverNaN()
863 return (isKnownNeverNaN(DefMI->getOperand(1).getReg(), MRI) && in isKnownNeverNaN()
864 isKnownNeverSNaN(DefMI->getOperand(2).getReg(), MRI)) || in isKnownNeverNaN()
865 (isKnownNeverSNaN(DefMI->getOperand(1).getReg(), MRI) && in isKnownNeverNaN()
866 isKnownNeverNaN(DefMI->getOperand(2).getReg(), MRI)); in isKnownNeverNaN()
872 return isKnownNeverNaN(DefMI->getOperand(1).getReg(), MRI, SNaN) || in isKnownNeverNaN()
873 isKnownNeverNaN(DefMI->getOperand(2).getReg(), MRI, SNaN); in isKnownNeverNaN()
916 MachineRegisterInfo &MRI = MF.getRegInfo(); in getFunctionLiveInPhysReg() local
917 Register LiveIn = MRI.getLiveInVirtReg(PhysReg); in getFunctionLiveInPhysReg()
919 MachineInstr *Def = MRI.getVRegDef(LiveIn); in getFunctionLiveInPhysReg()
933 MRI.setType(LiveIn, RegTy); in getFunctionLiveInPhysReg()
945 const MachineRegisterInfo &MRI) { in ConstantFoldExtOp() argument
946 auto MaybeOp1Cst = getIConstantVRegVal(Op1, MRI); in ConstantFoldExtOp()
952 LLT Ty = MRI.getType(Op1); in ConstantFoldExtOp()
962 const MachineRegisterInfo &MRI) { in ConstantFoldCastOp() argument
963 std::optional<APInt> Val = getIConstantVRegVal(Op0, MRI); in ConstantFoldCastOp()
985 const MachineRegisterInfo &MRI) { in ConstantFoldIntToFloat() argument
987 if (auto MaybeSrcVal = getIConstantVRegVal(Src, MRI)) { in ConstantFoldIntToFloat()
997 llvm::ConstantFoldCountZeros(Register Src, const MachineRegisterInfo &MRI, in ConstantFoldCountZeros() argument
999 LLT Ty = MRI.getType(Src); in ConstantFoldCountZeros()
1002 auto MaybeCst = getIConstantVRegVal(R, MRI); in ConstantFoldCountZeros()
1009 auto *BV = getOpcodeDef<GBuildVector>(Src, MRI); in ConstantFoldCountZeros()
1031 const MachineRegisterInfo &MRI) { in ConstantFoldICmp() argument
1035 const LLT Ty = MRI.getType(Op1); in ConstantFoldICmp()
1046 auto RHSCst = getIConstantVRegVal(RHS, MRI); in ConstantFoldICmp()
1049 auto LHSCst = getIConstantVRegVal(LHS, MRI); in ConstantFoldICmp()
1083 auto *BV1 = getOpcodeDef<GBuildVector>(Op1, MRI); in ConstantFoldICmp()
1084 auto *BV2 = getOpcodeDef<GBuildVector>(Op2, MRI); in ConstantFoldICmp()
1107 bool llvm::isKnownToBeAPowerOfTwo(Register Reg, const MachineRegisterInfo &MRI, in isKnownToBeAPowerOfTwo() argument
1110 getDefSrcRegIgnoringCopies(Reg, MRI); in isKnownToBeAPowerOfTwo()
1115 const LLT Ty = MRI.getType(Reg); in isKnownToBeAPowerOfTwo()
1128 if (auto ConstLHS = getIConstantVRegVal(MI.getOperand(1).getReg(), MRI)) { in isKnownToBeAPowerOfTwo()
1136 if (auto ConstLHS = getIConstantVRegVal(MI.getOperand(1).getReg(), MRI)) { in isKnownToBeAPowerOfTwo()
1147 if (!isKnownToBeAPowerOfTwo(MO.getReg(), MRI, VT)) in isKnownToBeAPowerOfTwo()
1157 auto Const = getIConstantVRegVal(MO.getReg(), MRI); in isKnownToBeAPowerOfTwo()
1354 const MachineRegisterInfo &MRI, in getAnyConstantSplat() argument
1356 MachineInstr *MI = getDefIgnoringCopies(VReg, MRI); in getAnyConstantSplat()
1371 ? getAnyConstantSplat(Element, MRI, AllowUndef) in getAnyConstantSplat()
1372 : getAnyConstantVRegValWithLookThrough(Element, MRI, true, true); in getAnyConstantSplat()
1376 if (AllowUndef && isa<GImplicitDef>(MRI.getVRegDef(Element))) in getAnyConstantSplat()
1396 const MachineRegisterInfo &MRI, in isBuildVectorConstantSplat() argument
1398 if (auto SplatValAndReg = getAnyConstantSplat(Reg, MRI, AllowUndef)) in isBuildVectorConstantSplat()
1405 const MachineRegisterInfo &MRI, in isBuildVectorConstantSplat() argument
1407 return isBuildVectorConstantSplat(MI.getOperand(0).getReg(), MRI, SplatValue, in isBuildVectorConstantSplat()
1412 llvm::getIConstantSplatVal(const Register Reg, const MachineRegisterInfo &MRI) { in getIConstantSplatVal() argument
1414 getAnyConstantSplat(Reg, MRI, /* AllowUndef */ false)) { in getIConstantSplatVal()
1416 getIConstantVRegValWithLookThrough(SplatValAndReg->VReg, MRI)) in getIConstantSplatVal()
1425 const MachineRegisterInfo &MRI) { in getIConstantSplatVal() argument
1426 return getIConstantSplatVal(MI.getOperand(0).getReg(), MRI); in getIConstantSplatVal()
1431 const MachineRegisterInfo &MRI) { in getIConstantSplatSExtVal() argument
1433 getAnyConstantSplat(Reg, MRI, /* AllowUndef */ false)) in getIConstantSplatSExtVal()
1434 return getIConstantVRegSExtVal(SplatValAndReg->VReg, MRI); in getIConstantSplatSExtVal()
1440 const MachineRegisterInfo &MRI) { in getIConstantSplatSExtVal() argument
1441 return getIConstantSplatSExtVal(MI.getOperand(0).getReg(), MRI); in getIConstantSplatSExtVal()
1445 llvm::getFConstantSplat(Register VReg, const MachineRegisterInfo &MRI, in getFConstantSplat() argument
1447 if (auto SplatValAndReg = getAnyConstantSplat(VReg, MRI, AllowUndef)) in getFConstantSplat()
1448 return getFConstantVRegValWithLookThrough(SplatValAndReg->VReg, MRI); in getFConstantSplat()
1453 const MachineRegisterInfo &MRI, in isBuildVectorAllZeros() argument
1455 return isBuildVectorConstantSplat(MI, MRI, 0, AllowUndef); in isBuildVectorAllZeros()
1459 const MachineRegisterInfo &MRI, in isBuildVectorAllOnes() argument
1461 return isBuildVectorConstantSplat(MI, MRI, -1, AllowUndef); in isBuildVectorAllOnes()
1465 llvm::getVectorSplat(const MachineInstr &MI, const MachineRegisterInfo &MRI) { in getVectorSplat() argument
1469 if (auto Splat = getIConstantSplatSExtVal(MI, MRI)) in getVectorSplat()
1479 const MachineRegisterInfo &MRI, in isConstantScalar() argument
1499 const MachineRegisterInfo &MRI) { in isConstantOrConstantVector() argument
1501 if (auto C = getIConstantVRegValWithLookThrough(Def, MRI)) in isConstantOrConstantVector()
1507 if (getIConstantVRegValWithLookThrough(BV->getSourceReg(SrcIdx), MRI) || in isConstantOrConstantVector()
1508 getOpcodeDef<GImplicitDef>(BV->getSourceReg(SrcIdx), MRI)) in isConstantOrConstantVector()
1516 const MachineRegisterInfo &MRI, in isConstantOrConstantVector() argument
1518 if (isConstantScalar(MI, MRI, AllowFP, AllowOpaqueConstants)) in isConstantOrConstantVector()
1526 const MachineInstr *ElementDef = MRI.getVRegDef(MI.getOperand(I).getReg()); in isConstantOrConstantVector()
1527 if (!isConstantScalar(*ElementDef, MRI, AllowFP, AllowOpaqueConstants)) in isConstantOrConstantVector()
1536 const MachineRegisterInfo &MRI) { in isConstantOrConstantSplatVector() argument
1538 if (auto C = getIConstantVRegValWithLookThrough(Def, MRI)) in isConstantOrConstantSplatVector()
1540 auto MaybeCst = getIConstantSplatSExtVal(MI, MRI); in isConstantOrConstantSplatVector()
1543 const unsigned ScalarSize = MRI.getType(Def).getScalarSizeInBits(); in isConstantOrConstantSplatVector()
1549 const MachineRegisterInfo &MRI) { in isConstantOrConstantSplatVectorFP() argument
1551 if (auto FpConst = getFConstantVRegValWithLookThrough(Def, MRI)) in isConstantOrConstantSplatVectorFP()
1553 auto MaybeCstFP = getFConstantSplat(Def, MRI, /*allowUndef=*/false); in isConstantOrConstantSplatVectorFP()
1560 const MachineRegisterInfo &MRI, bool AllowUndefs) { in isNullOrNullSplat() argument
1573 return isBuildVectorAllZeros(MI, MRI); in isNullOrNullSplat()
1578 const MachineRegisterInfo &MRI, in isAllOnesOrAllOnesSplat() argument
1588 return isBuildVectorAllOnes(MI, MRI); in isAllOnesOrAllOnesSplat()
1593 const MachineRegisterInfo &MRI, Register Reg, in matchUnaryPredicate() argument
1596 const MachineInstr *Def = getDefIgnoringCopies(Reg, MRI); in matchUnaryPredicate()
1609 const MachineInstr *SrcDef = getDefIgnoringCopies(SrcElt, MRI); in matchUnaryPredicate()
1661 void llvm::saveUsesAndErase(MachineInstr &MI, MachineRegisterInfo &MRI, in saveUsesAndErase() argument
1666 DeadInstChain.insert(MRI.getVRegDef(Op.getReg())); in saveUsesAndErase()
1676 MachineRegisterInfo &MRI, in eraseInstrs() argument
1680 saveUsesAndErase(*MI, MRI, LocObserver, DeadInstChain); in eraseInstrs()
1684 if (!isTriviallyDead(*Inst, MRI)) in eraseInstrs()
1686 saveUsesAndErase(*Inst, MRI, LocObserver, DeadInstChain); in eraseInstrs()
1690 void llvm::eraseInstr(MachineInstr &MI, MachineRegisterInfo &MRI, in eraseInstr() argument
1692 return eraseInstrs({&MI}, MRI, LocObserver); in eraseInstr()
1695 void llvm::salvageDebugInfo(const MachineRegisterInfo &MRI, MachineInstr &MI) { in salvageDebugInfo() argument
1700 for (auto &MOUse : MRI.use_operands(Def.getReg())) { in salvageDebugInfo()
1709 salvageDebugInfoForDbgValue(MRI, MI, DbgUsers); in salvageDebugInfo()
1768 const MachineRegisterInfo &MRI) { in shiftAmountKnownInRange() argument
1769 LLT Ty = MRI.getType(ShiftAmount); in shiftAmountKnownInRange()
1776 getIConstantVRegValWithLookThrough(ShiftAmount, MRI); in shiftAmountKnownInRange()
1782 GBuildVector *BV = getOpcodeDef<GBuildVector>(ShiftAmount, MRI); in shiftAmountKnownInRange()
1789 getIConstantVRegValWithLookThrough(BV->getSourceReg(I), MRI); in shiftAmountKnownInRange()
1815 static bool canCreateUndefOrPoison(Register Reg, const MachineRegisterInfo &MRI, in canCreateUndefOrPoison() argument
1818 MachineInstr *RegDef = MRI.getVRegDef(Reg); in canCreateUndefOrPoison()
1834 !shiftAmountKnownInRange(RegDef->getOperand(2).getReg(), MRI); in canCreateUndefOrPoison()
1867 !shiftAmountKnownInRange(RegDef->getOperand(2).getReg(), MRI); in canCreateUndefOrPoison()
1872 getIConstantVRegValWithLookThrough(Insert->getIndexReg(), MRI); in canCreateUndefOrPoison()
1875 LLT VecTy = MRI.getType(Insert->getVectorReg()); in canCreateUndefOrPoison()
1884 getIConstantVRegValWithLookThrough(Extract->getIndexReg(), MRI); in canCreateUndefOrPoison()
1887 LLT VecTy = MRI.getType(Extract->getVectorReg()); in canCreateUndefOrPoison()
1918 const MachineRegisterInfo &MRI, in isGuaranteedNotToBeUndefOrPoison() argument
1924 MachineInstr *RegDef = MRI.getVRegDef(Reg); in isGuaranteedNotToBeUndefOrPoison()
1938 if (!::isGuaranteedNotToBeUndefOrPoison(BV->getSourceReg(I), MRI, in isGuaranteedNotToBeUndefOrPoison()
1947 if (!::isGuaranteedNotToBeUndefOrPoison(Phi->getIncomingValue(I), MRI, in isGuaranteedNotToBeUndefOrPoison()
1956 return ::isGuaranteedNotToBeUndefOrPoison(MO.getReg(), MRI, Depth + 1, in isGuaranteedNotToBeUndefOrPoison()
1959 return !::canCreateUndefOrPoison(Reg, MRI, in isGuaranteedNotToBeUndefOrPoison()
1966 bool llvm::canCreateUndefOrPoison(Register Reg, const MachineRegisterInfo &MRI, in canCreateUndefOrPoison() argument
1968 return ::canCreateUndefOrPoison(Reg, MRI, ConsiderFlagsAndMetadata, in canCreateUndefOrPoison()
1972 bool canCreatePoison(Register Reg, const MachineRegisterInfo &MRI, in canCreatePoison() argument
1974 return ::canCreateUndefOrPoison(Reg, MRI, ConsiderFlagsAndMetadata, in canCreatePoison()
1979 const MachineRegisterInfo &MRI, in isGuaranteedNotToBeUndefOrPoison() argument
1981 return ::isGuaranteedNotToBeUndefOrPoison(Reg, MRI, Depth, in isGuaranteedNotToBeUndefOrPoison()
1986 const MachineRegisterInfo &MRI, in isGuaranteedNotToBePoison() argument
1988 return ::isGuaranteedNotToBeUndefOrPoison(Reg, MRI, Depth, in isGuaranteedNotToBePoison()
1993 const MachineRegisterInfo &MRI, in isGuaranteedNotToBeUndef() argument
1995 return ::isGuaranteedNotToBeUndefOrPoison(Reg, MRI, Depth, in isGuaranteedNotToBeUndef()
2024 llvm::GIConstant::getConstant(Register Const, const MachineRegisterInfo &MRI) { in getConstant() argument
2025 MachineInstr *Constant = getDefIgnoringCopies(Const, MRI); in getConstant()
2029 getIConstantVRegValWithLookThrough(Splat->getScalarReg(), MRI); in getConstant()
2041 getIConstantVRegValWithLookThrough(SrcReg, MRI); in getConstant()
2050 getIConstantVRegValWithLookThrough(Const, MRI); in getConstant()
2064 llvm::GFConstant::getConstant(Register Const, const MachineRegisterInfo &MRI) { in getConstant() argument
2065 MachineInstr *Constant = getDefIgnoringCopies(Const, MRI); in getConstant()
2069 getFConstantVRegValWithLookThrough(Splat->getScalarReg(), MRI); in getConstant()
2081 getFConstantVRegValWithLookThrough(SrcReg, MRI); in getConstant()
2090 getFConstantVRegValWithLookThrough(Const, MRI); in getConstant()