[llvm] 3b5456d - [RISCV] Pre-commit tests for D126635. NFC

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Tue May 31 09:51:05 PDT 2022


Author: Craig Topper
Date: 2022-05-31T09:49:46-07:00
New Revision: 3b5456d5f0d1fbfcdf6f6a18e9adec5e42a560ee

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

LOG: [RISCV] Pre-commit tests for D126635. NFC

Added: 
    

Modified: 
    llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll b/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll
index 7ebc526bb4d33..dada86097c429 100644
--- a/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll
+++ b/llvm/test/CodeGen/RISCV/hoist-global-addr-base.ll
@@ -6,6 +6,7 @@
 @s = common dso_local global %struct.S zeroinitializer, align 4
 @foo = global [6 x i16] [i16 1, i16 2, i16 3, i16 4, i16 5, i16 0], align 2
 @g = global [1048576 x i8] zeroinitializer, align 1
+ at bar = external global [0 x i8], align 1
 
 
 define dso_local void @multiple_stores() local_unnamed_addr nounwind {
@@ -90,6 +91,15 @@ define i8* @big_offset_lui_tail() nounwind {
   ret i8* getelementptr inbounds ([1048576 x i8], [1048576 x i8]* @g, i32 0, i32 524288)
 }
 
+define i8* @big_offset_neg_lui_tail() {
+; CHECK-LABEL: big_offset_neg_lui_tail:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    lui a0, %hi(bar+4294959104)
+; CHECK-NEXT:    addi a0, a0, %lo(bar+4294959104)
+; CHECK-NEXT:    ret
+  ret i8* getelementptr inbounds ([0 x i8], [0 x i8]* @bar, i32 0, i32 -8192)
+}
+
 define dso_local i32* @big_offset_one_use() local_unnamed_addr nounwind {
 ; RV32-LABEL: big_offset_one_use:
 ; RV32:       # %bb.0: # %entry
@@ -125,11 +135,11 @@ define dso_local i32* @control_flow_no_mem(i32 %n) local_unnamed_addr nounwind {
 ; CHECK-NEXT:    lui a0, %hi(s)
 ; CHECK-NEXT:    addi a0, a0, %lo(s)
 ; CHECK-NEXT:    lw a1, 164(a0)
-; CHECK-NEXT:    beqz a1, .LBB6_2
+; CHECK-NEXT:    beqz a1, .LBB7_2
 ; CHECK-NEXT:  # %bb.1: # %if.end
 ; CHECK-NEXT:    addi a0, a0, 168
 ; CHECK-NEXT:    ret
-; CHECK-NEXT:  .LBB6_2: # %if.then
+; CHECK-NEXT:  .LBB7_2: # %if.then
 ; CHECK-NEXT:    addi a0, a0, 160
 ; CHECK-NEXT:    ret
 entry:
@@ -150,13 +160,13 @@ define dso_local i32 @load_half() nounwind {
 ; RV32-NEXT:    lui a0, %hi(foo+8)
 ; RV32-NEXT:    lhu a0, %lo(foo+8)(a0)
 ; RV32-NEXT:    li a1, 140
-; RV32-NEXT:    bne a0, a1, .LBB7_2
+; RV32-NEXT:    bne a0, a1, .LBB8_2
 ; RV32-NEXT:  # %bb.1: # %if.end
 ; RV32-NEXT:    li a0, 0
 ; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    addi sp, sp, 16
 ; RV32-NEXT:    ret
-; RV32-NEXT:  .LBB7_2: # %if.then
+; RV32-NEXT:  .LBB8_2: # %if.then
 ; RV32-NEXT:    call abort at plt
 ;
 ; RV64-LABEL: load_half:
@@ -166,13 +176,13 @@ define dso_local i32 @load_half() nounwind {
 ; RV64-NEXT:    lui a0, %hi(foo+8)
 ; RV64-NEXT:    lhu a0, %lo(foo+8)(a0)
 ; RV64-NEXT:    li a1, 140
-; RV64-NEXT:    bne a0, a1, .LBB7_2
+; RV64-NEXT:    bne a0, a1, .LBB8_2
 ; RV64-NEXT:  # %bb.1: # %if.end
 ; RV64-NEXT:    li a0, 0
 ; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    addi sp, sp, 16
 ; RV64-NEXT:    ret
-; RV64-NEXT:  .LBB7_2: # %if.then
+; RV64-NEXT:  .LBB8_2: # %if.then
 ; RV64-NEXT:    call abort at plt
 entry:
   %0 = load i16, i16* getelementptr inbounds ([6 x i16], [6 x i16]* @foo, i32 0, i32 4), align 2
@@ -200,3 +210,32 @@ entry:
   store i32 10, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i32 0, i32 1), align 4
   ret void
 }
+
+define i8* @neg_offset() {
+; RV32-LABEL: neg_offset:
+; RV32:       # %bb.0:
+; RV32-NEXT:    lui a0, %hi(bar+4294959105)
+; RV32-NEXT:    addi a0, a0, %lo(bar+4294959105)
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: neg_offset:
+; RV64:       # %bb.0:
+; RV64-NEXT:    lui a0, %hi(bar)
+; RV64-NEXT:    addi a0, a0, %lo(bar)
+; RV64-NEXT:    lui a1, 1048574
+; RV64-NEXT:    addiw a1, a1, 1
+; RV64-NEXT:    add a0, a0, a1
+; RV64-NEXT:    ret
+    ret i8* getelementptr inbounds ([0 x i8], [0 x i8]* @bar, i32 0, i32 -8191)
+}
+
+; This uses an LUI+ADDI on RV64 that does not produce a simm32. For RV32, we'll
+; truncate the offset.
+define i8* @neg_offset_not_simm32() {
+; CHECK-LABEL: neg_offset_not_simm32:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    lui a0, %hi(bar+2147482283)
+; CHECK-NEXT:    addi a0, a0, %lo(bar+2147482283)
+; CHECK-NEXT:    ret
+    ret i8* getelementptr inbounds ([0 x i8], [0 x i8]* @bar, i32 0, i64 -2147485013)
+}


        


More information about the llvm-commits mailing list