aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Nacke <kai@redstar.de>2022-09-18 20:30:57 -0400
committerKai Nacke <kai@redstar.de>2022-11-13 11:07:59 -0500
commit47ea0e89486918fec7603aea838b83bc90853a2a (patch)
treec22e4af45afdfc903406bd0537b8cbfb1d479bb6
parentc5d4c8d80e4b17c5dd565c3eb6740973bcc291ae (diff)
downloadllvm-47ea0e89486918fec7603aea838b83bc90853a2a.zip
llvm-47ea0e89486918fec7603aea838b83bc90853a2a.tar.gz
llvm-47ea0e89486918fec7603aea838b83bc90853a2a.tar.bz2
[m88k] Try to use a tree matcher in combiner.
llvm-tblgen crahes when using more than 2 instructions. :-(
-rw-r--r--llvm/lib/Target/M88k/GISel/M88kPostLegalizerCombiner.cpp2
-rw-r--r--llvm/lib/Target/M88k/M88kCombine.td12
2 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/Target/M88k/GISel/M88kPostLegalizerCombiner.cpp b/llvm/lib/Target/M88k/GISel/M88kPostLegalizerCombiner.cpp
index adb63b19..a20659a 100644
--- a/llvm/lib/Target/M88k/GISel/M88kPostLegalizerCombiner.cpp
+++ b/llvm/lib/Target/M88k/GISel/M88kPostLegalizerCombiner.cpp
@@ -226,7 +226,7 @@ bool matchSubAddFromSubICmp(MachineInstr &MI, MachineRegisterInfo &MRI,
// Match
// Unused, CarryBit = G_USUBU SrcB, SrcC
// Carry = G_ZEXT CarryBit
-// Dst = G_UADD SrcA, Carry
+// Dst = G_ADD SrcA, Carry
// The returned MatchInfo transforms this sequence into
// Unused, Carry = G_USUBU SrcB, SrcC
// Dst, UnusedCarry = G_UADDE SrcA, Zero, Carry
diff --git a/llvm/lib/Target/M88k/M88kCombine.td b/llvm/lib/Target/M88k/M88kCombine.td
index c2d4456..d11e930 100644
--- a/llvm/lib/Target/M88k/M88kCombine.td
+++ b/llvm/lib/Target/M88k/M88kCombine.td
@@ -98,15 +98,17 @@ def subsub_from_subicmp : GICombineRule<
// Dst, UnusedCarry = G_USUBE SrcA, Zero, Carry
// with SrcB' and SrcC' derived from SrcB and SrcC.
def subadd_from_subicmp : GICombineRule<
- (defs root:$root, build_fn_matchinfo:$matchinfo),
- (match (wip_match_opcode G_SUB):$root,
- [{ return matchSubAddFromSubICmp(*${root}, MRI, ${matchinfo}); }]),
- (apply [{ Helper.applyBuildFn(*${root}, ${matchinfo}); }])>;
+ (defs root:$dst, build_fn_matchinfo:$matchinfo),
+ (match //(G_ICMP $icmp, $cc, $src2, $src3),
+ (G_ZEXT $zext, $icmp),
+ (G_SUB $dst, $src1, $zext):$submi,
+ [{ return matchSubAddFromSubICmp(*${submi}, MRI, ${matchinfo}); }]),
+ (apply [{ Helper.applyBuildFn(*${submi}, ${matchinfo}); }])>;
// Combine
// Unused, CarryBit = G_USUBU SrcB, SrcC
// Carry = G_ZEXT CarryBit
-// Dst = G_UADD SrcA, Carry
+// Dst = G_ADD SrcA, Carry
// into the instruction sequence
// Unused, Carry = G_USUBO SrcB, SrcC
// Dst, UnusedCarry = G_UADDE SrcA, Zero, Carry