Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / Mips / unalignedload.ll
blobda57b92e8f6df80f8b50a1face1e46cc9624948a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc  < %s -march=mipsel -mcpu=mips32   -relocation-model=pic | FileCheck %s -check-prefixes=MIPS32-EL
3 ; RUN: llc  < %s -march=mips   -mcpu=mips32   -relocation-model=pic | FileCheck %s -check-prefixes=MIPS32-EB
4 ; RUN: llc  < %s -march=mipsel -mcpu=mips32r2 -relocation-model=pic | FileCheck %s -check-prefixes=MIPS32-EL
5 ; RUN: llc  < %s -march=mips   -mcpu=mips32r2 -relocation-model=pic | FileCheck %s -check-prefixes=MIPS32-EB
6 ; RUN: llc  < %s -march=mipsel -mcpu=mips32r6 -relocation-model=pic | FileCheck %s -check-prefixes=MIPS32R6-EL
7 ; RUN: llc  < %s -march=mips   -mcpu=mips32r6 -relocation-model=pic | FileCheck %s -check-prefixes=MIPS32R6-EB
9 %struct.S2 = type { %struct.S1, %struct.S1 }
10 %struct.S1 = type { i8, i8 }
11 %struct.S4 = type { [7 x i8] }
13 @s2 = common global %struct.S2 zeroinitializer, align 1
14 @s4 = common global %struct.S4 zeroinitializer, align 1
16 define void @bar1() nounwind {
17 ; MIPS32-EL-LABEL: bar1:
18 ; MIPS32-EL:       # %bb.0: # %entry
19 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
20 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
21 ; MIPS32-EL-NEXT:    addiu $sp, $sp, -24
22 ; MIPS32-EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
23 ; MIPS32-EL-NEXT:    addu $gp, $2, $25
24 ; MIPS32-EL-NEXT:    lw $1, %got(s2)($gp)
25 ; MIPS32-EL-NEXT:    lbu $2, 2($1)
26 ; MIPS32-EL-NEXT:    lbu $1, 3($1)
27 ; MIPS32-EL-NEXT:    sll $1, $1, 8
28 ; MIPS32-EL-NEXT:    lw $25, %call16(foo2)($gp)
29 ; MIPS32-EL-NEXT:    .reloc ($tmp0), R_MIPS_JALR, foo2
30 ; MIPS32-EL-NEXT:  $tmp0:
31 ; MIPS32-EL-NEXT:    jalr $25
32 ; MIPS32-EL-NEXT:    or $4, $1, $2
33 ; MIPS32-EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
34 ; MIPS32-EL-NEXT:    jr $ra
35 ; MIPS32-EL-NEXT:    addiu $sp, $sp, 24
37 ; MIPS32-EB-LABEL: bar1:
38 ; MIPS32-EB:       # %bb.0: # %entry
39 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
40 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
41 ; MIPS32-EB-NEXT:    addiu $sp, $sp, -24
42 ; MIPS32-EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
43 ; MIPS32-EB-NEXT:    addu $gp, $2, $25
44 ; MIPS32-EB-NEXT:    lw $1, %got(s2)($gp)
45 ; MIPS32-EB-NEXT:    lbu $2, 3($1)
46 ; MIPS32-EB-NEXT:    sll $2, $2, 16
47 ; MIPS32-EB-NEXT:    lbu $1, 2($1)
48 ; MIPS32-EB-NEXT:    sll $1, $1, 24
49 ; MIPS32-EB-NEXT:    lw $25, %call16(foo2)($gp)
50 ; MIPS32-EB-NEXT:    .reloc ($tmp0), R_MIPS_JALR, foo2
51 ; MIPS32-EB-NEXT:  $tmp0:
52 ; MIPS32-EB-NEXT:    jalr $25
53 ; MIPS32-EB-NEXT:    or $4, $1, $2
54 ; MIPS32-EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
55 ; MIPS32-EB-NEXT:    jr $ra
56 ; MIPS32-EB-NEXT:    addiu $sp, $sp, 24
58 ; MIPS32R6-EL-LABEL: bar1:
59 ; MIPS32R6-EL:       # %bb.0: # %entry
60 ; MIPS32R6-EL-NEXT:    lui $2, %hi(_gp_disp)
61 ; MIPS32R6-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
62 ; MIPS32R6-EL-NEXT:    addiu $sp, $sp, -24
63 ; MIPS32R6-EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
64 ; MIPS32R6-EL-NEXT:    addu $gp, $2, $25
65 ; MIPS32R6-EL-NEXT:    lw $1, %got(s2)($gp)
66 ; MIPS32R6-EL-NEXT:    lhu $4, 2($1)
67 ; MIPS32R6-EL-NEXT:    lw $25, %call16(foo2)($gp)
68 ; MIPS32R6-EL-NEXT:    .reloc ($tmp0), R_MIPS_JALR, foo2
69 ; MIPS32R6-EL-NEXT:  $tmp0:
70 ; MIPS32R6-EL-NEXT:    jalrc $25
71 ; MIPS32R6-EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
72 ; MIPS32R6-EL-NEXT:    jr $ra
73 ; MIPS32R6-EL-NEXT:    addiu $sp, $sp, 24
75 ; MIPS32R6-EB-LABEL: bar1:
76 ; MIPS32R6-EB:       # %bb.0: # %entry
77 ; MIPS32R6-EB-NEXT:    lui $2, %hi(_gp_disp)
78 ; MIPS32R6-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
79 ; MIPS32R6-EB-NEXT:    addiu $sp, $sp, -24
80 ; MIPS32R6-EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
81 ; MIPS32R6-EB-NEXT:    addu $gp, $2, $25
82 ; MIPS32R6-EB-NEXT:    lw $1, %got(s2)($gp)
83 ; MIPS32R6-EB-NEXT:    lhu $1, 2($1)
84 ; MIPS32R6-EB-NEXT:    lw $25, %call16(foo2)($gp)
85 ; MIPS32R6-EB-NEXT:    .reloc ($tmp0), R_MIPS_JALR, foo2
86 ; MIPS32R6-EB-NEXT:  $tmp0:
87 ; MIPS32R6-EB-NEXT:    jalr $25
88 ; MIPS32R6-EB-NEXT:    sll $4, $1, 16
89 ; MIPS32R6-EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
90 ; MIPS32R6-EB-NEXT:    jr $ra
91 ; MIPS32R6-EB-NEXT:    addiu $sp, $sp, 24
92 entry:
93   tail call void @foo2(ptr byval(%struct.S1) getelementptr inbounds (%struct.S2, ptr @s2, i32 0, i32 1)) nounwind
94   ret void
97 ; FIXME: We should be able to do better than this using lhu
98 define void @bar2() nounwind {
99 ; MIPS32-EL-LABEL: bar2:
100 ; MIPS32-EL:       # %bb.0: # %entry
101 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
102 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
103 ; MIPS32-EL-NEXT:    addiu $sp, $sp, -24
104 ; MIPS32-EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
105 ; MIPS32-EL-NEXT:    addu $gp, $2, $25
106 ; MIPS32-EL-NEXT:    lw $1, %got(s4)($gp)
107 ; MIPS32-EL-NEXT:    lwl $4, 3($1)
108 ; MIPS32-EL-NEXT:    lwr $4, 0($1)
109 ; MIPS32-EL-NEXT:    lbu $2, 4($1)
110 ; MIPS32-EL-NEXT:    lbu $3, 5($1)
111 ; MIPS32-EL-NEXT:    sll $3, $3, 8
112 ; MIPS32-EL-NEXT:    or $2, $3, $2
113 ; MIPS32-EL-NEXT:    lbu $1, 6($1)
114 ; MIPS32-EL-NEXT:    sll $1, $1, 16
115 ; MIPS32-EL-NEXT:    lw $25, %call16(foo4)($gp)
116 ; MIPS32-EL-NEXT:    .reloc ($tmp1), R_MIPS_JALR, foo4
117 ; MIPS32-EL-NEXT:  $tmp1:
118 ; MIPS32-EL-NEXT:    jalr $25
119 ; MIPS32-EL-NEXT:    or $5, $2, $1
120 ; MIPS32-EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
121 ; MIPS32-EL-NEXT:    jr $ra
122 ; MIPS32-EL-NEXT:    addiu $sp, $sp, 24
124 ; MIPS32-EB-LABEL: bar2:
125 ; MIPS32-EB:       # %bb.0: # %entry
126 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
127 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
128 ; MIPS32-EB-NEXT:    addiu $sp, $sp, -24
129 ; MIPS32-EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
130 ; MIPS32-EB-NEXT:    addu $gp, $2, $25
131 ; MIPS32-EB-NEXT:    lw $1, %got(s4)($gp)
132 ; MIPS32-EB-NEXT:    lwl $4, 0($1)
133 ; MIPS32-EB-NEXT:    lbu $2, 5($1)
134 ; MIPS32-EB-NEXT:    lwr $4, 3($1)
135 ; MIPS32-EB-NEXT:    sll $2, $2, 16
136 ; MIPS32-EB-NEXT:    lbu $3, 4($1)
137 ; MIPS32-EB-NEXT:    sll $3, $3, 24
138 ; MIPS32-EB-NEXT:    or $2, $3, $2
139 ; MIPS32-EB-NEXT:    lbu $1, 6($1)
140 ; MIPS32-EB-NEXT:    sll $1, $1, 8
141 ; MIPS32-EB-NEXT:    lw $25, %call16(foo4)($gp)
142 ; MIPS32-EB-NEXT:    .reloc ($tmp1), R_MIPS_JALR, foo4
143 ; MIPS32-EB-NEXT:  $tmp1:
144 ; MIPS32-EB-NEXT:    jalr $25
145 ; MIPS32-EB-NEXT:    or $5, $2, $1
146 ; MIPS32-EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
147 ; MIPS32-EB-NEXT:    jr $ra
148 ; MIPS32-EB-NEXT:    addiu $sp, $sp, 24
150 ; MIPS32R6-EL-LABEL: bar2:
151 ; MIPS32R6-EL:       # %bb.0: # %entry
152 ; MIPS32R6-EL-NEXT:    lui $2, %hi(_gp_disp)
153 ; MIPS32R6-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
154 ; MIPS32R6-EL-NEXT:    addiu $sp, $sp, -24
155 ; MIPS32R6-EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
156 ; MIPS32R6-EL-NEXT:    addu $gp, $2, $25
157 ; MIPS32R6-EL-NEXT:    lw $1, %got(s4)($gp)
158 ; MIPS32R6-EL-NEXT:    lhu $2, 4($1)
159 ; MIPS32R6-EL-NEXT:    lbu $3, 6($1)
160 ; MIPS32R6-EL-NEXT:    sll $3, $3, 16
161 ; MIPS32R6-EL-NEXT:    lw $4, 0($1)
162 ; MIPS32R6-EL-NEXT:    lw $25, %call16(foo4)($gp)
163 ; MIPS32R6-EL-NEXT:    .reloc ($tmp1), R_MIPS_JALR, foo4
164 ; MIPS32R6-EL-NEXT:  $tmp1:
165 ; MIPS32R6-EL-NEXT:    jalr $25
166 ; MIPS32R6-EL-NEXT:    or $5, $2, $3
167 ; MIPS32R6-EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
168 ; MIPS32R6-EL-NEXT:    jr $ra
169 ; MIPS32R6-EL-NEXT:    addiu $sp, $sp, 24
171 ; MIPS32R6-EB-LABEL: bar2:
172 ; MIPS32R6-EB:       # %bb.0: # %entry
173 ; MIPS32R6-EB-NEXT:    lui $2, %hi(_gp_disp)
174 ; MIPS32R6-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
175 ; MIPS32R6-EB-NEXT:    addiu $sp, $sp, -24
176 ; MIPS32R6-EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
177 ; MIPS32R6-EB-NEXT:    addu $gp, $2, $25
178 ; MIPS32R6-EB-NEXT:    lw $1, %got(s4)($gp)
179 ; MIPS32R6-EB-NEXT:    lbu $2, 6($1)
180 ; MIPS32R6-EB-NEXT:    sll $2, $2, 8
181 ; MIPS32R6-EB-NEXT:    lhu $3, 4($1)
182 ; MIPS32R6-EB-NEXT:    sll $3, $3, 16
183 ; MIPS32R6-EB-NEXT:    lw $4, 0($1)
184 ; MIPS32R6-EB-NEXT:    lw $25, %call16(foo4)($gp)
185 ; MIPS32R6-EB-NEXT:    .reloc ($tmp1), R_MIPS_JALR, foo4
186 ; MIPS32R6-EB-NEXT:  $tmp1:
187 ; MIPS32R6-EB-NEXT:    jalr $25
188 ; MIPS32R6-EB-NEXT:    or $5, $3, $2
189 ; MIPS32R6-EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
190 ; MIPS32R6-EB-NEXT:    jr $ra
191 ; MIPS32R6-EB-NEXT:    addiu $sp, $sp, 24
192 entry:
193   tail call void @foo4(ptr byval(%struct.S4) @s4) nounwind
194   ret void
197 declare void @foo2(ptr byval(%struct.S1))
198 declare void @foo4(ptr byval(%struct.S4))