aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Nacke <kai@redstar.de>2022-08-13 23:38:59 -0400
committerKai Nacke <kai@redstar.de>2022-11-13 11:07:46 -0500
commit3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4 (patch)
tree2b17b49fa270eecd21d8d2abe64108f76fc1397b
parentb9172dc551bb65d92be71b392c33ef24c811ac7b (diff)
downloadllvm-3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4.zip
llvm-3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4.tar.gz
llvm-3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4.tar.bz2
[m88k] Add pattern to match LDA
-rw-r--r--llvm/lib/Target/M88k/M88kInstrInfo.td5
-rw-r--r--llvm/test/CodeGen/M88k/shift.ll33
2 files changed, 36 insertions, 2 deletions
diff --git a/llvm/lib/Target/M88k/M88kInstrInfo.td b/llvm/lib/Target/M88k/M88kInstrInfo.td
index 531574d..1549af2 100644
--- a/llvm/lib/Target/M88k/M88kInstrInfo.td
+++ b/llvm/lib/Target/M88k/M88kInstrInfo.td
@@ -808,6 +808,11 @@ let mayStore = 1 in {
defm XMEM : Xmem<>;
+def : Pat<(add GPR:$rs1, (shl GPR:$rs2, (i32 1))), (LDAhs GPR:$rs1, GPR:$rs2)>;
+def : Pat<(add GPR:$rs1, (shl GPR:$rs2, (i32 2))), (LDAws GPR:$rs1, GPR:$rs2)>;
+let Predicates = [MC88110] in
+ def : Pat<(add GPR:$rs1, (shl GPR:$rs2, (i32 3))), (LDAxs GPR:$rs1, GPR:$rs2)>;
+
// GlobalAddress, ExternalSymbol, Jumptable, ConstantPool
def : Pat<(m88k_hi tglobaladdr:$dst), (ORriu (i32 R0), tglobaladdr:$dst)>;
diff --git a/llvm/test/CodeGen/M88k/shift.ll b/llvm/test/CodeGen/M88k/shift.ll
index 914dd23..4915ac2 100644
--- a/llvm/test/CodeGen/M88k/shift.ll
+++ b/llvm/test/CodeGen/M88k/shift.ll
@@ -1,7 +1,7 @@
; Test shift instructions.
;
-; RUN: llc < %s -mtriple=m88k-openbsd -mcpu=mc88100 -verify-machineinstrs | FileCheck %s
-; RUN: llc < %s -mtriple=m88k-openbsd -mcpu=mc88110 -verify-machineinstrs | FileCheck %s
+; RUN: llc < %s -mtriple=m88k-openbsd -mcpu=mc88100 -verify-machineinstrs | FileCheck --check-prefixes=CHECK,MC88100 %s
+; RUN: llc < %s -mtriple=m88k-openbsd -mcpu=mc88110 -verify-machineinstrs | FileCheck --check-prefixes=CHECK,MC88110 %s
; Check two register operands.
define i32 @f1(i32 %a, i32 %b) {
@@ -136,5 +136,34 @@ define i32 @f14(i32 %a) {
ret i32 %res
}
+define i32 @f15(i32 %a, i32 %b) {
+; CHECK-LABEL: f15:
+; CHECK: jmp.n %r1
+; CHECK: lda.h %r2, %r2[%r3]
+ %shl = shl i32 %b, 1
+ %res = add i32 %a, %shl
+ ret i32 %res
+}
+
+define i32 @f16(i32 %a, i32 %b) {
+; CHECK-LABEL: f16:
+; CHECK: jmp.n %r1
+; CHECK: lda %r2, %r2[%r3]
+ %shl = shl i32 %b, 2
+ %res = add i32 %a, %shl
+ ret i32 %res
+}
+
+define i32 @f17(i32 %a, i32 %b) {
+; CHECK-LABEL: f17:
+; MC88100: mak %r3, %r3, 0<3>
+; CHECK: jmp.n %r1
+; MC88100: addu %r2, %r2, %r3
+; MC88110: lda.x %r2, %r2[%r3]
+ %shl = shl i32 %b, 3
+ %res = add i32 %a, %shl
+ ret i32 %res
+}
+
declare i32 @llvm.fshr.i32(i32, i32, i32)
declare i32 @llvm.fshl.i32(i32, i32, i32)