Lines Matching defs:MatchInfo

227     MachineInstr &MI, BuildFnTy &MatchInfo) {
270 MatchInfo = [=](MachineIRBuilder &B) {
282 MatchInfo = [=](MachineIRBuilder &B) mutable {
887 BuildFnTy &MatchInfo) {
957 MatchInfo = [=](MachineIRBuilder &B) {
1030 MachineInstr &MI, std::tuple<Register, unsigned> &MatchInfo) {
1077 MatchInfo = std::make_tuple(LoadDef->getDstReg(), NewSizeBits);
1082 MachineInstr &MI, std::tuple<Register, unsigned> &MatchInfo) {
1086 std::tie(LoadReg, ScalarSizeBits) = MatchInfo;
1320 BuildFnTy &MatchInfo) {
1409 MatchInfo = [=](MachineIRBuilder &B) {
1426 MachineInstr &MI, IndexedLoadStoreMatchInfo &MatchInfo) {
1432 MatchInfo.IsPre = findPreIndexCandidate(LdSt, MatchInfo.Addr, MatchInfo.Base,
1433 MatchInfo.Offset);
1434 if (!MatchInfo.IsPre &&
1435 !findPostIndexCandidate(LdSt, MatchInfo.Addr, MatchInfo.Base,
1436 MatchInfo.Offset, MatchInfo.RematOffset))
1443 MachineInstr &MI, IndexedLoadStoreMatchInfo &MatchInfo) {
1444 MachineInstr &AddrDef = *MRI.getUniqueVRegDef(MatchInfo.Addr);
1451 if (MatchInfo.RematOffset) {
1452 auto *OldCst = MRI.getVRegDef(MatchInfo.Offset);
1453 auto NewCst = Builder.buildConstant(MRI.getType(MatchInfo.Offset),
1455 MatchInfo.Offset = NewCst.getReg(0);
1460 MIB.addDef(MatchInfo.Addr);
1464 MIB.addDef(MatchInfo.Addr);
1467 MIB.addUse(MatchInfo.Base);
1468 MIB.addUse(MatchInfo.Offset);
1469 MIB.addImm(MatchInfo.IsPre);
1702 PtrAddChain &MatchInfo) {
1757 MatchInfo.Imm = AMNew.BaseOffs;
1758 MatchInfo.Base = Base;
1759 MatchInfo.Bank = getRegBank(Imm2);
1764 PtrAddChain &MatchInfo) {
1768 auto NewOffset = MIB.buildConstant(OffsetTy, MatchInfo.Imm);
1769 setRegBank(NewOffset.getReg(0), MatchInfo.Bank);
1771 MI.getOperand(1).setReg(MatchInfo.Base);
1777 RegisterImmPair &MatchInfo) {
1808 MatchInfo.Imm =
1810 MatchInfo.Reg = Base;
1815 MatchInfo.Imm >= MRI.getType(Shl2).getScalarSizeInBits())
1822 RegisterImmPair &MatchInfo) {
1831 auto Imm = MatchInfo.Imm;
1848 MI.getOperand(1).setReg(MatchInfo.Reg);
1854 ShiftOfShiftedLogic &MatchInfo) {
1916 MatchInfo.LogicNonShiftReg = LogicMIReg2;
1917 MatchInfo.Shift2 = LogicMIOp1;
1919 MatchInfo.LogicNonShiftReg = LogicMIReg1;
1920 MatchInfo.Shift2 = LogicMIOp2;
1924 MatchInfo.ValSum = C0Val + C1Val;
1927 if (MatchInfo.ValSum >= MRI.getType(LogicDest).getScalarSizeInBits())
1930 MatchInfo.Logic = LogicMI;
1935 ShiftOfShiftedLogic &MatchInfo) {
1945 Register Const = Builder.buildConstant(ShlType, MatchInfo.ValSum).getReg(0);
1947 Register Shift1Base = MatchInfo.Shift2->getOperand(1).getReg();
1952 // to MatchInfo.Shift2 const, CSEMIRBuilder will reuse the old shift1 when
1953 // build shift2. So, if we erase MatchInfo.Shift2 at the end, actually we
1956 MatchInfo.Shift2->eraseFromParent();
1961 {MatchInfo.LogicNonShiftReg, Shift2Const})
1965 Builder.buildInstr(MatchInfo.Logic->getOpcode(), {Dest}, {Shift1, Shift2});
1968 MatchInfo.Logic->eraseFromParent();
1973 bool CombinerHelper::matchCommuteShift(MachineInstr &MI, BuildFnTy &MatchInfo) {
2000 MatchInfo = [=](MachineIRBuilder &B) {
2087 Register &MatchInfo) {
2101 MatchInfo = Unmerge->getSourceReg();
2209 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
2212 MatchInfo = [&MI](MachineIRBuilder &B) {
2532 MachineInstr &MI, std::tuple<Register, unsigned> &MatchInfo) {
2549 MatchInfo = std::make_tuple(SrcMI->getOperand(1).getReg(), SrcOpc);
2556 MachineInstr &MI, std::tuple<Register, unsigned> &MatchInfo) {
2562 Register Reg = std::get<0>(MatchInfo);
2563 unsigned SrcExtOp = std::get<1>(MatchInfo);
2586 MachineInstr &MI, std::pair<Register, unsigned> &MatchInfo) {
2593 MatchInfo = std::make_pair(SrcMI->getOperand(1).getReg(), SrcOpc);
2600 MachineInstr &MI, std::pair<Register, unsigned> &MatchInfo) {
2602 Register SrcReg = MatchInfo.first;
2603 unsigned SrcExtOp = MatchInfo.second;
2637 MachineInstr &MI, std::pair<MachineInstr *, LLT> &MatchInfo) {
2693 MatchInfo = std::make_pair(SrcMI, NewShiftTy);
2698 MachineInstr &MI, std::pair<MachineInstr *, LLT> &MatchInfo) {
2699 MachineInstr *ShiftMI = MatchInfo.first;
2700 LLT NewShiftTy = MatchInfo.second;
3016 MachineInstr &MI, std::tuple<Register, Register> &MatchInfo) {
3019 Register &NewLHS = std::get<0>(MatchInfo);
3020 Register &NewRHS = std::get<1>(MatchInfo);
3036 MachineInstr &MI, SmallVectorImpl<Register> &MatchInfo) {
3052 MatchInfo.resize(NumElts);
3058 if (!MatchInfo[IntImm])
3059 MatchInfo[IntImm] = TmpReg;
3067 if (!MatchInfo[I - 1].isValid())
3068 MatchInfo[I - 1] = TmpInst->getOperand(I).getReg();
3075 all_of(MatchInfo, [](Register Reg) { return !!Reg; });
3079 MachineInstr &MI, SmallVectorImpl<Register> &MatchInfo) {
3088 for (Register &Reg : MatchInfo) {
3092 Builder.buildBuildVector(MI.getOperand(0).getReg(), MatchInfo);
3097 MachineInstr &MI, std::tuple<Register, Register> &MatchInfo) {
3099 std::tie(SubLHS, SubRHS) = MatchInfo;
3105 MachineInstr &MI, InstructionStepsMatchInfo &MatchInfo) {
3110 // On success, MatchInfo is populated with the new instructions. These are
3208 MatchInfo = InstructionStepsMatchInfo({LogicSteps, HandSteps});
3213 MachineInstr &MI, InstructionStepsMatchInfo &MatchInfo) {
3214 assert(MatchInfo.InstrsToBuild.size() &&
3216 for (auto &InstrToBuild : MatchInfo.InstrsToBuild) {
3227 MachineInstr &MI, std::tuple<Register, int64_t> &MatchInfo) {
3240 MatchInfo = std::make_tuple(Src, ShlCst);
3245 MachineInstr &MI, std::tuple<Register, int64_t> &MatchInfo) {
3249 std::tie(Src, ShiftAmt) = MatchInfo;
3257 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
3271 MatchInfo = [=](MachineIRBuilder &B) {
3504 MachineInstr &MI, std::pair<Register, Register> &MatchInfo) {
3507 Register &X = MatchInfo.first;
3508 Register &Y = MatchInfo.second;
3535 MachineInstr &MI, std::pair<Register, Register> &MatchInfo) {
3538 std::tie(X, Y) = MatchInfo;
3909 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4011 MatchInfo = [=](MachineIRBuilder &MIB) {
4226 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4227 applyBuildFnNoErase(MI, MatchInfo);
4232 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4233 MatchInfo(Builder);
4237 BuildFnTy &MatchInfo) {
4283 MatchInfo = [=](MachineIRBuilder &B) {
4344 int64_t &MatchInfo) {
4410 MatchInfo =
4421 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4458 MatchInfo = [=](MachineIRBuilder &B) { B.buildInstr(Op, {Dst}, {LHS}); };
4464 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4486 MatchInfo = [=, &MI](MachineIRBuilder &B) {
4499 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4518 MatchInfo = [=](MachineIRBuilder &B) {
4528 BuildFnTy &MatchInfo) {
4556 MatchInfo = [=](MachineIRBuilder &B) {
4565 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4605 MatchInfo = [=](MachineIRBuilder &B) {
4614 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
4640 MatchInfo = [=](MachineIRBuilder &B) {
4662 MatchInfo = [=](MachineIRBuilder &B) {
4737 BuildFnTy &MatchInfo) {
4746 MatchInfo = [=, &MI](MachineIRBuilder &B) {
4762 BuildFnTy &MatchInfo) {
4772 MatchInfo = [=, &MI](MachineIRBuilder &B) {
4793 BuildFnTy &MatchInfo) {
4809 MatchInfo = [=, &MI](MachineIRBuilder &B) {
4820 BuildFnTy &MatchInfo) {
4838 if (matchReassocFoldConstantsInSubTree(PtrAdd, LHS, RHS, MatchInfo))
4842 if (matchReassocConstantInnerLHS(PtrAdd, LHS, RHS, MatchInfo))
4846 if (matchReassocConstantInnerRHS(PtrAdd, RHS, MatchInfo))
4853 BuildFnTy &MatchInfo) {
4872 MatchInfo = [=](MachineIRBuilder &B) {
4881 MatchInfo = [=](MachineIRBuilder &B) {
4893 BuildFnTy &MatchInfo) {
4901 if (tryReassocBinOp(Opc, DstReg, LHSReg, RHSReg, MatchInfo))
4903 if (tryReassocBinOp(Opc, DstReg, RHSReg, LHSReg, MatchInfo))
4908 bool CombinerHelper::matchConstantFoldCastOp(MachineInstr &MI, APInt &MatchInfo) {
4913 MatchInfo = *MaybeCst;
4920 bool CombinerHelper::matchConstantFoldBinOp(MachineInstr &MI, APInt &MatchInfo) {
4926 MatchInfo = *MaybeCst;
4930 bool CombinerHelper::matchConstantFoldFPBinOp(MachineInstr &MI, ConstantFP* &MatchInfo) {
4936 MatchInfo =
4942 ConstantFP *&MatchInfo) {
4962 MatchInfo = ConstantFP::get(MI.getMF()->getFunction().getContext(), Op1F);
4967 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
5044 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5057 bool CombinerHelper::matchMulOBy2(MachineInstr &MI, BuildFnTy &MatchInfo) {
5064 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5075 bool CombinerHelper::matchMulOBy0(MachineInstr &MI, BuildFnTy &MatchInfo) {
5086 MatchInfo = [=](MachineIRBuilder &B) {
5093 bool CombinerHelper::matchAddEToAddO(MachineInstr &MI, BuildFnTy &MatchInfo) {
5102 MatchInfo = [&](MachineIRBuilder &B) {
5127 BuildFnTy &MatchInfo) {
5143 MatchInfo = [=](MachineIRBuilder &B) { B.buildCopy(Dst, ReplaceReg); };
5160 MatchInfo = [=](MachineIRBuilder &B) {
5599 BuildFnTy &MatchInfo) {
5634 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5644 bool CombinerHelper::matchFsubToFneg(MachineInstr &MI, Register &MatchInfo) {
5648 MatchInfo = MI.getOperand(2).getReg();
5668 void CombinerHelper::applyFsubToFneg(MachineInstr &MI, Register &MatchInfo) {
5671 Dst, Builder.buildFCanonicalize(MRI.getType(Dst), MatchInfo).getReg(0));
5725 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
5750 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5761 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5773 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
5804 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5819 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5832 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
5884 MatchInfo = [=, &MI](MachineIRBuilder &B) {
5897 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
5946 MatchInfo = [=](MachineIRBuilder &B) {
5966 MatchInfo = [=](MachineIRBuilder &B) {
5987 MatchInfo = [=](MachineIRBuilder &B) {
6007 MatchInfo = [=](MachineIRBuilder &B) {
6023 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
6051 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6062 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6075 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
6095 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6110 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6122 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
6141 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6157 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6173 MachineInstr &MI, std::function<void(MachineIRBuilder &)> &MatchInfo) {
6205 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6221 MatchInfo = [=, &MI](MachineIRBuilder &B) {
6276 Register &MatchInfo) {
6301 MatchInfo = Lo;
6302 return MRI.getType(MatchInfo) == DstVecTy;
6313 MatchInfo = Lo;
6314 return MRI.getType(MatchInfo) == DstVecTy;
6322 Register &MatchInfo) {
6326 m_GBitcast(m_GBuildVector(m_Reg(MatchInfo), m_Reg()))))
6329 return MRI.getType(MatchInfo) == MRI.getType(MI.getOperand(0).getReg());
6333 Register &MatchInfo) {
6338 m_GLShr(m_GBitcast(m_GBuildVector(m_Reg(), m_Reg(MatchInfo))),
6342 LLT MatchTy = MRI.getType(MatchInfo);
6409 BuildFnTy &MatchInfo) {
6457 MatchInfo = [=](MachineIRBuilder &B) {
6464 BuildFnTy &MatchInfo) {
6475 return matchFPSelectToMinMax(Dst, Cond, TrueVal, FalseVal, MatchInfo);
6479 BuildFnTy &MatchInfo) {
6503 MatchInfo = [=](MachineIRBuilder &B) {
6681 BuildFnTy &MatchInfo) {
6711 MatchInfo = [=](MachineIRBuilder &B) {
6720 MatchInfo = [=](MachineIRBuilder &B) {
6729 MatchInfo = [=](MachineIRBuilder &B) {
6740 MatchInfo = [=](MachineIRBuilder &B) {
6751 MatchInfo = [=](MachineIRBuilder &B) {
6762 MatchInfo = [=](MachineIRBuilder &B) {
6773 MatchInfo = [=](MachineIRBuilder &B) {
6786 MatchInfo = [=](MachineIRBuilder &B) {
6797 MatchInfo = [=](MachineIRBuilder &B) {
6813 BuildFnTy &MatchInfo) {
6835 MatchInfo = [=](MachineIRBuilder &B) {
6848 MatchInfo = [=](MachineIRBuilder &B) {
6860 MatchInfo = [=](MachineIRBuilder &B) {
6876 MatchInfo = [=](MachineIRBuilder &B) {
6894 BuildFnTy &MatchInfo) {
6936 MatchInfo = [=](MachineIRBuilder &B) { B.buildUMax(DstReg, True, False); };
6943 MatchInfo = [=](MachineIRBuilder &B) { B.buildSMax(DstReg, True, False); };
6950 MatchInfo = [=](MachineIRBuilder &B) { B.buildUMin(DstReg, True, False); };
6957 MatchInfo = [=](MachineIRBuilder &B) { B.buildSMin(DstReg, True, False); };
6965 bool CombinerHelper::matchSelect(MachineInstr &MI, BuildFnTy &MatchInfo) {
6968 if (tryFoldSelectOfConstants(Select, MatchInfo))
6971 if (tryFoldBoolSelectToLogic(Select, MatchInfo))
6982 BuildFnTy &MatchInfo) {
7108 MatchInfo = [=](MachineIRBuilder &B) {
7141 BuildFnTy &MatchInfo) {
7190 MatchInfo = [=](MachineIRBuilder &B) {
7215 bool CombinerHelper::matchAnd(MachineInstr &MI, BuildFnTy &MatchInfo) {
7218 if (tryFoldAndOrOrICmpsUsingRanges(And, MatchInfo))
7221 if (tryFoldLogicOfFCmps(And, MatchInfo))
7227 bool CombinerHelper::matchOr(MachineInstr &MI, BuildFnTy &MatchInfo) {
7230 if (tryFoldAndOrOrICmpsUsingRanges(Or, MatchInfo))
7233 if (tryFoldLogicOfFCmps(Or, MatchInfo))
7239 bool CombinerHelper::matchAddOverflow(MachineInstr &MI, BuildFnTy &MatchInfo) {
7254 MatchInfo = [=](MachineIRBuilder &B) {
7264 MatchInfo = [=](MachineIRBuilder &B) {
7270 MatchInfo = [=](MachineIRBuilder &B) {
7285 MatchInfo = [=](MachineIRBuilder &B) {
7294 MatchInfo = [=](MachineIRBuilder &B) {
7316 MatchInfo = [=](MachineIRBuilder &B) {
7323 MatchInfo = [=](MachineIRBuilder &B) {
7348 MatchInfo = [=](MachineIRBuilder &B) {
7356 MatchInfo = [=](MachineIRBuilder &B) {
7371 MatchInfo = [=](MachineIRBuilder &B) {
7387 MatchInfo = [=](MachineIRBuilder &B) {
7395 MatchInfo = [=](MachineIRBuilder &B) {
7407 BuildFnTy &MatchInfo) {
7409 MatchInfo(Builder);
7462 BuildFnTy &MatchInfo) {
7473 MatchInfo = [=](MachineIRBuilder &B) { B.buildCopy(Dst, Src); };
7479 MatchInfo = [=](MachineIRBuilder &B) {
7487 MatchInfo = [=](MachineIRBuilder &B) { B.buildSExt(Dst, Src); };
7495 BuildFnTy &MatchInfo) {
7506 MatchInfo = [=](MachineIRBuilder &B) { B.buildCopy(Dst, Src); };
7512 MatchInfo = [=](MachineIRBuilder &B) {
7520 MatchInfo = [=](MachineIRBuilder &B) {
7530 BuildFnTy &MatchInfo) {
7543 MatchInfo = [=](MachineIRBuilder &B) { B.buildSExt(Dst, Src); };