• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc  < %s -mtriple=mips-mti-linux-gnu -relocation-model=static \
3; RUN:   -mips-tail-calls=1 -mcpu=mips32r2 -mattr=+use-indirect-jump-hazard \
4; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=MIPS32R2
5; RUN: llc  < %s -mtriple=mips-img-linux-gnu -relocation-model=static \
6; RUN:   -mips-tail-calls=1 -mcpu=mips32r6 -mattr=+use-indirect-jump-hazard \
7; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=MIPS32R6
8; RUN: llc  < %s -mtriple=mips64-mti-linux-gnu -relocation-model=static \
9; RUN:   -mips-tail-calls=1 -mcpu=mips64r2 -mattr=+use-indirect-jump-hazard \
10; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=MIPS64R2
11; RUN: llc  < %s -mtriple=mips64-img-linux-gnu -relocation-model=static \
12; RUN:   -mips-tail-calls=1 -mcpu=mips64r6 -mattr=+use-indirect-jump-hazard \
13; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=MIPS64R6
14
15; RUN: llc  < %s -mtriple=mips-mti-linux-gnu -relocation-model=pic \
16; RUN:   -mips-tail-calls=1 -mcpu=mips32r2 -mattr=+use-indirect-jump-hazard \
17; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=PIC-MIPS32R2
18; RUN: llc  < %s -mtriple=mips-img-linux-gnu -relocation-model=pic \
19; RUN:   -mips-tail-calls=1 -mcpu=mips32r6 -mattr=+use-indirect-jump-hazard \
20; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=PIC-MIPS32R6
21; RUN: llc  < %s -mtriple=mips64-mti-linux-gnu -relocation-model=pic \
22; RUN:   -mips-tail-calls=1 -mcpu=mips64r2 -mattr=+use-indirect-jump-hazard \
23; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=PIC-MIPS64R2
24; RUN: llc  < %s -mtriple=mips64-img-linux-gnu -relocation-model=pic \
25; RUN:   -mips-tail-calls=1 -mcpu=mips64r6 -mattr=+use-indirect-jump-hazard \
26; RUN:   -verify-machineinstrs | FileCheck %s --check-prefix=PIC-MIPS64R6
27
28@.str = private unnamed_addr constant [2 x i8] c"A\00", align 1
29@.str.1 = private unnamed_addr constant [2 x i8] c"B\00", align 1
30@.str.2 = private unnamed_addr constant [2 x i8] c"C\00", align 1
31@.str.3 = private unnamed_addr constant [2 x i8] c"D\00", align 1
32@.str.4 = private unnamed_addr constant [2 x i8] c"E\00", align 1
33@.str.5 = private unnamed_addr constant [2 x i8] c"F\00", align 1
34@.str.6 = private unnamed_addr constant [2 x i8] c"G\00", align 1
35@.str.7 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
36
37define i8* @_Z3fooi(i32 signext %Letter) {
38; MIPS32R2-LABEL: _Z3fooi:
39; MIPS32R2:       # %bb.0: # %entry
40; MIPS32R2-NEXT:    addiu $sp, $sp, -16
41; MIPS32R2-NEXT:    .cfi_def_cfa_offset 16
42; MIPS32R2-NEXT:    sltiu $1, $4, 7
43; MIPS32R2-NEXT:    beqz $1, $BB0_3
44; MIPS32R2-NEXT:    sw $4, 4($sp)
45; MIPS32R2-NEXT:  $BB0_1: # %entry
46; MIPS32R2-NEXT:    sll $1, $4, 2
47; MIPS32R2-NEXT:    lui $2, %hi($JTI0_0)
48; MIPS32R2-NEXT:    addu $1, $1, $2
49; MIPS32R2-NEXT:    lw $1, %lo($JTI0_0)($1)
50; MIPS32R2-NEXT:    jr.hb $1
51; MIPS32R2-NEXT:    nop
52; MIPS32R2-NEXT:  $BB0_2: # %sw.bb
53; MIPS32R2-NEXT:    lui $1, %hi($.str)
54; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str)
55; MIPS32R2-NEXT:    j $BB0_10
56; MIPS32R2-NEXT:    sw $1, 8($sp)
57; MIPS32R2-NEXT:  $BB0_3: # %sw.epilog
58; MIPS32R2-NEXT:    lui $1, %hi($.str.7)
59; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.7)
60; MIPS32R2-NEXT:    j $BB0_10
61; MIPS32R2-NEXT:    sw $1, 8($sp)
62; MIPS32R2-NEXT:  $BB0_4: # %sw.bb1
63; MIPS32R2-NEXT:    lui $1, %hi($.str.1)
64; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.1)
65; MIPS32R2-NEXT:    j $BB0_10
66; MIPS32R2-NEXT:    sw $1, 8($sp)
67; MIPS32R2-NEXT:  $BB0_5: # %sw.bb2
68; MIPS32R2-NEXT:    lui $1, %hi($.str.2)
69; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.2)
70; MIPS32R2-NEXT:    j $BB0_10
71; MIPS32R2-NEXT:    sw $1, 8($sp)
72; MIPS32R2-NEXT:  $BB0_6: # %sw.bb3
73; MIPS32R2-NEXT:    lui $1, %hi($.str.3)
74; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.3)
75; MIPS32R2-NEXT:    j $BB0_10
76; MIPS32R2-NEXT:    sw $1, 8($sp)
77; MIPS32R2-NEXT:  $BB0_7: # %sw.bb4
78; MIPS32R2-NEXT:    lui $1, %hi($.str.4)
79; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.4)
80; MIPS32R2-NEXT:    j $BB0_10
81; MIPS32R2-NEXT:    sw $1, 8($sp)
82; MIPS32R2-NEXT:  $BB0_8: # %sw.bb5
83; MIPS32R2-NEXT:    lui $1, %hi($.str.5)
84; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.5)
85; MIPS32R2-NEXT:    j $BB0_10
86; MIPS32R2-NEXT:    sw $1, 8($sp)
87; MIPS32R2-NEXT:  $BB0_9: # %sw.bb6
88; MIPS32R2-NEXT:    lui $1, %hi($.str.6)
89; MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.6)
90; MIPS32R2-NEXT:    sw $1, 8($sp)
91; MIPS32R2-NEXT:  $BB0_10: # %return
92; MIPS32R2-NEXT:    lw $2, 8($sp)
93; MIPS32R2-NEXT:    jr $ra
94; MIPS32R2-NEXT:    addiu $sp, $sp, 16
95;
96; MIPS32R6-LABEL: _Z3fooi:
97; MIPS32R6:       # %bb.0: # %entry
98; MIPS32R6-NEXT:    addiu $sp, $sp, -16
99; MIPS32R6-NEXT:    .cfi_def_cfa_offset 16
100; MIPS32R6-NEXT:    sltiu $1, $4, 7
101; MIPS32R6-NEXT:    beqz $1, $BB0_3
102; MIPS32R6-NEXT:    sw $4, 4($sp)
103; MIPS32R6-NEXT:  $BB0_1: # %entry
104; MIPS32R6-NEXT:    sll $1, $4, 2
105; MIPS32R6-NEXT:    lui $2, %hi($JTI0_0)
106; MIPS32R6-NEXT:    addu $1, $1, $2
107; MIPS32R6-NEXT:    lw $1, %lo($JTI0_0)($1)
108; MIPS32R6-NEXT:    jr.hb $1
109; MIPS32R6-NEXT:    nop
110; MIPS32R6-NEXT:  $BB0_2: # %sw.bb
111; MIPS32R6-NEXT:    lui $1, %hi($.str)
112; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str)
113; MIPS32R6-NEXT:    j $BB0_10
114; MIPS32R6-NEXT:    sw $1, 8($sp)
115; MIPS32R6-NEXT:  $BB0_3: # %sw.epilog
116; MIPS32R6-NEXT:    lui $1, %hi($.str.7)
117; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.7)
118; MIPS32R6-NEXT:    j $BB0_10
119; MIPS32R6-NEXT:    sw $1, 8($sp)
120; MIPS32R6-NEXT:  $BB0_4: # %sw.bb1
121; MIPS32R6-NEXT:    lui $1, %hi($.str.1)
122; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.1)
123; MIPS32R6-NEXT:    j $BB0_10
124; MIPS32R6-NEXT:    sw $1, 8($sp)
125; MIPS32R6-NEXT:  $BB0_5: # %sw.bb2
126; MIPS32R6-NEXT:    lui $1, %hi($.str.2)
127; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.2)
128; MIPS32R6-NEXT:    j $BB0_10
129; MIPS32R6-NEXT:    sw $1, 8($sp)
130; MIPS32R6-NEXT:  $BB0_6: # %sw.bb3
131; MIPS32R6-NEXT:    lui $1, %hi($.str.3)
132; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.3)
133; MIPS32R6-NEXT:    j $BB0_10
134; MIPS32R6-NEXT:    sw $1, 8($sp)
135; MIPS32R6-NEXT:  $BB0_7: # %sw.bb4
136; MIPS32R6-NEXT:    lui $1, %hi($.str.4)
137; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.4)
138; MIPS32R6-NEXT:    j $BB0_10
139; MIPS32R6-NEXT:    sw $1, 8($sp)
140; MIPS32R6-NEXT:  $BB0_8: # %sw.bb5
141; MIPS32R6-NEXT:    lui $1, %hi($.str.5)
142; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.5)
143; MIPS32R6-NEXT:    j $BB0_10
144; MIPS32R6-NEXT:    sw $1, 8($sp)
145; MIPS32R6-NEXT:  $BB0_9: # %sw.bb6
146; MIPS32R6-NEXT:    lui $1, %hi($.str.6)
147; MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.6)
148; MIPS32R6-NEXT:    sw $1, 8($sp)
149; MIPS32R6-NEXT:  $BB0_10: # %return
150; MIPS32R6-NEXT:    lw $2, 8($sp)
151; MIPS32R6-NEXT:    jr $ra
152; MIPS32R6-NEXT:    addiu $sp, $sp, 16
153;
154; MIPS64R2-LABEL: _Z3fooi:
155; MIPS64R2:       # %bb.0: # %entry
156; MIPS64R2-NEXT:    daddiu $sp, $sp, -16
157; MIPS64R2-NEXT:    .cfi_def_cfa_offset 16
158; MIPS64R2-NEXT:    sw $4, 4($sp)
159; MIPS64R2-NEXT:    lwu $2, 4($sp)
160; MIPS64R2-NEXT:    sltiu $1, $2, 7
161; MIPS64R2-NEXT:    beqz $1, .LBB0_3
162; MIPS64R2-NEXT:    nop
163; MIPS64R2-NEXT:  .LBB0_1: # %entry
164; MIPS64R2-NEXT:    dsll $1, $2, 3
165; MIPS64R2-NEXT:    lui $2, %highest(.LJTI0_0)
166; MIPS64R2-NEXT:    daddiu $2, $2, %higher(.LJTI0_0)
167; MIPS64R2-NEXT:    dsll $2, $2, 16
168; MIPS64R2-NEXT:    daddiu $2, $2, %hi(.LJTI0_0)
169; MIPS64R2-NEXT:    dsll $2, $2, 16
170; MIPS64R2-NEXT:    daddu $1, $1, $2
171; MIPS64R2-NEXT:    ld $1, %lo(.LJTI0_0)($1)
172; MIPS64R2-NEXT:    jr.hb $1
173; MIPS64R2-NEXT:    nop
174; MIPS64R2-NEXT:  .LBB0_2: # %sw.bb
175; MIPS64R2-NEXT:    lui $1, %highest(.L.str)
176; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str)
177; MIPS64R2-NEXT:    dsll $1, $1, 16
178; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str)
179; MIPS64R2-NEXT:    dsll $1, $1, 16
180; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str)
181; MIPS64R2-NEXT:    j .LBB0_10
182; MIPS64R2-NEXT:    sd $1, 8($sp)
183; MIPS64R2-NEXT:  .LBB0_3: # %sw.epilog
184; MIPS64R2-NEXT:    lui $1, %highest(.L.str.7)
185; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.7)
186; MIPS64R2-NEXT:    dsll $1, $1, 16
187; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.7)
188; MIPS64R2-NEXT:    dsll $1, $1, 16
189; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.7)
190; MIPS64R2-NEXT:    j .LBB0_10
191; MIPS64R2-NEXT:    sd $1, 8($sp)
192; MIPS64R2-NEXT:  .LBB0_4: # %sw.bb1
193; MIPS64R2-NEXT:    lui $1, %highest(.L.str.1)
194; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.1)
195; MIPS64R2-NEXT:    dsll $1, $1, 16
196; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.1)
197; MIPS64R2-NEXT:    dsll $1, $1, 16
198; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.1)
199; MIPS64R2-NEXT:    j .LBB0_10
200; MIPS64R2-NEXT:    sd $1, 8($sp)
201; MIPS64R2-NEXT:  .LBB0_5: # %sw.bb2
202; MIPS64R2-NEXT:    lui $1, %highest(.L.str.2)
203; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.2)
204; MIPS64R2-NEXT:    dsll $1, $1, 16
205; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.2)
206; MIPS64R2-NEXT:    dsll $1, $1, 16
207; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.2)
208; MIPS64R2-NEXT:    j .LBB0_10
209; MIPS64R2-NEXT:    sd $1, 8($sp)
210; MIPS64R2-NEXT:  .LBB0_6: # %sw.bb3
211; MIPS64R2-NEXT:    lui $1, %highest(.L.str.3)
212; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.3)
213; MIPS64R2-NEXT:    dsll $1, $1, 16
214; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.3)
215; MIPS64R2-NEXT:    dsll $1, $1, 16
216; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.3)
217; MIPS64R2-NEXT:    j .LBB0_10
218; MIPS64R2-NEXT:    sd $1, 8($sp)
219; MIPS64R2-NEXT:  .LBB0_7: # %sw.bb4
220; MIPS64R2-NEXT:    lui $1, %highest(.L.str.4)
221; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.4)
222; MIPS64R2-NEXT:    dsll $1, $1, 16
223; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.4)
224; MIPS64R2-NEXT:    dsll $1, $1, 16
225; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.4)
226; MIPS64R2-NEXT:    j .LBB0_10
227; MIPS64R2-NEXT:    sd $1, 8($sp)
228; MIPS64R2-NEXT:  .LBB0_8: # %sw.bb5
229; MIPS64R2-NEXT:    lui $1, %highest(.L.str.5)
230; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.5)
231; MIPS64R2-NEXT:    dsll $1, $1, 16
232; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.5)
233; MIPS64R2-NEXT:    dsll $1, $1, 16
234; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.5)
235; MIPS64R2-NEXT:    j .LBB0_10
236; MIPS64R2-NEXT:    sd $1, 8($sp)
237; MIPS64R2-NEXT:  .LBB0_9: # %sw.bb6
238; MIPS64R2-NEXT:    lui $1, %highest(.L.str.6)
239; MIPS64R2-NEXT:    daddiu $1, $1, %higher(.L.str.6)
240; MIPS64R2-NEXT:    dsll $1, $1, 16
241; MIPS64R2-NEXT:    daddiu $1, $1, %hi(.L.str.6)
242; MIPS64R2-NEXT:    dsll $1, $1, 16
243; MIPS64R2-NEXT:    daddiu $1, $1, %lo(.L.str.6)
244; MIPS64R2-NEXT:    sd $1, 8($sp)
245; MIPS64R2-NEXT:  .LBB0_10: # %return
246; MIPS64R2-NEXT:    ld $2, 8($sp)
247; MIPS64R2-NEXT:    jr $ra
248; MIPS64R2-NEXT:    daddiu $sp, $sp, 16
249;
250; MIPS64R6-LABEL: _Z3fooi:
251; MIPS64R6:       # %bb.0: # %entry
252; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
253; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
254; MIPS64R6-NEXT:    sw $4, 4($sp)
255; MIPS64R6-NEXT:    lwu $2, 4($sp)
256; MIPS64R6-NEXT:    sltiu $1, $2, 7
257; MIPS64R6-NEXT:    beqzc $1, .LBB0_3
258; MIPS64R6-NEXT:  .LBB0_1: # %entry
259; MIPS64R6-NEXT:    dsll $1, $2, 3
260; MIPS64R6-NEXT:    lui $2, %highest(.LJTI0_0)
261; MIPS64R6-NEXT:    daddiu $2, $2, %higher(.LJTI0_0)
262; MIPS64R6-NEXT:    dsll $2, $2, 16
263; MIPS64R6-NEXT:    daddiu $2, $2, %hi(.LJTI0_0)
264; MIPS64R6-NEXT:    dsll $2, $2, 16
265; MIPS64R6-NEXT:    daddu $1, $1, $2
266; MIPS64R6-NEXT:    ld $1, %lo(.LJTI0_0)($1)
267; MIPS64R6-NEXT:    jr.hb $1
268; MIPS64R6-NEXT:    nop
269; MIPS64R6-NEXT:  .LBB0_2: # %sw.bb
270; MIPS64R6-NEXT:    lui $1, %highest(.L.str)
271; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str)
272; MIPS64R6-NEXT:    dsll $1, $1, 16
273; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str)
274; MIPS64R6-NEXT:    dsll $1, $1, 16
275; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str)
276; MIPS64R6-NEXT:    j .LBB0_10
277; MIPS64R6-NEXT:    sd $1, 8($sp)
278; MIPS64R6-NEXT:  .LBB0_3: # %sw.epilog
279; MIPS64R6-NEXT:    lui $1, %highest(.L.str.7)
280; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.7)
281; MIPS64R6-NEXT:    dsll $1, $1, 16
282; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.7)
283; MIPS64R6-NEXT:    dsll $1, $1, 16
284; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.7)
285; MIPS64R6-NEXT:    j .LBB0_10
286; MIPS64R6-NEXT:    sd $1, 8($sp)
287; MIPS64R6-NEXT:  .LBB0_4: # %sw.bb1
288; MIPS64R6-NEXT:    lui $1, %highest(.L.str.1)
289; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.1)
290; MIPS64R6-NEXT:    dsll $1, $1, 16
291; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.1)
292; MIPS64R6-NEXT:    dsll $1, $1, 16
293; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.1)
294; MIPS64R6-NEXT:    j .LBB0_10
295; MIPS64R6-NEXT:    sd $1, 8($sp)
296; MIPS64R6-NEXT:  .LBB0_5: # %sw.bb2
297; MIPS64R6-NEXT:    lui $1, %highest(.L.str.2)
298; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.2)
299; MIPS64R6-NEXT:    dsll $1, $1, 16
300; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.2)
301; MIPS64R6-NEXT:    dsll $1, $1, 16
302; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.2)
303; MIPS64R6-NEXT:    j .LBB0_10
304; MIPS64R6-NEXT:    sd $1, 8($sp)
305; MIPS64R6-NEXT:  .LBB0_6: # %sw.bb3
306; MIPS64R6-NEXT:    lui $1, %highest(.L.str.3)
307; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.3)
308; MIPS64R6-NEXT:    dsll $1, $1, 16
309; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.3)
310; MIPS64R6-NEXT:    dsll $1, $1, 16
311; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.3)
312; MIPS64R6-NEXT:    j .LBB0_10
313; MIPS64R6-NEXT:    sd $1, 8($sp)
314; MIPS64R6-NEXT:  .LBB0_7: # %sw.bb4
315; MIPS64R6-NEXT:    lui $1, %highest(.L.str.4)
316; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.4)
317; MIPS64R6-NEXT:    dsll $1, $1, 16
318; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.4)
319; MIPS64R6-NEXT:    dsll $1, $1, 16
320; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.4)
321; MIPS64R6-NEXT:    j .LBB0_10
322; MIPS64R6-NEXT:    sd $1, 8($sp)
323; MIPS64R6-NEXT:  .LBB0_8: # %sw.bb5
324; MIPS64R6-NEXT:    lui $1, %highest(.L.str.5)
325; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.5)
326; MIPS64R6-NEXT:    dsll $1, $1, 16
327; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.5)
328; MIPS64R6-NEXT:    dsll $1, $1, 16
329; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.5)
330; MIPS64R6-NEXT:    j .LBB0_10
331; MIPS64R6-NEXT:    sd $1, 8($sp)
332; MIPS64R6-NEXT:  .LBB0_9: # %sw.bb6
333; MIPS64R6-NEXT:    lui $1, %highest(.L.str.6)
334; MIPS64R6-NEXT:    daddiu $1, $1, %higher(.L.str.6)
335; MIPS64R6-NEXT:    dsll $1, $1, 16
336; MIPS64R6-NEXT:    daddiu $1, $1, %hi(.L.str.6)
337; MIPS64R6-NEXT:    dsll $1, $1, 16
338; MIPS64R6-NEXT:    daddiu $1, $1, %lo(.L.str.6)
339; MIPS64R6-NEXT:    sd $1, 8($sp)
340; MIPS64R6-NEXT:  .LBB0_10: # %return
341; MIPS64R6-NEXT:    ld $2, 8($sp)
342; MIPS64R6-NEXT:    jr $ra
343; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
344;
345; PIC-MIPS32R2-LABEL: _Z3fooi:
346; PIC-MIPS32R2:       # %bb.0: # %entry
347; PIC-MIPS32R2-NEXT:    lui $2, %hi(_gp_disp)
348; PIC-MIPS32R2-NEXT:    addiu $2, $2, %lo(_gp_disp)
349; PIC-MIPS32R2-NEXT:    addiu $sp, $sp, -16
350; PIC-MIPS32R2-NEXT:    .cfi_def_cfa_offset 16
351; PIC-MIPS32R2-NEXT:    addu $2, $2, $25
352; PIC-MIPS32R2-NEXT:    sltiu $1, $4, 7
353; PIC-MIPS32R2-NEXT:    beqz $1, $BB0_3
354; PIC-MIPS32R2-NEXT:    sw $4, 4($sp)
355; PIC-MIPS32R2-NEXT:  $BB0_1: # %entry
356; PIC-MIPS32R2-NEXT:    sll $1, $4, 2
357; PIC-MIPS32R2-NEXT:    lw $3, %got($JTI0_0)($2)
358; PIC-MIPS32R2-NEXT:    addu $1, $1, $3
359; PIC-MIPS32R2-NEXT:    lw $1, %lo($JTI0_0)($1)
360; PIC-MIPS32R2-NEXT:    addu $1, $1, $2
361; PIC-MIPS32R2-NEXT:    jr.hb $1
362; PIC-MIPS32R2-NEXT:    nop
363; PIC-MIPS32R2-NEXT:  $BB0_2: # %sw.bb
364; PIC-MIPS32R2-NEXT:    lw $1, %got($.str)($2)
365; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str)
366; PIC-MIPS32R2-NEXT:    b $BB0_10
367; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
368; PIC-MIPS32R2-NEXT:  $BB0_3: # %sw.epilog
369; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.7)($2)
370; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.7)
371; PIC-MIPS32R2-NEXT:    b $BB0_10
372; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
373; PIC-MIPS32R2-NEXT:  $BB0_4: # %sw.bb1
374; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.1)($2)
375; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.1)
376; PIC-MIPS32R2-NEXT:    b $BB0_10
377; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
378; PIC-MIPS32R2-NEXT:  $BB0_5: # %sw.bb2
379; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.2)($2)
380; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.2)
381; PIC-MIPS32R2-NEXT:    b $BB0_10
382; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
383; PIC-MIPS32R2-NEXT:  $BB0_6: # %sw.bb3
384; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.3)($2)
385; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.3)
386; PIC-MIPS32R2-NEXT:    b $BB0_10
387; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
388; PIC-MIPS32R2-NEXT:  $BB0_7: # %sw.bb4
389; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.4)($2)
390; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.4)
391; PIC-MIPS32R2-NEXT:    b $BB0_10
392; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
393; PIC-MIPS32R2-NEXT:  $BB0_8: # %sw.bb5
394; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.5)($2)
395; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.5)
396; PIC-MIPS32R2-NEXT:    b $BB0_10
397; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
398; PIC-MIPS32R2-NEXT:  $BB0_9: # %sw.bb6
399; PIC-MIPS32R2-NEXT:    lw $1, %got($.str.6)($2)
400; PIC-MIPS32R2-NEXT:    addiu $1, $1, %lo($.str.6)
401; PIC-MIPS32R2-NEXT:    sw $1, 8($sp)
402; PIC-MIPS32R2-NEXT:  $BB0_10: # %return
403; PIC-MIPS32R2-NEXT:    lw $2, 8($sp)
404; PIC-MIPS32R2-NEXT:    jr $ra
405; PIC-MIPS32R2-NEXT:    addiu $sp, $sp, 16
406;
407; PIC-MIPS32R6-LABEL: _Z3fooi:
408; PIC-MIPS32R6:       # %bb.0: # %entry
409; PIC-MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
410; PIC-MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
411; PIC-MIPS32R6-NEXT:    addiu $sp, $sp, -16
412; PIC-MIPS32R6-NEXT:    .cfi_def_cfa_offset 16
413; PIC-MIPS32R6-NEXT:    addu $2, $2, $25
414; PIC-MIPS32R6-NEXT:    sltiu $1, $4, 7
415; PIC-MIPS32R6-NEXT:    beqz $1, $BB0_3
416; PIC-MIPS32R6-NEXT:    sw $4, 4($sp)
417; PIC-MIPS32R6-NEXT:  $BB0_1: # %entry
418; PIC-MIPS32R6-NEXT:    sll $1, $4, 2
419; PIC-MIPS32R6-NEXT:    lw $3, %got($JTI0_0)($2)
420; PIC-MIPS32R6-NEXT:    addu $1, $1, $3
421; PIC-MIPS32R6-NEXT:    lw $1, %lo($JTI0_0)($1)
422; PIC-MIPS32R6-NEXT:    addu $1, $1, $2
423; PIC-MIPS32R6-NEXT:    jr.hb $1
424; PIC-MIPS32R6-NEXT:    nop
425; PIC-MIPS32R6-NEXT:  $BB0_2: # %sw.bb
426; PIC-MIPS32R6-NEXT:    lw $1, %got($.str)($2)
427; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str)
428; PIC-MIPS32R6-NEXT:    b $BB0_10
429; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
430; PIC-MIPS32R6-NEXT:  $BB0_3: # %sw.epilog
431; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.7)($2)
432; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.7)
433; PIC-MIPS32R6-NEXT:    b $BB0_10
434; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
435; PIC-MIPS32R6-NEXT:  $BB0_4: # %sw.bb1
436; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.1)($2)
437; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.1)
438; PIC-MIPS32R6-NEXT:    b $BB0_10
439; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
440; PIC-MIPS32R6-NEXT:  $BB0_5: # %sw.bb2
441; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.2)($2)
442; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.2)
443; PIC-MIPS32R6-NEXT:    b $BB0_10
444; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
445; PIC-MIPS32R6-NEXT:  $BB0_6: # %sw.bb3
446; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.3)($2)
447; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.3)
448; PIC-MIPS32R6-NEXT:    b $BB0_10
449; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
450; PIC-MIPS32R6-NEXT:  $BB0_7: # %sw.bb4
451; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.4)($2)
452; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.4)
453; PIC-MIPS32R6-NEXT:    b $BB0_10
454; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
455; PIC-MIPS32R6-NEXT:  $BB0_8: # %sw.bb5
456; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.5)($2)
457; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.5)
458; PIC-MIPS32R6-NEXT:    b $BB0_10
459; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
460; PIC-MIPS32R6-NEXT:  $BB0_9: # %sw.bb6
461; PIC-MIPS32R6-NEXT:    lw $1, %got($.str.6)($2)
462; PIC-MIPS32R6-NEXT:    addiu $1, $1, %lo($.str.6)
463; PIC-MIPS32R6-NEXT:    sw $1, 8($sp)
464; PIC-MIPS32R6-NEXT:  $BB0_10: # %return
465; PIC-MIPS32R6-NEXT:    lw $2, 8($sp)
466; PIC-MIPS32R6-NEXT:    jr $ra
467; PIC-MIPS32R6-NEXT:    addiu $sp, $sp, 16
468;
469; PIC-MIPS64R2-LABEL: _Z3fooi:
470; PIC-MIPS64R2:       # %bb.0: # %entry
471; PIC-MIPS64R2-NEXT:    daddiu $sp, $sp, -16
472; PIC-MIPS64R2-NEXT:    .cfi_def_cfa_offset 16
473; PIC-MIPS64R2-NEXT:    lui $1, %hi(%neg(%gp_rel(_Z3fooi)))
474; PIC-MIPS64R2-NEXT:    daddu $1, $1, $25
475; PIC-MIPS64R2-NEXT:    daddiu $2, $1, %lo(%neg(%gp_rel(_Z3fooi)))
476; PIC-MIPS64R2-NEXT:    sw $4, 4($sp)
477; PIC-MIPS64R2-NEXT:    lwu $3, 4($sp)
478; PIC-MIPS64R2-NEXT:    sltiu $1, $3, 7
479; PIC-MIPS64R2-NEXT:    beqz $1, .LBB0_3
480; PIC-MIPS64R2-NEXT:    nop
481; PIC-MIPS64R2-NEXT:  .LBB0_1: # %entry
482; PIC-MIPS64R2-NEXT:    dsll $1, $3, 3
483; PIC-MIPS64R2-NEXT:    ld $3, %got_page(.LJTI0_0)($2)
484; PIC-MIPS64R2-NEXT:    daddu $1, $1, $3
485; PIC-MIPS64R2-NEXT:    ld $1, %got_ofst(.LJTI0_0)($1)
486; PIC-MIPS64R2-NEXT:    daddu $1, $1, $2
487; PIC-MIPS64R2-NEXT:    jr.hb $1
488; PIC-MIPS64R2-NEXT:    nop
489; PIC-MIPS64R2-NEXT:  .LBB0_2: # %sw.bb
490; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str)($2)
491; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str)
492; PIC-MIPS64R2-NEXT:    b .LBB0_10
493; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
494; PIC-MIPS64R2-NEXT:  .LBB0_3: # %sw.epilog
495; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.7)($2)
496; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.7)
497; PIC-MIPS64R2-NEXT:    b .LBB0_10
498; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
499; PIC-MIPS64R2-NEXT:  .LBB0_4: # %sw.bb1
500; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.1)($2)
501; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.1)
502; PIC-MIPS64R2-NEXT:    b .LBB0_10
503; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
504; PIC-MIPS64R2-NEXT:  .LBB0_5: # %sw.bb2
505; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.2)($2)
506; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.2)
507; PIC-MIPS64R2-NEXT:    b .LBB0_10
508; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
509; PIC-MIPS64R2-NEXT:  .LBB0_6: # %sw.bb3
510; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.3)($2)
511; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.3)
512; PIC-MIPS64R2-NEXT:    b .LBB0_10
513; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
514; PIC-MIPS64R2-NEXT:  .LBB0_7: # %sw.bb4
515; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.4)($2)
516; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.4)
517; PIC-MIPS64R2-NEXT:    b .LBB0_10
518; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
519; PIC-MIPS64R2-NEXT:  .LBB0_8: # %sw.bb5
520; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.5)($2)
521; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.5)
522; PIC-MIPS64R2-NEXT:    b .LBB0_10
523; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
524; PIC-MIPS64R2-NEXT:  .LBB0_9: # %sw.bb6
525; PIC-MIPS64R2-NEXT:    ld $1, %got_page(.L.str.6)($2)
526; PIC-MIPS64R2-NEXT:    daddiu $1, $1, %got_ofst(.L.str.6)
527; PIC-MIPS64R2-NEXT:    sd $1, 8($sp)
528; PIC-MIPS64R2-NEXT:  .LBB0_10: # %return
529; PIC-MIPS64R2-NEXT:    ld $2, 8($sp)
530; PIC-MIPS64R2-NEXT:    jr $ra
531; PIC-MIPS64R2-NEXT:    daddiu $sp, $sp, 16
532;
533; PIC-MIPS64R6-LABEL: _Z3fooi:
534; PIC-MIPS64R6:       # %bb.0: # %entry
535; PIC-MIPS64R6-NEXT:    daddiu $sp, $sp, -16
536; PIC-MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
537; PIC-MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(_Z3fooi)))
538; PIC-MIPS64R6-NEXT:    daddu $1, $1, $25
539; PIC-MIPS64R6-NEXT:    daddiu $2, $1, %lo(%neg(%gp_rel(_Z3fooi)))
540; PIC-MIPS64R6-NEXT:    sw $4, 4($sp)
541; PIC-MIPS64R6-NEXT:    lwu $3, 4($sp)
542; PIC-MIPS64R6-NEXT:    sltiu $1, $3, 7
543; PIC-MIPS64R6-NEXT:    beqzc $1, .LBB0_3
544; PIC-MIPS64R6-NEXT:  .LBB0_1: # %entry
545; PIC-MIPS64R6-NEXT:    dsll $1, $3, 3
546; PIC-MIPS64R6-NEXT:    ld $3, %got_page(.LJTI0_0)($2)
547; PIC-MIPS64R6-NEXT:    daddu $1, $1, $3
548; PIC-MIPS64R6-NEXT:    ld $1, %got_ofst(.LJTI0_0)($1)
549; PIC-MIPS64R6-NEXT:    daddu $1, $1, $2
550; PIC-MIPS64R6-NEXT:    jr.hb $1
551; PIC-MIPS64R6-NEXT:    nop
552; PIC-MIPS64R6-NEXT:  .LBB0_2: # %sw.bb
553; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str)($2)
554; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str)
555; PIC-MIPS64R6-NEXT:    b .LBB0_10
556; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
557; PIC-MIPS64R6-NEXT:  .LBB0_3: # %sw.epilog
558; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.7)($2)
559; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.7)
560; PIC-MIPS64R6-NEXT:    b .LBB0_10
561; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
562; PIC-MIPS64R6-NEXT:  .LBB0_4: # %sw.bb1
563; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.1)($2)
564; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.1)
565; PIC-MIPS64R6-NEXT:    b .LBB0_10
566; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
567; PIC-MIPS64R6-NEXT:  .LBB0_5: # %sw.bb2
568; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.2)($2)
569; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.2)
570; PIC-MIPS64R6-NEXT:    b .LBB0_10
571; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
572; PIC-MIPS64R6-NEXT:  .LBB0_6: # %sw.bb3
573; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.3)($2)
574; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.3)
575; PIC-MIPS64R6-NEXT:    b .LBB0_10
576; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
577; PIC-MIPS64R6-NEXT:  .LBB0_7: # %sw.bb4
578; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.4)($2)
579; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.4)
580; PIC-MIPS64R6-NEXT:    b .LBB0_10
581; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
582; PIC-MIPS64R6-NEXT:  .LBB0_8: # %sw.bb5
583; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.5)($2)
584; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.5)
585; PIC-MIPS64R6-NEXT:    b .LBB0_10
586; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
587; PIC-MIPS64R6-NEXT:  .LBB0_9: # %sw.bb6
588; PIC-MIPS64R6-NEXT:    ld $1, %got_page(.L.str.6)($2)
589; PIC-MIPS64R6-NEXT:    daddiu $1, $1, %got_ofst(.L.str.6)
590; PIC-MIPS64R6-NEXT:    sd $1, 8($sp)
591; PIC-MIPS64R6-NEXT:  .LBB0_10: # %return
592; PIC-MIPS64R6-NEXT:    ld $2, 8($sp)
593; PIC-MIPS64R6-NEXT:    jr $ra
594; PIC-MIPS64R6-NEXT:    daddiu $sp, $sp, 16
595entry:
596  %retval = alloca i8*, align 8
597  %Letter.addr = alloca i32, align 4
598  store i32 %Letter, i32* %Letter.addr, align 4
599  %0 = load i32, i32* %Letter.addr, align 4
600  switch i32 %0, label %sw.epilog [
601    i32 0, label %sw.bb
602    i32 1, label %sw.bb1
603    i32 2, label %sw.bb2
604    i32 3, label %sw.bb3
605    i32 4, label %sw.bb4
606    i32 5, label %sw.bb5
607    i32 6, label %sw.bb6
608  ]
609
610sw.bb:
611  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i8** %retval, align 8
612  br label %return
613
614sw.bb1:
615  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i32 0, i32 0), i8** %retval, align 8
616  br label %return
617
618sw.bb2:
619  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i32 0, i32 0), i8** %retval, align 8
620  br label %return
621
622sw.bb3:
623  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i32 0, i32 0), i8** %retval, align 8
624  br label %return
625
626sw.bb4:
627  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.4, i32 0, i32 0), i8** %retval, align 8
628  br label %return
629
630sw.bb5:
631  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i32 0, i32 0), i8** %retval, align 8
632  br label %return
633
634sw.bb6:
635  store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i32 0, i32 0), i8** %retval, align 8
636  br label %return
637
638sw.epilog:
639  store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i32 0, i32 0), i8** %retval, align 8
640  br label %return
641
642return:
643  %1 = load i8*, i8** %retval, align 8
644  ret i8* %1
645}
646