[llvm] [RISCV][MC] Emit `x8` as `fp` instead of `s0` (PR #135500)

Shao-Ce SUN via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 13 21:08:00 PDT 2025


https://github.com/sunshaoce updated https://github.com/llvm/llvm-project/pull/135500

>From f207ecedbca3db7423cbd805c65f298bd00ab5a6 Mon Sep 17 00:00:00 2001
From: Shao-Ce SUN <sunshaoce at outlook.com>
Date: Sun, 13 Apr 2025 03:51:08 +0800
Subject: [PATCH 1/2] [RISCV][MC] Emit x8 as fp instead of s0

---
 .../RISCV/MCTargetDesc/RISCVInstPrinter.cpp   |  6 +++
 llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll      | 49 +++++++++++++++++++
 2 files changed, 55 insertions(+)
 create mode 100644 llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll

diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
index 83ecf805489c1..8693bda718d91 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
@@ -34,6 +34,10 @@ static cl::opt<bool>
               cl::desc("Disable the emission of assembler pseudo instructions"),
               cl::init(false), cl::Hidden);
 
+static cl::opt<bool> EmitX8AsFP("riscv-emit-x8-as-fp",
+                                cl::desc("Emit x8 as fp instead of s0"),
+                                cl::init(false), cl::Hidden);
+
 // Print architectural register names rather than the ABI names (such as x2
 // instead of sp).
 // TODO: Make RISCVInstPrinter::getRegisterName non-static so that this can a
@@ -311,6 +315,8 @@ void RISCVInstPrinter::printVMaskReg(const MCInst *MI, unsigned OpNo,
 }
 
 const char *RISCVInstPrinter::getRegisterName(MCRegister Reg) {
+  if (EmitX8AsFP && Reg == RISCV::X8)
+    return "fp";
   return getRegisterName(Reg, ArchRegNames ? RISCV::NoRegAltName
                                            : RISCV::ABIRegAltName);
 }
diff --git a/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll b/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll
new file mode 100644
index 0000000000000..773b49e3515ca
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll
@@ -0,0 +1,49 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=riscv32 --riscv-emit-x8-as-fp -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV32I %s
+; RUN: llc -mtriple=riscv64 --riscv-emit-x8-as-fp -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV64I %s
+
+define signext i32 @add(i32 %0, i32 %1) #0 {
+; RV32I-LABEL: add:
+; RV32I:       # %bb.0:
+; RV32I-NEXT:    addi sp, sp, -16
+; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    sw fp, 8(sp) # 4-byte Folded Spill
+; RV32I-NEXT:    addi fp, sp, 16
+; RV32I-NEXT:    sw a0, -12(fp)
+; RV32I-NEXT:    sw a1, -16(fp)
+; RV32I-NEXT:    lw a0, -12(fp)
+; RV32I-NEXT:    lw a1, -16(fp)
+; RV32I-NEXT:    add a0, a0, a1
+; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    lw fp, 8(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    addi sp, sp, 16
+; RV32I-NEXT:    ret
+;
+; RV64I-LABEL: add:
+; RV64I:       # %bb.0:
+; RV64I-NEXT:    addi sp, sp, -32
+; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    sd fp, 16(sp) # 8-byte Folded Spill
+; RV64I-NEXT:    addi fp, sp, 32
+; RV64I-NEXT:    sw a0, -20(fp)
+; RV64I-NEXT:    sw a1, -24(fp)
+; RV64I-NEXT:    lw a0, -20(fp)
+; RV64I-NEXT:    lw a1, -24(fp)
+; RV64I-NEXT:    addw a0, a0, a1
+; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    ld fp, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    addi sp, sp, 32
+; RV64I-NEXT:    ret
+  %3 = alloca i32, align 4
+  %4 = alloca i32, align 4
+  store i32 %0, ptr %3, align 4
+  store i32 %1, ptr %4, align 4
+  %5 = load i32, ptr %3, align 4
+  %6 = load i32, ptr %4, align 4
+  %7 = add nsw i32 %5, %6
+  ret i32 %7
+}
+
+attributes #0 = { noinline nounwind optnone "frame-pointer"="all" }

>From 51e76bdcaab50256e0cea0841b05020736977bc2 Mon Sep 17 00:00:00 2001
From: Shao-Ce SUN <sunshaoce at outlook.com>
Date: Mon, 14 Apr 2025 12:06:53 +0800
Subject: [PATCH 2/2] Address lenary's comments

---
 .../RISCV/MCTargetDesc/RISCVInstPrinter.cpp   |  12 +-
 llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll      | 140 +++++++++++++-----
 .../MC/Disassembler/RISCV/emit-x8-as-fp.txt   |  22 +++
 llvm/test/MC/RISCV/emit-x8-as-fp.s            |  42 ++++++
 4 files changed, 181 insertions(+), 35 deletions(-)
 create mode 100644 llvm/test/MC/Disassembler/RISCV/emit-x8-as-fp.txt
 create mode 100644 llvm/test/MC/RISCV/emit-x8-as-fp.s

diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
index 8693bda718d91..972bee5a0aa74 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVInstPrinter.cpp
@@ -58,6 +58,11 @@ bool RISCVInstPrinter::applyTargetSpecificCLOption(StringRef Opt) {
     ArchRegNames = true;
     return true;
   }
+  if (Opt == "emit-x8-as-fp") {
+    if (!ArchRegNames)
+      EmitX8AsFP = true;
+    return true;
+  }
 
   return false;
 }
@@ -315,7 +320,12 @@ void RISCVInstPrinter::printVMaskReg(const MCInst *MI, unsigned OpNo,
 }
 
 const char *RISCVInstPrinter::getRegisterName(MCRegister Reg) {
-  if (EmitX8AsFP && Reg == RISCV::X8)
+  // When PrintAliases is enabled, and EmitX8AsFP is enabled, x8 will be printed
+  // as fp instead of s0. Note that these similar registers are not replaced:
+  // - X8_H: used for f16 register in zhinx
+  // - X8_W: used for f32 register in zfinx
+  // - X8_X9: used for GPR Pair
+  if (!ArchRegNames && EmitX8AsFP && Reg == RISCV::X8)
     return "fp";
   return getRegisterName(Reg, ArchRegNames ? RISCV::NoRegAltName
                                            : RISCV::ABIRegAltName);
diff --git a/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll b/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll
index 773b49e3515ca..0c9ef2176fd72 100644
--- a/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll
+++ b/llvm/test/CodeGen/RISCV/emit-x8-as-fp.ll
@@ -1,41 +1,113 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -mtriple=riscv32 --riscv-emit-x8-as-fp -verify-machineinstrs < %s \
-; RUN:   | FileCheck -check-prefix=RV32I %s
-; RUN: llc -mtriple=riscv64 --riscv-emit-x8-as-fp -verify-machineinstrs < %s \
-; RUN:   | FileCheck -check-prefix=RV64I %s
+; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV32I-DEFAULT %s
+; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV64I-DEFAULT %s
+; RUN: llc -mtriple=riscv32 -M emit-x8-as-fp -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV32I-EMIT-FP %s
+; RUN: llc -mtriple=riscv64 -M emit-x8-as-fp -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV64I-EMIT-FP %s
+; RUN: llc -mtriple=riscv32 -M numeric -M emit-x8-as-fp -verify-machineinstrs \
+; RUN:   < %s | FileCheck -check-prefix=RV32I-NUMERIC %s
+; RUN: llc -mtriple=riscv64 -M numeric -M emit-x8-as-fp -verify-machineinstrs \
+; RUN:   < %s | FileCheck -check-prefix=RV64I-NUMERIC %s
 
 define signext i32 @add(i32 %0, i32 %1) #0 {
-; RV32I-LABEL: add:
-; RV32I:       # %bb.0:
-; RV32I-NEXT:    addi sp, sp, -16
-; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    sw fp, 8(sp) # 4-byte Folded Spill
-; RV32I-NEXT:    addi fp, sp, 16
-; RV32I-NEXT:    sw a0, -12(fp)
-; RV32I-NEXT:    sw a1, -16(fp)
-; RV32I-NEXT:    lw a0, -12(fp)
-; RV32I-NEXT:    lw a1, -16(fp)
-; RV32I-NEXT:    add a0, a0, a1
-; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    lw fp, 8(sp) # 4-byte Folded Reload
-; RV32I-NEXT:    addi sp, sp, 16
-; RV32I-NEXT:    ret
+; RV32I-DEFAULT-LABEL: add:
+; RV32I-DEFAULT:       # %bb.0:
+; RV32I-DEFAULT-NEXT:    addi sp, sp, -16
+; RV32I-DEFAULT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32I-DEFAULT-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
+; RV32I-DEFAULT-NEXT:    addi s0, sp, 16
+; RV32I-DEFAULT-NEXT:    sw a0, -12(s0)
+; RV32I-DEFAULT-NEXT:    sw a1, -16(s0)
+; RV32I-DEFAULT-NEXT:    lw a0, -12(s0)
+; RV32I-DEFAULT-NEXT:    lw a1, -16(s0)
+; RV32I-DEFAULT-NEXT:    add a0, a0, a1
+; RV32I-DEFAULT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32I-DEFAULT-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
+; RV32I-DEFAULT-NEXT:    addi sp, sp, 16
+; RV32I-DEFAULT-NEXT:    ret
 ;
-; RV64I-LABEL: add:
-; RV64I:       # %bb.0:
-; RV64I-NEXT:    addi sp, sp, -32
-; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    sd fp, 16(sp) # 8-byte Folded Spill
-; RV64I-NEXT:    addi fp, sp, 32
-; RV64I-NEXT:    sw a0, -20(fp)
-; RV64I-NEXT:    sw a1, -24(fp)
-; RV64I-NEXT:    lw a0, -20(fp)
-; RV64I-NEXT:    lw a1, -24(fp)
-; RV64I-NEXT:    addw a0, a0, a1
-; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    ld fp, 16(sp) # 8-byte Folded Reload
-; RV64I-NEXT:    addi sp, sp, 32
-; RV64I-NEXT:    ret
+; RV64I-DEFAULT-LABEL: add:
+; RV64I-DEFAULT:       # %bb.0:
+; RV64I-DEFAULT-NEXT:    addi sp, sp, -32
+; RV64I-DEFAULT-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; RV64I-DEFAULT-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
+; RV64I-DEFAULT-NEXT:    addi s0, sp, 32
+; RV64I-DEFAULT-NEXT:    sw a0, -20(s0)
+; RV64I-DEFAULT-NEXT:    sw a1, -24(s0)
+; RV64I-DEFAULT-NEXT:    lw a0, -20(s0)
+; RV64I-DEFAULT-NEXT:    lw a1, -24(s0)
+; RV64I-DEFAULT-NEXT:    addw a0, a0, a1
+; RV64I-DEFAULT-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; RV64I-DEFAULT-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; RV64I-DEFAULT-NEXT:    addi sp, sp, 32
+; RV64I-DEFAULT-NEXT:    ret
+;
+; RV32I-EMIT-FP-LABEL: add:
+; RV32I-EMIT-FP:       # %bb.0:
+; RV32I-EMIT-FP-NEXT:    addi sp, sp, -16
+; RV32I-EMIT-FP-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32I-EMIT-FP-NEXT:    sw fp, 8(sp) # 4-byte Folded Spill
+; RV32I-EMIT-FP-NEXT:    addi fp, sp, 16
+; RV32I-EMIT-FP-NEXT:    sw a0, -12(fp)
+; RV32I-EMIT-FP-NEXT:    sw a1, -16(fp)
+; RV32I-EMIT-FP-NEXT:    lw a0, -12(fp)
+; RV32I-EMIT-FP-NEXT:    lw a1, -16(fp)
+; RV32I-EMIT-FP-NEXT:    add a0, a0, a1
+; RV32I-EMIT-FP-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32I-EMIT-FP-NEXT:    lw fp, 8(sp) # 4-byte Folded Reload
+; RV32I-EMIT-FP-NEXT:    addi sp, sp, 16
+; RV32I-EMIT-FP-NEXT:    ret
+;
+; RV64I-EMIT-FP-LABEL: add:
+; RV64I-EMIT-FP:       # %bb.0:
+; RV64I-EMIT-FP-NEXT:    addi sp, sp, -32
+; RV64I-EMIT-FP-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
+; RV64I-EMIT-FP-NEXT:    sd fp, 16(sp) # 8-byte Folded Spill
+; RV64I-EMIT-FP-NEXT:    addi fp, sp, 32
+; RV64I-EMIT-FP-NEXT:    sw a0, -20(fp)
+; RV64I-EMIT-FP-NEXT:    sw a1, -24(fp)
+; RV64I-EMIT-FP-NEXT:    lw a0, -20(fp)
+; RV64I-EMIT-FP-NEXT:    lw a1, -24(fp)
+; RV64I-EMIT-FP-NEXT:    addw a0, a0, a1
+; RV64I-EMIT-FP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
+; RV64I-EMIT-FP-NEXT:    ld fp, 16(sp) # 8-byte Folded Reload
+; RV64I-EMIT-FP-NEXT:    addi sp, sp, 32
+; RV64I-EMIT-FP-NEXT:    ret
+;
+; RV32I-NUMERIC-LABEL: add:
+; RV32I-NUMERIC:       # %bb.0:
+; RV32I-NUMERIC-NEXT:    addi x2, x2, -16
+; RV32I-NUMERIC-NEXT:    sw x1, 12(x2) # 4-byte Folded Spill
+; RV32I-NUMERIC-NEXT:    sw x8, 8(x2) # 4-byte Folded Spill
+; RV32I-NUMERIC-NEXT:    addi x8, x2, 16
+; RV32I-NUMERIC-NEXT:    sw x10, -12(x8)
+; RV32I-NUMERIC-NEXT:    sw x11, -16(x8)
+; RV32I-NUMERIC-NEXT:    lw x10, -12(x8)
+; RV32I-NUMERIC-NEXT:    lw x11, -16(x8)
+; RV32I-NUMERIC-NEXT:    add x10, x10, x11
+; RV32I-NUMERIC-NEXT:    lw x1, 12(x2) # 4-byte Folded Reload
+; RV32I-NUMERIC-NEXT:    lw x8, 8(x2) # 4-byte Folded Reload
+; RV32I-NUMERIC-NEXT:    addi x2, x2, 16
+; RV32I-NUMERIC-NEXT:    ret
+;
+; RV64I-NUMERIC-LABEL: add:
+; RV64I-NUMERIC:       # %bb.0:
+; RV64I-NUMERIC-NEXT:    addi x2, x2, -32
+; RV64I-NUMERIC-NEXT:    sd x1, 24(x2) # 8-byte Folded Spill
+; RV64I-NUMERIC-NEXT:    sd x8, 16(x2) # 8-byte Folded Spill
+; RV64I-NUMERIC-NEXT:    addi x8, x2, 32
+; RV64I-NUMERIC-NEXT:    sw x10, -20(x8)
+; RV64I-NUMERIC-NEXT:    sw x11, -24(x8)
+; RV64I-NUMERIC-NEXT:    lw x10, -20(x8)
+; RV64I-NUMERIC-NEXT:    lw x11, -24(x8)
+; RV64I-NUMERIC-NEXT:    addw x10, x10, x11
+; RV64I-NUMERIC-NEXT:    ld x1, 24(x2) # 8-byte Folded Reload
+; RV64I-NUMERIC-NEXT:    ld x8, 16(x2) # 8-byte Folded Reload
+; RV64I-NUMERIC-NEXT:    addi x2, x2, 32
+; RV64I-NUMERIC-NEXT:    ret
   %3 = alloca i32, align 4
   %4 = alloca i32, align 4
   store i32 %0, ptr %3, align 4
diff --git a/llvm/test/MC/Disassembler/RISCV/emit-x8-as-fp.txt b/llvm/test/MC/Disassembler/RISCV/emit-x8-as-fp.txt
new file mode 100644
index 0000000000000..23d3f72c2ef53
--- /dev/null
+++ b/llvm/test/MC/Disassembler/RISCV/emit-x8-as-fp.txt
@@ -0,0 +1,22 @@
+# RUN: llvm-mc --disassemble -triple=riscv32 --show-encoding < %s \
+# RUN:   | FileCheck --check-prefixes=DEFAULT %s
+# RUN: llvm-mc --disassemble -triple=riscv64 --show-encoding < %s \
+# RUN:   | FileCheck --check-prefixes=DEFAULT %s
+# RUN: llvm-mc --disassemble -triple=riscv32 -M emit-x8-as-fp \
+# RUN:   --show-encoding < %s | FileCheck --check-prefixes=EMIT-FP %s
+# RUN: llvm-mc --disassemble -triple=riscv64 -M emit-x8-as-fp \
+# RUN:   --show-encoding < %s | FileCheck --check-prefixes=EMIT-FP %s
+# RUN: llvm-mc --disassemble -triple=riscv32 -M numeric -M emit-x8-as-fp \
+# RUN:   --show-encoding < %s | FileCheck --check-prefixes=NUMERIC %s
+# RUN: llvm-mc --disassemble -triple=riscv64 -M numeric -M emit-x8-as-fp \
+# RUN:   --show-encoding < %s | FileCheck --check-prefixes=NUMERIC %s
+
+# DEFAULT: sw a0, -12(s0)  # encoding: [0x23,0x2a,0xa4,0xfe]
+# EMIT-FP: sw a0, -12(fp)  # encoding: [0x23,0x2a,0xa4,0xfe]
+# NUMERIC: sw x10, -12(x8) # encoding: [0x23,0x2a,0xa4,0xfe]
+0x23 0x2a 0xa4 0xfe
+
+# DEFAULT: lw a0, -12(s0)  # encoding: [0x03,0x25,0x44,0xff]
+# EMIT-FP: lw a0, -12(fp)  # encoding: [0x03,0x25,0x44,0xff]
+# NUMERIC: lw x10, -12(x8) # encoding: [0x03,0x25,0x44,0xff]
+0x03 0x25 0x44 0xff
diff --git a/llvm/test/MC/RISCV/emit-x8-as-fp.s b/llvm/test/MC/RISCV/emit-x8-as-fp.s
new file mode 100644
index 0000000000000..ea5143f5066fd
--- /dev/null
+++ b/llvm/test/MC/RISCV/emit-x8-as-fp.s
@@ -0,0 +1,42 @@
+# RUN: llvm-mc --triple=riscv32 --show-encoding < %s 2>&1 \
+# RUN:   | FileCheck --check-prefix=DEFAULT %s
+# RUN: llvm-mc --triple=riscv64 --show-encoding < %s 2>&1 \
+# RUN:   | FileCheck --check-prefix=DEFAULT %s
+# RUN: llvm-mc --triple=riscv32 -M emit-x8-as-fp --show-encoding < %s 2>&1 \
+# RUN:   | FileCheck --check-prefix=EMIT-FP %s
+# RUN: llvm-mc --triple=riscv64 -M emit-x8-as-fp --show-encoding < %s 2>&1 \
+# RUN:   | FileCheck --check-prefix=EMIT-FP %s
+# RUN: llvm-mc --triple=riscv32 -M numeric -M emit-x8-as-fp --show-encoding \
+# RUN:   < %s 2>&1 | FileCheck --check-prefix=NUMERIC %s
+# RUN: llvm-mc --triple=riscv64 -M numeric -M emit-x8-as-fp --show-encoding \
+# RUN:   < %s 2>&1 | FileCheck --check-prefix=NUMERIC %s
+
+# DEFAULT: sw      a0, -12(s0)                     # encoding: [0x23,0x2a,0xa4,0xfe]
+# EMIT-FP: sw      a0, -12(fp)                     # encoding: [0x23,0x2a,0xa4,0xfe]
+# NUMERIC: sw      x10, -12(x8)                    # encoding: [0x23,0x2a,0xa4,0xfe]
+sw a0, -12(s0)
+
+# DEFAULT: lw      a0, -12(s0)                     # encoding: [0x03,0x25,0x44,0xff]
+# EMIT-FP: lw      a0, -12(fp)                     # encoding: [0x03,0x25,0x44,0xff]
+# NUMERIC: lw      x10, -12(x8)                    # encoding: [0x03,0x25,0x44,0xff]
+lw a0, -12(s0)
+
+# DEFAULT: sw      a0, -12(s0)                     # encoding: [0x23,0x2a,0xa4,0xfe]
+# EMIT-FP: sw      a0, -12(fp)                     # encoding: [0x23,0x2a,0xa4,0xfe]
+# NUMERIC: sw      x10, -12(x8)                    # encoding: [0x23,0x2a,0xa4,0xfe]
+sw a0, -12(fp)
+
+# DEFAULT: lw      a0, -12(s0)                     # encoding: [0x03,0x25,0x44,0xff]
+# EMIT-FP: lw      a0, -12(fp)                     # encoding: [0x03,0x25,0x44,0xff]
+# NUMERIC: lw      x10, -12(x8)                    # encoding: [0x03,0x25,0x44,0xff]
+lw a0, -12(fp)
+
+# DEFAULT: sw      a0, -12(s0)                     # encoding: [0x23,0x2a,0xa4,0xfe]
+# EMIT-FP: sw      a0, -12(fp)                     # encoding: [0x23,0x2a,0xa4,0xfe]
+# NUMERIC: sw      x10, -12(x8)                    # encoding: [0x23,0x2a,0xa4,0xfe]
+sw a0, -12(x8)
+
+# DEFAULT: lw      a0, -12(s0)                     # encoding: [0x03,0x25,0x44,0xff]
+# EMIT-FP: lw      a0, -12(fp)                     # encoding: [0x03,0x25,0x44,0xff]
+# NUMERIC: lw      x10, -12(x8)                    # encoding: [0x03,0x25,0x44,0xff]
+lw a0, -12(x8)



More information about the llvm-commits mailing list