Skip to content

[PowerPC] Fix the register class for the instruction paddi. #73995

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

Merged
merged 1 commit into from
Dec 1, 2023

Conversation

stefanp-synopsys
Copy link
Contributor

The register class for the PADDI definition is incorrect as register zero for RA is treated as an actual zero.

The register class for the PADDI definition is incorrect as register zero for RA
is treated as an actual zero.
@stefanp-synopsys stefanp-synopsys self-assigned this Nov 30, 2023
@llvmbot llvmbot added the mc Machine (object) code label Nov 30, 2023
@llvmbot
Copy link
Member

llvmbot commented Nov 30, 2023

@llvm/pr-subscribers-mc

Author: Stefan Pintilie (stefanp-ibm)

Changes

The register class for the PADDI definition is incorrect as register zero for RA is treated as an actual zero.


Full diff: https://github.com/llvm/llvm-project/pull/73995.diff

2 Files Affected:

  • (modified) llvm/lib/Target/PowerPC/PPCInstrP10.td (+2-2)
  • (added) llvm/test/MC/PowerPC/ppc64-encoding-full-names.s (+24)
diff --git a/llvm/lib/Target/PowerPC/PPCInstrP10.td b/llvm/lib/Target/PowerPC/PPCInstrP10.td
index a5429b38dfbe2d6..f72a52d5b26f6b3 100644
--- a/llvm/lib/Target/PowerPC/PPCInstrP10.td
+++ b/llvm/lib/Target/PowerPC/PPCInstrP10.td
@@ -615,7 +615,7 @@ def RCCp {
 let Predicates = [PrefixInstrs] in {
   let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
     defm PADDI8 :
-      MLS_DForm_R_SI34_RTA5_p<14, (outs g8rc:$RT), (ins g8rc:$RA, s34imm:$SI),
+      MLS_DForm_R_SI34_RTA5_p<14, (outs g8rc:$RT), (ins g8rc_nox0:$RA, s34imm:$SI),
                               (ins immZero:$RA, s34imm_pcrel:$SI),
                               "paddi $RT, $RA, $SI", IIC_LdStLFD>;
     let isReMaterializable = 1, isAsCheapAsAMove = 1, isMoveImm = 1 in {
@@ -625,7 +625,7 @@ let Predicates = [PrefixInstrs] in {
     }
   }
   defm PADDI :
-    MLS_DForm_R_SI34_RTA5_p<14, (outs gprc:$RT), (ins gprc:$RA, s34imm:$SI),
+    MLS_DForm_R_SI34_RTA5_p<14, (outs gprc:$RT), (ins gprc_nor0:$RA, s34imm:$SI),
                             (ins immZero:$RA, s34imm_pcrel:$SI),
                             "paddi $RT, $RA, $SI", IIC_LdStLFD>;
   let isReMaterializable = 1, isAsCheapAsAMove = 1, isMoveImm = 1 in {
diff --git a/llvm/test/MC/PowerPC/ppc64-encoding-full-names.s b/llvm/test/MC/PowerPC/ppc64-encoding-full-names.s
new file mode 100644
index 000000000000000..63e05169ad7396c
--- /dev/null
+++ b/llvm/test/MC/PowerPC/ppc64-encoding-full-names.s
@@ -0,0 +1,24 @@
+# RUN: llvm-mc -triple powerpc64-unknown-linux-gnu --show-encoding -ppc-asm-full-reg-names %s | \
+# RUN:   FileCheck -check-prefix=CHECK-BE %s
+# RUN: llvm-mc -triple powerpc64le-unknown-linux-gnu --show-encoding -ppc-asm-full-reg-names %s | \
+# RUN:   FileCheck -check-prefix=CHECK-LE %s
+
+# CHECK-BE: addi r1, r2, 700                   # encoding: [0x38,0x22,0x02,0xbc]
+# CHECK-LE: addi r1, r2, 700                   # encoding: [0xbc,0x02,0x22,0x38]
+            addi 1, 2, 700
+
+# CHECK-BE: li r1, 700                         # encoding: [0x38,0x20,0x02,0xbc]
+# CHECK-LE: li r1, 700                         # encoding: [0xbc,0x02,0x20,0x38]
+            addi 1, 0, 700
+
+# CHECK-BE: paddi r1, r2, 6400000, 0           # encoding: [0x06,0x00,0x00,0x61,
+# CHECK-BE-SAME:                                            0x38,0x22,0xa8,0x00]
+# CHECK-LE: paddi r1, r2, 6400000, 0           # encoding: [0x61,0x00,0x00,0x06,
+# CHECK-LE-SAME:                                            0x00,0xa8,0x22,0x38]
+            paddi 1, 2, 6400000, 0
+
+# CHECK-BE: paddi r1, 0, 6400000, 0            # encoding: [0x06,0x00,0x00,0x61,
+# CHECK-BE-SAME:                                            0x38,0x20,0xa8,0x00]
+# CHECK-LE: paddi r1, 0, 6400000, 0            # encoding: [0x61,0x00,0x00,0x06,
+# CHECK-LE-SAME:                                            0x00,0xa8,0x20,0x38]
+            paddi 1, 0, 6400000, 0

Copy link
Contributor

@lei137 lei137 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM
Thx for the fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
mc Machine (object) code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants