[llvm] [RISCV] Compress shxadd to qc.c.muliadd when rd = rs2 (PR #155843)
Sudharsan Veeravalli via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 28 18:08:24 PDT 2025
https://github.com/svs-quic updated https://github.com/llvm/llvm-project/pull/155843
>From 8f146b20dccc48b40b6ad4bf0dbf0e85f8e5a25e Mon Sep 17 00:00:00 2001
From: Sudharsan Veeravalli <quic_svs at quicinc.com>
Date: Thu, 28 Aug 2025 19:47:09 +0530
Subject: [PATCH 1/2] [RISCV] Compress shxadd to qc.c.muliadd when rd = rs2
Do this when Zba and Xqciac are both enabled.
---
llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td | 9 +++++++
llvm/test/MC/RISCV/xqciac-valid.s | 26 ++++++++++++++++-----
2 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
index 2c64b0c220fba..5c267bf3c8afc 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
@@ -1743,6 +1743,15 @@ def : CompressPat<(QC_MULIADD GPRC:$rd, GPRC:$rs1, uimm5:$imm5),
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, uimm5:$imm5)>;
}
+let Predicates = [HasVendorXqciac, HasStdExtZba, IsRV32] in {
+def : CompressPat<(SH1ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
+ (QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 2)>;
+def : CompressPat<(SH2ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
+ (QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 4)>;
+def : CompressPat<(SH3ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
+ (QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 8)>;
+}
+
let isCompressOnly = true, Predicates = [HasVendorXqcibi, IsRV32] in {
def : CompressPat<(QC_E_BEQI GPRNoX0:$rs1, simm5nonzero:$imm5, bare_simm13_lsb0:$imm12),
(QC_BEQI GPRNoX0:$rs1, simm5nonzero:$imm5, bare_simm13_lsb0:$imm12)>;
diff --git a/llvm/test/MC/RISCV/xqciac-valid.s b/llvm/test/MC/RISCV/xqciac-valid.s
index 1afebc75cb45a..dd0848358c149 100644
--- a/llvm/test/MC/RISCV/xqciac-valid.s
+++ b/llvm/test/MC/RISCV/xqciac-valid.s
@@ -1,13 +1,13 @@
# Xqciac - Qualcomm uC Load-Store Address Calculation Extension
-# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac -M no-aliases -show-encoding \
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac,+zba -M no-aliases -show-encoding \
# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-NOALIAS %s
-# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac < %s \
-# RUN: | llvm-objdump --mattr=+experimental-xqciac -M no-aliases --no-print-imm-hex -d - \
+# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac,+zba < %s \
+# RUN: | llvm-objdump --mattr=+experimental-xqciac,+zba -M no-aliases --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
-# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac -show-encoding \
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqciac,+zba -show-encoding \
# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-ALIAS %s
-# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac < %s \
-# RUN: | llvm-objdump --mattr=+experimental-xqciac --no-print-imm-hex -d - \
+# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqciac,+zba < %s \
+# RUN: | llvm-objdump --mattr=+experimental-xqciac,+zba --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
# CHECK-NOALIAS: qc.c.muliadd a0, a1, 0
@@ -58,3 +58,17 @@ qc.shladd x10, x11, x12, 31
# CHECK-ENC: encoding: [0xaa,0x21]
qc.muliadd x10, x11, 16
+# CHECK-NOALIAS: qc.c.muliadd a0, a1, 2
+# CHECK-ALIAS: qc.muliadd a0, a1, 2
+# CHECK-ENC: encoding: [0x8a,0x25]
+sh1add x10, x11, x10
+
+# CHECK-NOALIAS: qc.c.muliadd a0, a1, 4
+# CHECK-ALIAS: qc.muliadd a0, a1, 4
+# CHECK-ENC: encoding: [0x8a,0x29]
+sh2add x10, x11, x10
+
+# CHECK-NOALIAS: qc.c.muliadd a0, a1, 8
+# CHECK-ALIAS: qc.muliadd a0, a1, 8
+# CHECK-ENC: encoding: [0x8a,0x31]
+sh3add x10, x11, x10
>From a5ef71b2abeed5e463c9a1f74f2a1aa09d372c88 Mon Sep 17 00:00:00 2001
From: Sudharsan Veeravalli <quic_svs at quicinc.com>
Date: Fri, 29 Aug 2025 06:37:58 +0530
Subject: [PATCH 2/2] Add isCompressOnly, update test
---
llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td | 2 +-
llvm/test/CodeGen/RISCV/xqciac.ll | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
index 5c267bf3c8afc..8fbcca6ad279a 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
@@ -1743,7 +1743,7 @@ def : CompressPat<(QC_MULIADD GPRC:$rd, GPRC:$rs1, uimm5:$imm5),
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, uimm5:$imm5)>;
}
-let Predicates = [HasVendorXqciac, HasStdExtZba, IsRV32] in {
+let isCompressOnly = true, Predicates = [HasVendorXqciac, HasStdExtZba, IsRV32] in {
def : CompressPat<(SH1ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
(QC_C_MULIADD GPRC:$rd, GPRC:$rs1, 2)>;
def : CompressPat<(SH2ADD GPRC:$rd, GPRC:$rs1, GPRC:$rd),
diff --git a/llvm/test/CodeGen/RISCV/xqciac.ll b/llvm/test/CodeGen/RISCV/xqciac.ll
index 934deb5a0c327..6d5e4a78af4f0 100644
--- a/llvm/test/CodeGen/RISCV/xqciac.ll
+++ b/llvm/test/CodeGen/RISCV/xqciac.ll
@@ -259,7 +259,7 @@ define dso_local i32 @shxadd(i32 %a, i32 %b) local_unnamed_addr #0 {
;
; RV32IZBAMXQCIAC-LABEL: shxadd:
; RV32IZBAMXQCIAC: # %bb.0: # %entry
-; RV32IZBAMXQCIAC-NEXT: sh1add a0, a1, a0
+; RV32IZBAMXQCIAC-NEXT: qc.muliadd a0, a1, 2
; RV32IZBAMXQCIAC-NEXT: ret
entry:
%mul = mul nsw i32 %b, 2
More information about the llvm-commits
mailing list