-
Notifications
You must be signed in to change notification settings - Fork 15.6k
[RISCV] Add some compress patterns for Xqci instructions #139273
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There are some patterns that have not been added that will need changes to the CompressInstEmitter. Those will be handled in later patches.
|
@llvm/pr-subscribers-mc @llvm/pr-subscribers-backend-risc-v Author: Sudharsan Veeravalli (svs-quic) ChangesThere are some patterns that have not been added that will need changes to the CompressInstEmitter. Those will be handled in later patches. Full diff: https://github.com/llvm/llvm-project/pull/139273.diff 7 Files Affected:
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
index 5ff140ce2e4b4..a8ebbd9090cfb 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td
@@ -1407,3 +1407,35 @@ let Predicates = [HasVendorXqcibm, IsRV32] in {
def : CompressPat<(QC_EXTU GPRNoX0:$rd, GPRNoX0:$rd, uimm5ge6_plus1:$width, 0),
(QC_C_EXTU GPRNoX0:$rd, uimm5ge6_plus1:$width)>;
}
+
+let Predicates = [HasVendorXqcibm, HasStdExtZbs, IsRV32] in {
+def : CompressPat<(BSETI GPRC:$rs1, GPRC:$rs1, uimmlog2xlennonzero:$shamt),
+ (QC_C_BSETI GPRC:$rs1, uimmlog2xlennonzero:$shamt)>;
+def : CompressPat<(BEXTI GPRC:$rs1, GPRC:$rs1, uimmlog2xlennonzero:$shamt),
+ (QC_C_BEXTI GPRC:$rs1, uimmlog2xlennonzero:$shamt)>;
+} // Predicates = [HasVendorXqcibm, HasStdExtZbs, IsRV32]
+
+let Predicates = [HasVendorXqcilb, IsRV32] in {
+def : CompressPat<(QC_E_J bare_simm12_lsb0:$offset),
+ (C_J bare_simm12_lsb0:$offset)>;
+
+let isCompressOnly = true in
+def : CompressPat<(QC_E_JAL bare_simm12_lsb0:$offset),
+ (C_JAL bare_simm12_lsb0:$offset)>;
+} // Predicates = [HasVendorXqcilb, IsRV32]
+
+let Predicates = [HasVendorXqcili, IsRV32] in {
+def : CompressPat<(QC_LI GPRNoX0:$rd, simm6:$imm),
+ (C_LI GPRNoX0:$rd, simm6:$imm)>;
+
+let isCompressOnly = true in
+def : CompressPat<(QC_E_LI GPRNoX0:$rd, simm6:$imm),
+ (C_LI GPRNoX0:$rd, simm6:$imm)>;
+} // Predicates = [HasVendorXqcili, IsRV32]
+
+let isCompressOnly = true, Predicates = [HasVendorXqcilia, IsRV32] in {
+def : CompressPat<(QC_E_ADDI GPRNoX0:$rs1, GPRNoX0:$rs1, simm6nonzero:$imm),
+ (C_ADDI GPRNoX0:$rs1, simm6nonzero:$imm)>;
+def : CompressPat<(QC_E_ANDI GPRC:$rs1, GPRC:$rs1, simm6:$imm),
+ (C_ANDI GPRC:$rs1, simm6:$imm)>;
+} // let isCompressOnly = true, Predicates = [HasVendorXqcilia, IsRV32]
diff --git a/llvm/test/MC/RISCV/xqcibm-valid.s b/llvm/test/MC/RISCV/xqcibm-valid.s
index e549d5fdfd7d2..4bbf2bc2b01d0 100644
--- a/llvm/test/MC/RISCV/xqcibm-valid.s
+++ b/llvm/test/MC/RISCV/xqcibm-valid.s
@@ -1,13 +1,14 @@
# Xqcibm - Qualcomm uC Bit Manipulation Extension
-# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcibm -M no-aliases -show-encoding \
+# Zbs is needed for checking compress instructions patterns for bexti/bseti
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcibm,+zbs -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-xqcibm < %s \
-# RUN: | llvm-objdump --mattr=+experimental-xqcibm -M no-aliases --no-print-imm-hex -d - \
+# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcibm,+zbs < %s \
+# RUN: | llvm-objdump --mattr=+experimental-xqcibm,+zbs -M no-aliases --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
-# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcibm -show-encoding \
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcibm,+zbs -show-encoding \
# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-ALIAS %s
-# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcibm < %s \
-# RUN: | llvm-objdump --mattr=+experimental-xqcibm --no-print-imm-hex -d - \
+# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcibm,+zbs < %s \
+# RUN: | llvm-objdump --mattr=+experimental-xqcibm,+zbs --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
# CHECK-INST: qc.compress2 t2, t0
@@ -110,11 +111,13 @@ qc.extdpr x1, x4, x15
# CHECK-ENC: encoding: [0x0b,0x33,0x9c,0x13]
qc.extdprh x6, x24, x25
-# CHECK-INST: qc.c.bexti s1, 8
+# CHECK-NOALIAS: qc.c.bexti s1, 8
+# CHECK-ALIAS: bexti s1, s1, 8
# CHECK-ENC: encoding: [0xa1,0x90]
qc.c.bexti x9, 8
-# CHECK-INST: qc.c.bseti a2, 16
+# CHECK-NOALIAS: qc.c.bseti a2, 16
+# CHECK-ALIAS: bseti a2, a2, 16
# CHECK-ENC: encoding: [0x41,0x96]
qc.c.bseti x12, 16
@@ -123,9 +126,19 @@ qc.c.bseti x12, 16
# CHECK-ENC: encoding: [0xfe,0x17]
qc.c.extu x15, 32
-# Check that compress pattern for qc.extu works
+# Check that compress patterns work as expected
# CHECK-NOALIAS: qc.c.extu a1, 11
# CHECK-ALIAS: qc.extu a1, a1, 11, 0
# CHECK-ENC: encoding: [0xaa,0x15]
-qc.extu x11, x11, 11, 0
+qc.extu x11, x11, 11, 0
+
+# CHECK-NOALIAS: qc.c.bexti s1, 8
+# CHECK-ALIAS: bexti s1, s1, 8
+# CHECK-ENC-ZBS: encoding: [0xa1,0x90]
+bexti x9, x9, 8
+
+# CHECK-NOALIAS: qc.c.bseti a2, 16
+# CHECK-ALIAS: bseti a2, a2, 16
+# CHECK-ENC: encoding: [0x41,0x96]
+bseti x12, x12, 16
diff --git a/llvm/test/MC/RISCV/xqcilb-relocations.s b/llvm/test/MC/RISCV/xqcilb-relocations.s
index 66f052283812e..0a5b788a110da 100644
--- a/llvm/test/MC/RISCV/xqcilb-relocations.s
+++ b/llvm/test/MC/RISCV/xqcilb-relocations.s
@@ -9,6 +9,8 @@
.text
+.option exact
+
qc.e.j foo
# RELOC: R_RISCV_CUSTOM195 foo 0x0
# INSTR: qc.e.j foo
@@ -33,6 +35,8 @@ qc.e.j .L1
qc.e.jal .L1
# INSTR:qc.e.jal .L1
+.option noexact
+
.L1:
ret
diff --git a/llvm/test/MC/RISCV/xqcilb-valid.s b/llvm/test/MC/RISCV/xqcilb-valid.s
index 2b871f085438f..4653bfe958772 100644
--- a/llvm/test/MC/RISCV/xqcilb-valid.s
+++ b/llvm/test/MC/RISCV/xqcilb-valid.s
@@ -1,14 +1,14 @@
# Xqcilb - Qualcomm uC Long Branch Extension
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcilb -M no-aliases -show-encoding \
-# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST %s
+# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-NOALIAS %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcilb < %s \
# RUN: | llvm-objdump --mattr=+experimental-xqcilb -M no-aliases --no-print-imm-hex -d - \
-# RUN: | FileCheck -check-prefix=CHECK-OBJ %s
+# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-OBJ-NOALIAS %s
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcilb -show-encoding \
-# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST %s
+# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-ALIAS %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcilb < %s \
# RUN: | llvm-objdump --mattr=+experimental-xqcilb --no-print-imm-hex -d - \
-# RUN: | FileCheck -check-prefix=CHECK-OBJ %s
+# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-OBJ-ALIAS %s
# CHECK-INST: qc.e.j -2147483648
# CHECK-OBJ: qc.e.j 0x80000000
@@ -20,7 +20,18 @@ qc.e.j -2147483648
# CHECK-ENC: encoding: [0x9f,0xcc,0x0e,0xfe,0xff,0x7f]
qc.e.jal 2147483640
-# CHECK-INST: qc.e.jal -116
-# CHECK-OBJ: qc.e.jal 0xffffff98
-# CHECK-ENC: encoding: [0x9f,0xc6,0x0e,0xf8,0xff,0xff]
+# Check that compress patterns work as expected
+
+# CHECK-NOALIAS: c.jal -116
+# CHECK-ALIAS: jal -116
+# CHECK-OBJ-NOALIAS: c.jal 0xffffff98
+# CHECK-OBJ-ALIAS: jal 0xffffff98
+# CHECK-ENC: encoding: [0x71,0x37]
qc.e.jal 0xffffff8c
+
+# CHECK-NOALIAS: c.j 1024
+# CHECK-ALIAS: j 1024
+# CHECK-OBJ-NOALIAS: c.j 0x40e
+# CHECK-OBJ-ALIAS: j 0x40e
+# CHECK-ENC: encoding: [0x01,0xa1]
+qc.e.j 1024
diff --git a/llvm/test/MC/RISCV/xqcili-relocations.s b/llvm/test/MC/RISCV/xqcili-relocations.s
index b7fcb405d27bb..9c709e68334cd 100644
--- a/llvm/test/MC/RISCV/xqcili-relocations.s
+++ b/llvm/test/MC/RISCV/xqcili-relocations.s
@@ -9,6 +9,8 @@
.text
+.option exact
+
qc.li x4, %qc.abs20(foo)
# RELOC: R_RISCV_CUSTOM192 foo 0x0
# INSTR: qc.li tp, %qc.abs20(foo)
@@ -33,6 +35,8 @@ qc.li x7, %qc.abs20(.L1)
qc.e.li x6, .L1
# INSTR: qc.e.li t1, .L1
+.option noexact
+
.L1:
ret
diff --git a/llvm/test/MC/RISCV/xqcili-valid.s b/llvm/test/MC/RISCV/xqcili-valid.s
index c2f1bc2bd0c35..aa2898da3173a 100644
--- a/llvm/test/MC/RISCV/xqcili-valid.s
+++ b/llvm/test/MC/RISCV/xqcili-valid.s
@@ -1,21 +1,18 @@
# Xqcili - Qualcomm uC Load Large Immediate Extension
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcili -M no-aliases -show-encoding \
-# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST %s
+# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-NOALIAS %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcili < %s \
# RUN: | llvm-objdump --mattr=+experimental-xqcili -M no-aliases --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcili -show-encoding \
-# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST %s
+# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-ALIAS %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcili < %s \
# RUN: | llvm-objdump --mattr=+experimental-xqcili --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
-# CHECK-INST: qc.e.li a0, -1
-# CHECK-ENC: encoding: [0x1f,0x05,0xff,0xff,0xff,0xff]
-qc.e.li x10, 4294967295
# CHECK-INST: qc.e.li a0, -2147483648
# CHECK-ENC: encoding: [0x1f,0x05,0x00,0x00,0x00,0x80]
@@ -44,3 +41,15 @@ qc.li x10, 12345
# CHECK-INST: qc.li a0, -12346
# CHECK-ENC: encoding: [0x1b,0xf5,0xc6,0xcf]
qc.li x10, -12346
+
+# Check that compress patterns work as expected
+
+# CHECK-ALIAS: li a0, -1
+# CHECK-NOALIAS: c.li a0, -1
+# CHECK-ENC: encoding: [0x7d,0x55]
+qc.e.li x10, 4294967295
+
+# CHECK-ALIAS: li a0, 31
+# CHECK-NOALIAS: c.li a0, 31
+# CHECK-ENC: encoding: [0x7d,0x45]
+qc.li x10, 31
diff --git a/llvm/test/MC/RISCV/xqcilia-valid.s b/llvm/test/MC/RISCV/xqcilia-valid.s
index 03b20b04e3032..1e4f855cb2b47 100644
--- a/llvm/test/MC/RISCV/xqcilia-valid.s
+++ b/llvm/test/MC/RISCV/xqcilia-valid.s
@@ -1,11 +1,11 @@
# Xqcilia - Qualcomm uC Large Immediate Arithmetic extension
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcilia -M no-aliases -show-encoding \
-# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST %s
+# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-NOALIAS %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcilia < %s \
# RUN: | llvm-objdump --mattr=+experimental-xqcilia -M no-aliases --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xqcilia -show-encoding \
-# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST %s
+# RUN: | FileCheck -check-prefixes=CHECK-ENC,CHECK-INST,CHECK-ALIAS %s
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xqcilia < %s \
# RUN: | llvm-objdump --mattr=+experimental-xqcilia --no-print-imm-hex -d - \
# RUN: | FileCheck -check-prefix=CHECK-INST %s
@@ -80,3 +80,15 @@ qc.e.xori x10, x9, -33554432
# CHECK-INST: qc.e.xori a0, s1, 33554431
# CHECK-ENC: encoding: [0x1f,0xb5,0xf4,0x3f,0xff,0x7f]
qc.e.xori x10, x9, 33554431
+
+# Check that compress patterns work as expected
+
+# CHECK-ALIAS: addi t0, t0, 20
+# CHECK-NOALIAS: c.addi t0, 20
+# CHECK-ENC: encoding: [0xd1,0x02]
+qc.e.addi x5, x5, 20
+
+# CHECK-ALIAS: andi s1, s1, -10
+# CHECK-NOALIAS: c.andi s1, -10
+# CHECK-ENC: encoding: [0xd9,0x98]
+qc.e.andi x9, x9, -10
|
|
Build failure unrelated. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There are some patterns that have not been added that will need changes to the CompressInstEmitter. Those will be handled in later patches.