[llvm] d0096e8 - Sparc: Improve SETHI and R_SPARC_DISP32 tests

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon May 5 09:17:32 PDT 2025


Author: Fangrui Song
Date: 2025-05-05T09:17:27-07:00
New Revision: d0096e8f9627d0d2704db3449ee1a958af19169c

URL: https://github.com/llvm/llvm-project/commit/d0096e8f9627d0d2704db3449ee1a958af19169c
DIFF: https://github.com/llvm/llvm-project/commit/d0096e8f9627d0d2704db3449ee1a958af19169c.diff

LOG: Sparc: Improve SETHI and R_SPARC_DISP32 tests

* adjustFixupValue is called even when a R_SPARC_HIX22/R_SPARC_LOX10
  relocation is generated. This will be fixed shortly.
* Enhanced the %h44 test to show that we don't check overflow.
* Test R_SPARC_DISP32 in .gcc_except_table and .eh_frame . The original
  support did not test -filetype=obj output.

Added: 
    

Modified: 
    llvm/test/CodeGen/SPARC/exception.ll
    llvm/test/MC/Sparc/Relocations/relocation-specifier.s

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/SPARC/exception.ll b/llvm/test/CodeGen/SPARC/exception.ll
index ea1a27930b6d7..08e7e677a5bb8 100644
--- a/llvm/test/CodeGen/SPARC/exception.ll
+++ b/llvm/test/CodeGen/SPARC/exception.ll
@@ -3,6 +3,8 @@
 ; RUN: llc -simplifycfg-require-and-preserve-domtree=1 < %s -mtriple=sparcv9 -relocation-model=static | FileCheck -check-prefix=V9ABS %s
 ; RUN: llc -simplifycfg-require-and-preserve-domtree=1 < %s -mtriple=sparcv9 -relocation-model=pic    | FileCheck -check-prefix=V9PIC %s
 
+; RUN: llc -simplifycfg-require-and-preserve-domtree=1 < %s -mtriple=sparcv9 -relocation-model=static -filetype=obj | llvm-readobj -r - | FileCheck -check-prefix=V9ABS-REL %s
+; RUN: llc -simplifycfg-require-and-preserve-domtree=1 < %s -mtriple=sparcv9 -relocation-model=pic -filetype=obj | llvm-readobj -r - | FileCheck -check-prefix=V9PIC-REL %s
 
 %struct.__fundamental_type_info_pseudo = type { %struct.__type_info_pseudo }
 %struct.__type_info_pseudo = type { ptr, ptr }
@@ -57,6 +59,16 @@
 ; V9ABS-NOT:    .section
 ; V9ABS:        .xword _ZTIi
 
+; V9ABS-REL:      .rela.gcc_except_table {
+; V9ABS-REL-NEXT:   0x14 R_SPARC_64 _ZTIi 0x0
+; V9ABS-REL-NEXT:   0x1C R_SPARC_64 _ZTIf 0x0
+; V9ABS-REL-NEXT: }
+; V9ABS-REL-NEXT: .rela.eh_frame {
+; V9ABS-REL-NEXT:   0x13 R_SPARC_UA64 __gxx_personality_v0 0x0
+; V9ABS-REL-NEXT:   0x2C R_SPARC_DISP32 .text 0x0
+; V9ABS-REL-NEXT:   0x35 R_SPARC_DISP32 .gcc_except_table 0x0
+; V9ABS-REL-NEXT: }
+
 ; V9PIC-LABEL: main:
 ; V9PIC:        .cfi_startproc
 ; V9PIC:        .cfi_personality 155, DW.ref.__gxx_personality_v0
@@ -71,6 +83,18 @@
 ; V9PIC: .L_ZTIi.DW.stub:
 ; V9PIC-NEXT:   .xword _ZTIi
 
+; V9PIC-REL:      .rela.gcc_except_table {
+; V9PIC-REL-NEXT:   0x14 R_SPARC_DISP32 .data 0x8
+; V9PIC-REL-NEXT:   0x18 R_SPARC_DISP32 .data 0x0
+; V9PIC-REL-NEXT: }
+; V9PIC-REL-NEXT: .rela.data {
+; V9PIC-REL:      .rela.data.DW.ref.__gxx_personality_v0 {
+; V9PIC-REL:      .rela.eh_frame {
+; V9PIC-REL-NEXT:   0x13 R_SPARC_DISP32 DW.ref.__gxx_personality_v0 0x0
+; V9PIC-REL-NEXT:   0x28 R_SPARC_DISP32 .text 0x0
+; V9PIC-REL-NEXT:   0x31 R_SPARC_DISP32 .gcc_except_table 0x0
+; V9PIC-REL-NEXT: }
+
 define i32 @main(i32 %argc, ptr nocapture readnone %argv) unnamed_addr #0 personality ptr @__gxx_personality_v0 {
 entry:
   %0 = icmp eq i32 %argc, 2

diff  --git a/llvm/test/MC/Sparc/Relocations/relocation-specifier.s b/llvm/test/MC/Sparc/Relocations/relocation-specifier.s
index b5da46904c650..f13c14fd13342 100644
--- a/llvm/test/MC/Sparc/Relocations/relocation-specifier.s
+++ b/llvm/test/MC/Sparc/Relocations/relocation-specifier.s
@@ -77,11 +77,20 @@ sethi %lm(sym), %l0
 # ASM-NEXT: sethi %gdop_hix22(sym), %l1
 # ASM-NEXT: or %l1, %gdop_lox10(sym), %l1
 # ASM-NEXT: ldx [%l7+%l1], %l2, %gdop(sym)
-# OBJDUMP: R_SPARC_HIX22 sym
-# OBJDUMP: R_SPARC_LOX10 sym
-# OBJDUMP: R_SPARC_GOTDATA_OP_HIX22 sym
-# OBJDUMP: R_SPARC_GOTDATA_OP_LOX10 sym
-# OBJDUMP: R_SPARC_GOTDATA_OP sym
+# OBJDUMP:      sethi 0x3fffff, %g0
+# OBJDUMP-NEXT: xor %g0, -0x400, %g0
+# OBJDUMP-NEXT: sethi 0x3fffff, %g1
+# OBJDUMP-NEXT:   R_SPARC_HIX22 sym
+# OBJDUMP-NEXT: xor %g1, -0x400, %g1
+# OBJDUMP-NEXT:   R_SPARC_LOX10 sym
+# OBJDUMP-NEXT: sethi 0x0, %l1
+# OBJDUMP-NEXT:   R_SPARC_GOTDATA_OP_HIX22 sym
+# OBJDUMP-NEXT: or %l1, 0x0, %l1
+# OBJDUMP-NEXT:   R_SPARC_GOTDATA_OP_LOX10 sym
+# OBJDUMP-NEXT: ldx [%l7+%l1], %l2
+# OBJDUMP-NEXT:   R_SPARC_GOTDATA_OP sym
+sethi %hix(zero), %g0
+xor %g0, %lox(zero), %g0
 sethi %hix(sym), %g1
 xor %g1, %lox(sym), %g1
 sethi %gdop_hix22(sym), %l1
@@ -89,6 +98,8 @@ or %l1, %gdop_lox10(sym), %l1
 ldx [%l7 + %l1], %l2, %gdop(sym)
 
 .set abs, 0xfedcba98
+.set abs48, 0xfedcba987654
+zero = 0
 
 ## FIXME: Don't emit GOT relocations when -position-independent is specified.
 # NOPIC:      sethi 0x3fb72e, %o0
@@ -104,12 +115,12 @@ xor %o0, %lo(-0x12345678), %o1
 ld [%o0 + seven], %o0
 seven = 7
 
-# OBJDUMP:      sethi 0x3fb, %o0
-# OBJDUMP-NEXT: or %o0, 0x1cb, %o0
-# OBJDUMP-NEXT: ld [%o0+0xa98], %o0
-sethi %h44(abs), %o0
-or %o0, %m44(abs), %o0
-ld [%o0 + %l44(abs)], %o0
+# OBJDUMP:      sethi 0x3b72ea, %o0
+# OBJDUMP-NEXT: or %o0, 0x187, %o0
+# OBJDUMP-NEXT: ld [%o0+0x654], %o0
+sethi %h44(abs48), %o0
+or %o0, %m44(abs48), %o0
+ld [%o0 + %l44(abs48)], %o0
 
 # OBJDUMP-NEXT: sethi 0x0, %o0
 # OBJDUMP-NEXT: sethi 0x3fb72e, %o0


        


More information about the llvm-commits mailing list