[llvm] [GlobalISel] Add and use a m_GAddLike pattern matcher. NFC (PR #125435)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 2 18:11:14 PST 2025
================
@@ -418,26 +442,30 @@ inline bind_ty<const ConstantFP *> m_GFCst(const ConstantFP *&C) { return C; }
// General helper for all the binary generic MI such as G_ADD/G_SUB etc
template <typename LHS_P, typename RHS_P, unsigned Opcode,
- bool Commutable = false>
+ bool Commutable = false, unsigned Flags = MachineInstr::NoFlags>
struct BinaryOp_match {
LHS_P L;
RHS_P R;
BinaryOp_match(const LHS_P &LHS, const RHS_P &RHS) : L(LHS), R(RHS) {}
template <typename OpTy>
bool match(const MachineRegisterInfo &MRI, OpTy &&Op) {
- MachineInstr *TmpMI;
+ const MachineInstr *TmpMI;
if (mi_match(Op, MRI, m_MInstr(TmpMI))) {
if (TmpMI->getOpcode() == Opcode && TmpMI->getNumOperands() == 3) {
- return (L.match(MRI, TmpMI->getOperand(1).getReg()) &&
- R.match(MRI, TmpMI->getOperand(2).getReg())) ||
- // NOTE: When trying the alternative operand ordering
- // with a commutative operation, it is imperative to always run
- // the LHS sub-pattern (i.e. `L`) before the RHS sub-pattern
- // (i.e. `R`). Otherwsie, m_DeferredReg/Type will not work as
- // expected.
- (Commutable && (L.match(MRI, TmpMI->getOperand(2).getReg()) &&
- R.match(MRI, TmpMI->getOperand(1).getReg())));
+ if (!(L.match(MRI, TmpMI->getOperand(1).getReg()) &&
+ R.match(MRI, TmpMI->getOperand(2).getReg())) &&
+ // NOTE: When trying the alternative operand ordering
+ // with a commutative operation, it is imperative to always run
+ // the LHS sub-pattern (i.e. `L`) before the RHS sub-pattern
+ // (i.e. `R`). Otherwsie, m_DeferredReg/Type will not work as
+ // expected.
+ !(Commutable && (L.match(MRI, TmpMI->getOperand(2).getReg()) &&
+ R.match(MRI, TmpMI->getOperand(1).getReg()))))
+ return false;
+ if (Flags == MachineInstr::NoFlags)
+ return true;
----------------
arsenm wrote:
Don't see why this is a special case
https://github.com/llvm/llvm-project/pull/125435
More information about the llvm-commits
mailing list