| ; RUN: llc < %s -march=mips -mcpu=mips32 -mips-ssection-threshold=8 \ |
| ; RUN: -relocation-model=static -mattr=+noabicalls -mgpopt \ |
| ; RUN: | FileCheck %s |
| |
| ; Test that object with an explicit section that is not .sdata or .sbss are not |
| ; considered in the small data section if they would otherwise qualify to be in |
| ; small data section. Also test that explicitly placing something in the small |
| ; data section uses %gp_rel addressing mode. |
| |
| @a = global [2 x i32] zeroinitializer, section ".rodata", align 4 |
| @b = global [4 x i32] zeroinitializer, section ".sdata", align 4 |
| @c = global [4 x i32] zeroinitializer, section ".sbss", align 4 |
| |
| ; CHECK-LABEL: g |
| ; CHECK: lui $[[R:[0-9]+]], %hi(a) |
| ; CHECK: lw ${{[0-9]+}}, %lo(a)($[[R]]) |
| |
| define i32 @g() { |
| entry: |
| %0 = load i32, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @a, i32 0, i32 0), align 4 |
| ret i32 %0 |
| } |
| |
| ; CHECK-LABEL: f: |
| ; CHECK-LABEL: lw ${{[0-9]+}}, %gp_rel(b)($gp) |
| |
| define i32 @f() { |
| entry: |
| %0 = load i32, i32* getelementptr inbounds ([4 x i32], [4 x i32]* @b, i32 0, i32 0), align 4 |
| ret i32 %0 |
| } |
| |
| ; CHECK-LABEL: h: |
| ; CHECK-LABEL: lw ${{[0-9]+}}, %gp_rel(c)($gp) |
| |
| define i32 @h() { |
| entry: |
| %0 = load i32, i32* getelementptr inbounds ([4 x i32], [4 x i32]* @c, i32 0, i32 0), align 4 |
| ret i32 %0 |
| } |
| |
| |
| ; CHECK: .type a,@object |
| ; CHECK: .section .rodata,"a",@progbits |
| ; CHECK: .globl a |
| |
| ; CHECK: .type b,@object |
| ; CHECK: .section .sdata,"aw",@progbits |
| ; CHECK: .globl b |
| |
| ; CHECK: .type c,@object |
| ; CHECK: .section .sbss,"aw",@nobits |
| ; CHECK: .globl c |