[PATCH] D45583: [RISCV] Add c.mv rs1, rs2 pattern for addi rs1, rs2, 0

Sameer AbuAsal via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 12 11:28:06 PDT 2018


sabuasal created this revision.
sabuasal added reviewers: asb, apazos, zzheng, mgrang, shiva0217.
Herald added subscribers: llvm-commits, kito-cheng, niosHD, jordy.potman.lists, simoncook, johnrusso, rbar.

GCC compresses the pseudo instruction "mv rd, rs",  which is an alias of
"addi rd, rs, 0", to "c.mv rd, rs".

In LLVM we rely on the canonical MC instruction (MCInst) to do our compression
checks and since there is no rule to compress "addi rd, rs, 0" --> "c.mv
rd, rs" we lose this compression opportunity to gcc.

In this patch we fix that by adding an addi to c.mv compression pattern, the
 instruction "mv rd, rs" will be compressed to "c.mv rd, rs" just like
 gcc does.


Repository:
  rL LLVM

https://reviews.llvm.org/D45583

Files:
  lib/Target/RISCV/RISCVInstrInfoC.td
  test/MC/RISCV/compress-rv32i.s


Index: test/MC/RISCV/compress-rv32i.s
===================================================================
--- test/MC/RISCV/compress-rv32i.s
+++ test/MC/RISCV/compress-rv32i.s
@@ -20,6 +20,12 @@
 # RUN: | llvm-objdump  -triple riscv64 -mattr=+c -d -riscv-no-aliases - \
 # RUN: | FileCheck -check-prefixes=CHECK-BYTES,CHECK-INST %s
 
+# CHECK-BYTES: 2e 85
+# CHECK-ALIAS: add a0, zero, a1
+# CHECK-INST: c.mv a0, a1
+# CHECK: # encoding:  [0x2e,0x85]
+addi a0, a1, 0
+
 # CHECK-BYTES: e0 1f
 # CHECK-ALIAS: addi s0, sp, 1020
 # CHECK-INST: c.addi4spn s0, sp, 1020
Index: lib/Target/RISCV/RISCVInstrInfoC.td
===================================================================
--- lib/Target/RISCV/RISCVInstrInfoC.td
+++ lib/Target/RISCV/RISCVInstrInfoC.td
@@ -675,6 +675,8 @@
                   (C_MV GPRNoX0:$rs1, GPRNoX0:$rs2)>;
 def : CompressPat<(ADD GPRNoX0:$rs1, GPRNoX0:$rs2, X0),
                   (C_MV GPRNoX0:$rs1, GPRNoX0:$rs2)>;
+def : CompressPat<(ADDI GPRNoX0:$rs1, GPRNoX0:$rs2, 0),
+                  (C_MV GPRNoX0:$rs1, GPRNoX0:$rs2)>;
 def : CompressPat<(EBREAK), (C_EBREAK)>;
 def : CompressPat<(JALR X1, GPRNoX0:$rs1, 0),
                   (C_JALR GPRNoX0:$rs1)>;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45583.142224.patch
Type: text/x-patch
Size: 1186 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180412/771c8511/attachment.bin>


More information about the llvm-commits mailing list