diff options
author | Kai Nacke <kai@redstar.de> | 2022-08-13 23:38:59 -0400 |
---|---|---|
committer | Kai Nacke <kai@redstar.de> | 2022-11-13 11:07:46 -0500 |
commit | 3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4 (patch) | |
tree | 2b17b49fa270eecd21d8d2abe64108f76fc1397b | |
parent | b9172dc551bb65d92be71b392c33ef24c811ac7b (diff) | |
download | llvm-3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4.zip llvm-3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4.tar.gz llvm-3c0cf2ffdedf4c78f3cce5072321fbbc8b29c0e4.tar.bz2 |
[m88k] Add pattern to match LDA
-rw-r--r-- | llvm/lib/Target/M88k/M88kInstrInfo.td | 5 | ||||
-rw-r--r-- | llvm/test/CodeGen/M88k/shift.ll | 33 |
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) |