Skip to content

Commit 46dc8ef

Browse files
authored
[RISCV] Compress shxadd to qc.c.muliadd when rd = rs2 (#155843)
Do this when Zba and Xqciac are both enabled.
1 parent c9faedd commit 46dc8ef

File tree

3 files changed

+36
-13
lines changed

3 files changed

+36
-13
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,10 +1738,19 @@ def : CompressPat<(QC_E_XORAI GPRNoX0:$rd, simm12:$imm),
17381738
(XORI GPRNoX0:$rd, GPRNoX0:$rd, simm12:$imm)>;
17391739
} // let isCompressOnly = true, Predicates = [HasVendorXqcilia, IsRV32]
17401740

1741-
let Predicates = [HasVendorXqciac, IsRV32] in {
1741+
let isCompressOnly = true, Predicates = [HasVendorXqciac, IsRV32] in {
17421742
def : CompressPat<(QC_MULIADD GPRC:$rd, GPRC:$rs1, uimm5:$imm5),
17431743
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, uimm5:$imm5)>;
1744-
}
1744+
} // isCompressOnly = true, Predicates = [HasVendorXqciac, IsRV32]
1745+
1746+
let isCompressOnly = true, Predicates = [HasVendorXqciac, HasStdExtZba, IsRV32] in {
1747+
def : CompressPat<(SH1ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
1748+
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 2)>;
1749+
def : CompressPat<(SH2ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
1750+
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 4)>;
1751+
def : CompressPat<(SH3ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
1752+
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 8)>;
1753+
} // isCompressOnly = true, Predicates = [HasVendorXqciac, HasStdExtZba, IsRV32]
17451754

17461755
let isCompressOnly = true, Predicates = [HasVendorXqcibi, IsRV32] in {
17471756
def : CompressPat<(QC_E_BEQI GPRNoX0:$rs1, simm5nonzero:$imm5, bare_simm13_lsb0:$imm12),

llvm/test/CodeGen/RISCV/xqciac.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ define dso_local i32 @shxadd(i32 %a, i32 %b) local_unnamed_addr #0 {
259259
;
260260
; RV32IZBAMXQCIAC-LABEL: shxadd:
261261
; RV32IZBAMXQCIAC: # %bb.0: # %entry
262-
; RV32IZBAMXQCIAC-NEXT: sh1add a0, a1, a0
262+
; RV32IZBAMXQCIAC-NEXT: qc.c.muliadd a0, a1, 2
263263
; RV32IZBAMXQCIAC-NEXT: ret
264264
entry:
265265
%mul = mul nsw i32 %b, 2

llvm/test/MC/RISCV/xqciac-valid.s

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
# Xqciac - Qualcomm uC Load-Store Address Calculation Extension
2-
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac -M no-aliases -show-encoding \
2+
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac,+zba -M no-aliases -show-encoding \
33
# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-NOALIAS %s
4-
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac < %s \
5-
# RUN: | llvm-objdump --mattr=+experimental-xqciac -M no-aliases --no-print-imm-hex -d - \
4+
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac,+zba < %s \
5+
# RUN: | llvm-objdump --mattr=+experimental-xqciac,+zba -M no-aliases --no-print-imm-hex -d - \
66
# RUN: | FileCheck -check-prefix=CHECK-INST %s
7-
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac -show-encoding \
7+
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac,+zba -show-encoding \
88
# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-ALIAS %s
9-
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac < %s \
10-
# RUN: | llvm-objdump --mattr=+experimental-xqciac --no-print-imm-hex -d - \
9+
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac,+zba < %s \
10+
# RUN: | llvm-objdump --mattr=+experimental-xqciac,+zba --no-print-imm-hex -d - \
1111
# RUN: | FileCheck -check-prefix=CHECK-INST %s
1212

1313
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 0
14-
# CHECK-ALIAS: qc.muliadd a0, a1, 0
14+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 0
1515
# CHECK-ENC: encoding: [0x8a,0x21]
1616
qc.c.muliadd x10, x11, 0
1717

1818
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 31
19-
# CHECK-ALIAS: qc.muliadd a0, a1, 31
19+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 31
2020
# CHECK-ENC: encoding: [0xea,0x3d]
2121
qc.c.muliadd x10, x11, 31
2222

2323
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 16
24-
# CHECK-ALIAS: qc.muliadd a0, a1, 16
24+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 16
2525
# CHECK-ENC: encoding: [0xaa,0x21]
2626
qc.c.muliadd x10, x11, 16
2727

@@ -54,7 +54,21 @@ qc.shladd x10, x11, x12, 31
5454
# Check that compress pattern for qc.muliadd works
5555

5656
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 16
57-
# CHECK-ALIAS: qc.muliadd a0, a1, 16
57+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 16
5858
# CHECK-ENC: encoding: [0xaa,0x21]
5959
qc.muliadd x10, x11, 16
6060

61+
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 2
62+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 2
63+
# CHECK-ENC: encoding: [0x8a,0x25]
64+
sh1add x10, x11, x10
65+
66+
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 4
67+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 4
68+
# CHECK-ENC: encoding: [0x8a,0x29]
69+
sh2add x10, x11, x10
70+
71+
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 8
72+
# CHECK-ALIAS: qc.c.muliadd a0, a1, 8
73+
# CHECK-ENC: encoding: [0x8a,0x31]
74+
sh3add x10, x11, x10

0 commit comments

Comments
 (0)