Use Align for TFL::TransientStackAlignment
[llvm-core.git] / test / CodeGen / Mips / GlobalISel / llvm-ir / global_address_pic.ll
blobe293a565fc70715e1e51f7275d16a2009b756db1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -global-isel -relocation-model=pic -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32_PIC
4 declare i32 @f(i32 %a, i32 %b);
6 define internal i32 @f_with_local_linkage(i32 %x, i32 %y) {
7 ; MIPS32_PIC-LABEL: f_with_local_linkage:
8 ; MIPS32_PIC:       # %bb.0: # %entry
9 ; MIPS32_PIC-NEXT:    addu $2, $5, $4
10 ; MIPS32_PIC-NEXT:    jr $ra
11 ; MIPS32_PIC-NEXT:    nop
12 entry:
13   %add = add i32 %y, %x
14   ret i32 %add
17 define i32 @call_global(i32 %a, i32 %b) {
18 ; MIPS32_PIC-LABEL: call_global:
19 ; MIPS32_PIC:       # %bb.0: # %entry
20 ; MIPS32_PIC-NEXT:    lui $2, %hi(_gp_disp)
21 ; MIPS32_PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
22 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, -24
23 ; MIPS32_PIC-NEXT:    .cfi_def_cfa_offset 24
24 ; MIPS32_PIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
25 ; MIPS32_PIC-NEXT:    .cfi_offset 31, -4
26 ; MIPS32_PIC-NEXT:    addu $1, $2, $25
27 ; MIPS32_PIC-NEXT:    lw $25, %call16(f)($1)
28 ; MIPS32_PIC-NEXT:    move $gp, $1
29 ; MIPS32_PIC-NEXT:    jalr $25
30 ; MIPS32_PIC-NEXT:    nop
31 ; MIPS32_PIC-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
32 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 24
33 ; MIPS32_PIC-NEXT:    jr $ra
34 ; MIPS32_PIC-NEXT:    nop
35 entry:
36   %call = call i32 @f(i32 %a, i32 %b)
37   ret i32 %call
40 define i32 @call_global_with_local_linkage(i32 %a, i32 %b) {
41 ; MIPS32_PIC-LABEL: call_global_with_local_linkage:
42 ; MIPS32_PIC:       # %bb.0: # %entry
43 ; MIPS32_PIC-NEXT:    lui $2, %hi(_gp_disp)
44 ; MIPS32_PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
45 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, -24
46 ; MIPS32_PIC-NEXT:    .cfi_def_cfa_offset 24
47 ; MIPS32_PIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
48 ; MIPS32_PIC-NEXT:    .cfi_offset 31, -4
49 ; MIPS32_PIC-NEXT:    addu $1, $2, $25
50 ; MIPS32_PIC-NEXT:    lw $2, %got(f_with_local_linkage)($1)
51 ; MIPS32_PIC-NEXT:    addiu $25, $2, %lo(f_with_local_linkage)
52 ; MIPS32_PIC-NEXT:    move $gp, $1
53 ; MIPS32_PIC-NEXT:    jalr $25
54 ; MIPS32_PIC-NEXT:    nop
55 ; MIPS32_PIC-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
56 ; MIPS32_PIC-NEXT:    addiu $sp, $sp, 24
57 ; MIPS32_PIC-NEXT:    jr $ra
58 ; MIPS32_PIC-NEXT:    nop
59 entry:
60   %call = call i32 @f_with_local_linkage(i32 %a, i32 %b)
61   ret i32 %call
65 @val = global i32 0
66 @val_with_local_linkage = internal global i32 1
68 define i32 @ret_global_int() {
69 ; MIPS32_PIC-LABEL: ret_global_int:
70 ; MIPS32_PIC:       # %bb.0: # %entry
71 ; MIPS32_PIC-NEXT:    lui $2, %hi(_gp_disp)
72 ; MIPS32_PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
73 ; MIPS32_PIC-NEXT:    addu $1, $2, $25
74 ; MIPS32_PIC-NEXT:    lw $1, %got(val)($1)
75 ; MIPS32_PIC-NEXT:    lw $2, 0($1)
76 ; MIPS32_PIC-NEXT:    jr $ra
77 ; MIPS32_PIC-NEXT:    nop
78 entry:
79   %0 = load i32, i32* @val
80   ret i32 %0
83 define i32 @ret_global_int_with_local_linkage() {
84 ; MIPS32_PIC-LABEL: ret_global_int_with_local_linkage:
85 ; MIPS32_PIC:       # %bb.0: # %entry
86 ; MIPS32_PIC-NEXT:    lui $2, %hi(_gp_disp)
87 ; MIPS32_PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
88 ; MIPS32_PIC-NEXT:    addu $1, $2, $25
89 ; MIPS32_PIC-NEXT:    lw $1, %got(val_with_local_linkage)($1)
90 ; MIPS32_PIC-NEXT:    addiu $1, $1, %lo(val_with_local_linkage)
91 ; MIPS32_PIC-NEXT:    lw $2, 0($1)
92 ; MIPS32_PIC-NEXT:    jr $ra
93 ; MIPS32_PIC-NEXT:    nop
94 entry:
95   %0 = load i32, i32* @val_with_local_linkage
96   ret i32 %0