• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3; RUN:     -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
4; RUN:     FileCheck %s
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
6; RUN:     -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
7; RUN:     FileCheck %s --check-prefix=CHECK-BE
8
9; This test case tests spilling the CR UN bit on Power10. On Power10, this is
10; achieved by setb %reg, %CRREG (un bit) -> stw %reg, $FI instead of:
11; mfocrf %reg, %CRREG -> rlwinm %reg1, %reg, $SH, 0, 0 -> stw %reg1, $FI.
12
13; Without fine-grained control over clobbering individual CR bits,
14; it is difficult to produce a concise test case that will ensure a specific
15; bit of any CR field is spilled. We need to test the spilling of a CR bit
16; other than the LT bit. Hence this test case is rather complex.
17
18%0 = type { i32, [768 x i8], [768 x i8], [1024 x i8], [768 x i8], [768 x i8], [768 x i8], [768 x i8], [768 x i8], [1024 x i8], [1024 x i8], i32, i16, i16, i16, i16, i16, i16, i32, i32, i32, i16, i16, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, [64 x i8], i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i32, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, float, float, i32, i16, i16, float, i16, i16, i16, i16}
19%1 = type opaque
20%2 = type { i8* }
21%3 = type { %3*, %3*, %4* (i8*)*, %2, i32, %2, %2*, i8*, double*, float*, i8*, i8*, %4* }
22%4 = type { %4*, %4*, %4*, i32, i32, i32, i32, i32, i8*, [3 x float], i8, [64 x i8] }
23
24@global_1 = external dso_local unnamed_addr constant [1 x i8], align 1
25@global_2 = external local_unnamed_addr global %0, align 8
26@global_3 = external local_unnamed_addr global i8* (i64, i8*)*, align 8
27@global_4 = external dso_local unnamed_addr constant [14 x i8], align 1
28
29declare i8 @call_1(%1*) local_unnamed_addr
30declare i32 @call_2(%2*, %1*) local_unnamed_addr
31declare i32 @call_3(%2*, %1*) local_unnamed_addr
32declare %3* @call_4(%4*, i32, i32, i32, i32, i32, i16, i16, %2*, %1*, i32, float, float, float, float, i8*) local_unnamed_addr
33declare i32 @call_5(i8*) local_unnamed_addr
34declare i8 @call_6(%1*, i32) local_unnamed_addr
35
36define dso_local void @P10_Spill_CR_UN(%2* %arg, %1* %arg1, i32 %arg2) local_unnamed_addr {
37; CHECK-LABEL: P10_Spill_CR_UN:
38; CHECK:         .localentry P10_Spill_CR_UN, 1
39; CHECK-NEXT:  # %bb.0: # %bb
40; CHECK-NEXT:    mflr r0
41; CHECK-NEXT:    mfcr r12
42; CHECK-NEXT:    std r0, 16(r1)
43; CHECK-NEXT:    stw r12, 8(r1)
44; CHECK-NEXT:    stdu r1, -224(r1)
45; CHECK-NEXT:    .cfi_def_cfa_offset 224
46; CHECK-NEXT:    .cfi_offset lr, 16
47; CHECK-NEXT:    .cfi_offset r27, -40
48; CHECK-NEXT:    .cfi_offset r28, -32
49; CHECK-NEXT:    .cfi_offset r29, -24
50; CHECK-NEXT:    .cfi_offset r30, -16
51; CHECK-NEXT:    .cfi_offset cr2, 8
52; CHECK-NEXT:    .cfi_offset cr3, 8
53; CHECK-NEXT:    .cfi_offset cr4, 8
54; CHECK-NEXT:    std r29, 200(r1) # 8-byte Folded Spill
55; CHECK-NEXT:    std r30, 208(r1) # 8-byte Folded Spill
56; CHECK-NEXT:    mr r29, r3
57; CHECK-NEXT:    mr r3, r4
58; CHECK-NEXT:    mr r30, r4
59; CHECK-NEXT:    std r27, 184(r1) # 8-byte Folded Spill
60; CHECK-NEXT:    std r28, 192(r1) # 8-byte Folded Spill
61; CHECK-NEXT:    mr r28, r5
62; CHECK-NEXT:    bl call_1@notoc
63; CHECK-NEXT:    cmpwi r3, 0
64; CHECK-NEXT:    mr r3, r29
65; CHECK-NEXT:    mr r4, r30
66; CHECK-NEXT:    crnot 4*cr2+eq, eq
67; CHECK-NEXT:    bl call_2@notoc
68; CHECK-NEXT:    mr r27, r3
69; CHECK-NEXT:    srwi r3, r28, 4
70; CHECK-NEXT:    andi. r3, r3, 1
71; CHECK-NEXT:    crmove 4*cr2+gt, gt
72; CHECK-NEXT:    bc 12, 4*cr5+lt, .LBB0_2
73; CHECK-NEXT:  # %bb.1: # %bb9
74; CHECK-NEXT:    mr r3, r29
75; CHECK-NEXT:    mr r4, r30
76; CHECK-NEXT:    bl call_3@notoc
77; CHECK-NEXT:  .LBB0_2: # %bb12
78; CHECK-NEXT:    srwi r3, r28, 7
79; CHECK-NEXT:    andi. r3, r3, 1
80; CHECK-NEXT:    crmove 4*cr2+un, gt
81; CHECK-NEXT:    bc 12, 4*cr2+eq, .LBB0_7
82; CHECK-NEXT:  # %bb.3: # %bb37
83; CHECK-NEXT:    lwz r28, 0(r3)
84; CHECK-NEXT:    bc 12, 4*cr5+lt, .LBB0_5
85; CHECK-NEXT:  # %bb.4: # %bb37
86; CHECK-NEXT:    bc 4, 4*cr5+lt, .LBB0_14
87; CHECK-NEXT:  .LBB0_5: # %bb42
88; CHECK-NEXT:    li r4, 0
89; CHECK-NEXT:    paddi r3, 0, global_1@PCREL, 1
90; CHECK-NEXT:    cmpwi r28, 0
91; CHECK-NEXT:    isel r3, r3, r4, 4*cr2+gt
92; CHECK-NEXT:    crnot 4*cr2+lt, eq
93; CHECK-NEXT:    bl call_5@notoc
94; CHECK-NEXT:    pld r3, global_2@got@pcrel(0), 1
95; CHECK-NEXT:    addi r3, r3, 8682
96; CHECK-NEXT:    lxsihzx v2, 0, r3
97; CHECK-NEXT:    vextsh2d v2, v2
98; CHECK-NEXT:    xscvsxdsp f0, v2
99; CHECK-NEXT:    bc 12, 4*cr2+lt, .LBB0_12
100; CHECK-NEXT:  # %bb.6: # %bb42
101; CHECK-NEXT:    xxspltidp vs1, 1069547520
102; CHECK-NEXT:    b .LBB0_13
103; CHECK-NEXT:  .LBB0_7: # %bb19
104; CHECK-NEXT:    setnbc r3, 4*cr2+un
105; CHECK-NEXT:    paddi r4, 0, global_4@PCREL, 1
106; CHECK-NEXT:    stw r3, 176(r1)
107; CHECK-NEXT:    pld r3, global_3@got@pcrel(0), 1
108; CHECK-NEXT:  .Lpcrel:
109; CHECK-NEXT:    .reloc .Lpcrel-8,R_PPC64_PCREL_OPT,.-(.Lpcrel-8)
110; CHECK-NEXT:    ld r12, 0(r3)
111; CHECK-NEXT:    mtctr r12
112; CHECK-NEXT:    bctrl
113; CHECK-NEXT:    cmpdi cr4, r3, 0
114; CHECK-NEXT:    andi. r3, r28, 4
115; CHECK-NEXT:    cmpwi cr2, r27, 0
116; CHECK-NEXT:    mcrf cr3, cr0
117; CHECK-NEXT:    .p2align 5
118; CHECK-NEXT:  .LBB0_8: # %bb27
119; CHECK-NEXT:    #
120; CHECK-NEXT:    mr r3, r30
121; CHECK-NEXT:    li r4, 0
122; CHECK-NEXT:    bl call_6@notoc
123; CHECK-NEXT:    bc 4, 4*cr4+eq, .LBB0_18
124; CHECK-NEXT:  # %bb.9: # %bb31
125; CHECK-NEXT:    #
126; CHECK-NEXT:    bc 4, 4*cr3+eq, .LBB0_18
127; CHECK-NEXT:  # %bb.10: # %bb33
128; CHECK-NEXT:    #
129; CHECK-NEXT:    bc 4, 4*cr2+eq, .LBB0_8
130; CHECK-NEXT:  # %bb.11: # %bb36
131; CHECK-NEXT:    stb r3, 181(r1)
132; CHECK-NEXT:    # implicit-def: $cr2un
133; CHECK-NEXT:    mfocrf r3, 32
134; CHECK-NEXT:    lwz r4, 176(r1)
135; CHECK-NEXT:    rlwimi r3, r4, 21, 11, 11
136; CHECK-NEXT:    mtocrf 32, r3
137; CHECK-NEXT:    b .LBB0_16
138; CHECK-NEXT:  .LBB0_12:
139; CHECK-NEXT:    xxspltidp vs1, 1071644672
140; CHECK-NEXT:  .LBB0_13: # %bb42
141; CHECK-NEXT:    xsmulsp f0, f1, f0
142; CHECK-NEXT:    xscvdpsxws f0, f0
143; CHECK-NEXT:    mffprwz r3, f0
144; CHECK-NEXT:    b .LBB0_15
145; CHECK-NEXT:  .LBB0_14: # %bb41
146; CHECK-NEXT:    # implicit-def: $r3
147; CHECK-NEXT:  .LBB0_15: # %bb50
148; CHECK-NEXT:    li r4, 0
149; CHECK-NEXT:    xxspltidp vs3, -1082130432
150; CHECK-NEXT:    extsh r9, r3
151; CHECK-NEXT:    extsw r6, r28
152; CHECK-NEXT:    li r5, 0
153; CHECK-NEXT:    std r30, 104(r1)
154; CHECK-NEXT:    std r29, 96(r1)
155; CHECK-NEXT:    li r7, 0
156; CHECK-NEXT:    li r8, 0
157; CHECK-NEXT:    li r10, 0
158; CHECK-NEXT:    fmr f4, f3
159; CHECK-NEXT:    xxlxor f1, f1, f1
160; CHECK-NEXT:    std r4, 152(r1)
161; CHECK-NEXT:    li r4, -1
162; CHECK-NEXT:    std r4, 112(r1)
163; CHECK-NEXT:    li r4, 1024
164; CHECK-NEXT:    bl call_4@notoc
165; CHECK-NEXT:  .LBB0_16: # %bb54
166; CHECK-NEXT:    bc 12, 4*cr2+un, .LBB0_19
167; CHECK-NEXT:  # %bb.17: # %bb56
168; CHECK-NEXT:    ld r30, 208(r1) # 8-byte Folded Reload
169; CHECK-NEXT:    ld r29, 200(r1) # 8-byte Folded Reload
170; CHECK-NEXT:    ld r28, 192(r1) # 8-byte Folded Reload
171; CHECK-NEXT:    ld r27, 184(r1) # 8-byte Folded Reload
172; CHECK-NEXT:    addi r1, r1, 224
173; CHECK-NEXT:    ld r0, 16(r1)
174; CHECK-NEXT:    lwz r12, 8(r1)
175; CHECK-NEXT:    mtlr r0
176; CHECK-NEXT:    mtocrf 32, r12
177; CHECK-NEXT:    mtocrf 16, r12
178; CHECK-NEXT:    mtocrf 8, r12
179; CHECK-NEXT:    blr
180; CHECK-NEXT:  .LBB0_18: # %bb30
181; CHECK-NEXT:    stb r3, 181(r1)
182; CHECK-NEXT:  .LBB0_19: # %bb55
183;
184; CHECK-BE-LABEL: P10_Spill_CR_UN:
185; CHECK-BE:       # %bb.0: # %bb
186; CHECK-BE-NEXT:    mflr r0
187; CHECK-BE-NEXT:    mfcr r12
188; CHECK-BE-NEXT:    std r0, 16(r1)
189; CHECK-BE-NEXT:    stw r12, 8(r1)
190; CHECK-BE-NEXT:    stdu r1, -240(r1)
191; CHECK-BE-NEXT:    .cfi_def_cfa_offset 240
192; CHECK-BE-NEXT:    .cfi_offset lr, 16
193; CHECK-BE-NEXT:    .cfi_offset r27, -40
194; CHECK-BE-NEXT:    .cfi_offset r28, -32
195; CHECK-BE-NEXT:    .cfi_offset r29, -24
196; CHECK-BE-NEXT:    .cfi_offset r30, -16
197; CHECK-BE-NEXT:    .cfi_offset cr2, 8
198; CHECK-BE-NEXT:    .cfi_offset cr2, 8
199; CHECK-BE-NEXT:    .cfi_offset cr2, 8
200; CHECK-BE-NEXT:    std r29, 216(r1) # 8-byte Folded Spill
201; CHECK-BE-NEXT:    std r30, 224(r1) # 8-byte Folded Spill
202; CHECK-BE-NEXT:    mr r29, r3
203; CHECK-BE-NEXT:    mr r3, r4
204; CHECK-BE-NEXT:    mr r30, r4
205; CHECK-BE-NEXT:    std r27, 200(r1) # 8-byte Folded Spill
206; CHECK-BE-NEXT:    std r28, 208(r1) # 8-byte Folded Spill
207; CHECK-BE-NEXT:    mr r28, r5
208; CHECK-BE-NEXT:    bl call_1
209; CHECK-BE-NEXT:    nop
210; CHECK-BE-NEXT:    cmpwi r3, 0
211; CHECK-BE-NEXT:    mr r3, r29
212; CHECK-BE-NEXT:    mr r4, r30
213; CHECK-BE-NEXT:    crnot 4*cr2+eq, eq
214; CHECK-BE-NEXT:    bl call_2
215; CHECK-BE-NEXT:    nop
216; CHECK-BE-NEXT:    mr r27, r3
217; CHECK-BE-NEXT:    srwi r3, r28, 4
218; CHECK-BE-NEXT:    andi. r3, r3, 1
219; CHECK-BE-NEXT:    crmove 4*cr2+gt, gt
220; CHECK-BE-NEXT:    bc 12, 4*cr5+lt, .LBB0_2
221; CHECK-BE-NEXT:  # %bb.1: # %bb9
222; CHECK-BE-NEXT:    mr r3, r29
223; CHECK-BE-NEXT:    mr r4, r30
224; CHECK-BE-NEXT:    bl call_3
225; CHECK-BE-NEXT:    nop
226; CHECK-BE-NEXT:  .LBB0_2: # %bb12
227; CHECK-BE-NEXT:    srwi r3, r28, 7
228; CHECK-BE-NEXT:    andi. r3, r3, 1
229; CHECK-BE-NEXT:    crmove 4*cr2+un, gt
230; CHECK-BE-NEXT:    bc 12, 4*cr2+eq, .LBB0_7
231; CHECK-BE-NEXT:  # %bb.3: # %bb37
232; CHECK-BE-NEXT:    lwz r28, 0(r3)
233; CHECK-BE-NEXT:    addis r3, r2, global_1@toc@ha
234; CHECK-BE-NEXT:    bc 12, 4*cr5+lt, .LBB0_5
235; CHECK-BE-NEXT:  # %bb.4: # %bb37
236; CHECK-BE-NEXT:    bc 4, 4*cr5+lt, .LBB0_14
237; CHECK-BE-NEXT:  .LBB0_5: # %bb42
238; CHECK-BE-NEXT:    addi r3, r3, global_1@toc@l
239; CHECK-BE-NEXT:    li r4, 0
240; CHECK-BE-NEXT:    cmpwi r28, 0
241; CHECK-BE-NEXT:    isel r3, r3, r4, 4*cr2+gt
242; CHECK-BE-NEXT:    crnot 4*cr2+lt, eq
243; CHECK-BE-NEXT:    bl call_5
244; CHECK-BE-NEXT:    nop
245; CHECK-BE-NEXT:    addis r3, r2, .LC0@toc@ha
246; CHECK-BE-NEXT:    ld r3, .LC0@toc@l(r3)
247; CHECK-BE-NEXT:    addi r3, r3, 8682
248; CHECK-BE-NEXT:    lxsihzx v2, 0, r3
249; CHECK-BE-NEXT:    vextsh2d v2, v2
250; CHECK-BE-NEXT:    xscvsxdsp f0, v2
251; CHECK-BE-NEXT:    bc 12, 4*cr2+lt, .LBB0_12
252; CHECK-BE-NEXT:  # %bb.6: # %bb42
253; CHECK-BE-NEXT:    xxspltidp vs1, 1069547520
254; CHECK-BE-NEXT:    b .LBB0_13
255; CHECK-BE-NEXT:  .LBB0_7: # %bb19
256; CHECK-BE-NEXT:    setnbc r3, 4*cr2+un
257; CHECK-BE-NEXT:    addis r4, r2, global_4@toc@ha
258; CHECK-BE-NEXT:    stw r3, 192(r1)
259; CHECK-BE-NEXT:    addis r3, r2, .LC1@toc@ha
260; CHECK-BE-NEXT:    std r2, 40(r1)
261; CHECK-BE-NEXT:    addi r4, r4, global_4@toc@l
262; CHECK-BE-NEXT:    ld r3, .LC1@toc@l(r3)
263; CHECK-BE-NEXT:    ld r3, 0(r3)
264; CHECK-BE-NEXT:    ld r2, 8(r3)
265; CHECK-BE-NEXT:    ld r11, 16(r3)
266; CHECK-BE-NEXT:    ld r3, 0(r3)
267; CHECK-BE-NEXT:    mtctr r3
268; CHECK-BE-NEXT:    bctrl
269; CHECK-BE-NEXT:    ld 2, 40(r1)
270; CHECK-BE-NEXT:    cmpdi cr4, r3, 0
271; CHECK-BE-NEXT:    andi. r3, r28, 4
272; CHECK-BE-NEXT:    cmpwi cr2, r27, 0
273; CHECK-BE-NEXT:    mcrf cr3, cr0
274; CHECK-BE-NEXT:    .p2align 5
275; CHECK-BE-NEXT:  .LBB0_8: # %bb27
276; CHECK-BE-NEXT:    #
277; CHECK-BE-NEXT:    mr r3, r30
278; CHECK-BE-NEXT:    li r4, 0
279; CHECK-BE-NEXT:    bl call_6
280; CHECK-BE-NEXT:    nop
281; CHECK-BE-NEXT:    bc 4, 4*cr4+eq, .LBB0_18
282; CHECK-BE-NEXT:  # %bb.9: # %bb31
283; CHECK-BE-NEXT:    #
284; CHECK-BE-NEXT:    bc 4, 4*cr3+eq, .LBB0_18
285; CHECK-BE-NEXT:  # %bb.10: # %bb33
286; CHECK-BE-NEXT:    #
287; CHECK-BE-NEXT:    bc 4, 4*cr2+eq, .LBB0_8
288; CHECK-BE-NEXT:  # %bb.11: # %bb36
289; CHECK-BE-NEXT:    stb r3, 197(r1)
290; CHECK-BE-NEXT:    # implicit-def: $cr2un
291; CHECK-BE-NEXT:    mfocrf r3, 32
292; CHECK-BE-NEXT:    lwz r4, 192(r1)
293; CHECK-BE-NEXT:    rlwimi r3, r4, 21, 11, 11
294; CHECK-BE-NEXT:    mtocrf 32, r3
295; CHECK-BE-NEXT:    b .LBB0_16
296; CHECK-BE-NEXT:  .LBB0_12:
297; CHECK-BE-NEXT:    xxspltidp vs1, 1071644672
298; CHECK-BE-NEXT:  .LBB0_13: # %bb42
299; CHECK-BE-NEXT:    xsmulsp f0, f1, f0
300; CHECK-BE-NEXT:    xscvdpsxws f0, f0
301; CHECK-BE-NEXT:    mffprwz r3, f0
302; CHECK-BE-NEXT:    b .LBB0_15
303; CHECK-BE-NEXT:  .LBB0_14: # %bb41
304; CHECK-BE-NEXT:    # implicit-def: $r3
305; CHECK-BE-NEXT:  .LBB0_15: # %bb50
306; CHECK-BE-NEXT:    li r4, 0
307; CHECK-BE-NEXT:    xxspltidp vs3, -1082130432
308; CHECK-BE-NEXT:    extsh r9, r3
309; CHECK-BE-NEXT:    extsw r6, r28
310; CHECK-BE-NEXT:    li r5, 0
311; CHECK-BE-NEXT:    std r30, 120(r1)
312; CHECK-BE-NEXT:    std r29, 112(r1)
313; CHECK-BE-NEXT:    li r7, 0
314; CHECK-BE-NEXT:    li r8, 0
315; CHECK-BE-NEXT:    li r10, 0
316; CHECK-BE-NEXT:    fmr f4, f3
317; CHECK-BE-NEXT:    xxlxor f1, f1, f1
318; CHECK-BE-NEXT:    std r4, 168(r1)
319; CHECK-BE-NEXT:    li r4, -1
320; CHECK-BE-NEXT:    std r4, 128(r1)
321; CHECK-BE-NEXT:    li r4, 1024
322; CHECK-BE-NEXT:    bl call_4
323; CHECK-BE-NEXT:    nop
324; CHECK-BE-NEXT:  .LBB0_16: # %bb54
325; CHECK-BE-NEXT:    bc 12, 4*cr2+un, .LBB0_19
326; CHECK-BE-NEXT:  # %bb.17: # %bb56
327; CHECK-BE-NEXT:    ld r30, 224(r1) # 8-byte Folded Reload
328; CHECK-BE-NEXT:    ld r29, 216(r1) # 8-byte Folded Reload
329; CHECK-BE-NEXT:    ld r28, 208(r1) # 8-byte Folded Reload
330; CHECK-BE-NEXT:    ld r27, 200(r1) # 8-byte Folded Reload
331; CHECK-BE-NEXT:    addi r1, r1, 240
332; CHECK-BE-NEXT:    ld r0, 16(r1)
333; CHECK-BE-NEXT:    lwz r12, 8(r1)
334; CHECK-BE-NEXT:    mtlr r0
335; CHECK-BE-NEXT:    mtocrf 32, r12
336; CHECK-BE-NEXT:    mtocrf 16, r12
337; CHECK-BE-NEXT:    mtocrf 8, r12
338; CHECK-BE-NEXT:    blr
339; CHECK-BE-NEXT:  .LBB0_18: # %bb30
340; CHECK-BE-NEXT:    stb r3, 197(r1)
341; CHECK-BE-NEXT:  .LBB0_19: # %bb55
342bb:
343  %tmp = alloca [3 x i8], align 1
344  %tmp3 = tail call zeroext i8 @call_1(%1* %arg1)
345  %tmp4 = icmp ne i8 %tmp3, 0
346  %tmp5 = tail call signext i32 @call_2(%2* %arg, %1* %arg1)
347  %tmp6 = and i32 %arg2, 16
348  %tmp7 = icmp ne i32 %tmp6, 0
349  br label %bb8
350
351bb8:                                              ; preds = %bb
352  br i1 undef, label %bb9, label %bb11
353
354bb9:                                              ; preds = %bb8
355  %tmp10 = call signext i32 @call_3(%2* %arg, %1* %arg1)
356  br label %bb12
357
358bb11:                                             ; preds = %bb8
359  br label %bb12
360
361bb12:                                             ; preds = %bb11, %bb9
362  %tmp13 = and i32 %arg2, 4
363  %tmp14 = and i32 %arg2, 128
364  %tmp15 = icmp ne i32 %tmp14, 0
365  br label %bb16
366
367bb16:                                             ; preds = %bb12
368  %tmp17 = xor i1 %tmp4, true
369  %tmp18 = or i1 false, %tmp17
370  br i1 %tmp18, label %bb37, label %bb19
371
372bb19:                                             ; preds = %bb16
373  %tmp20 = getelementptr inbounds [3 x i8], [3 x i8]* %tmp, i64 0, i64 0
374  %tmp21 = load i8* (i64, i8*)*, i8* (i64, i8*)** @global_3, align 8
375  %tmp22 = call i8* %tmp21(i64 undef, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @global_4, i64 0, i64 0))
376  %tmp23 = bitcast i8* %tmp22 to i32*
377  %tmp24 = icmp eq i32* %tmp23, null
378  %tmp25 = icmp eq i32 %tmp13, 0
379  %tmp26 = zext i32 %tmp5 to i64
380  br label %bb27
381
382bb27:                                             ; preds = %bb34, %bb19
383  %tmp28 = call zeroext i8 @call_6(%1* %arg1, i32 signext undef)
384  store i8 %tmp28, i8* %tmp20, align 1
385  br label %bb29
386
387bb29:                                             ; preds = %bb27
388  br i1 %tmp24, label %bb31, label %bb30
389
390bb30:                                             ; preds = %bb29
391  unreachable
392
393bb31:                                             ; preds = %bb29
394  br i1 %tmp25, label %bb33, label %bb32
395
396bb32:                                             ; preds = %bb31
397  unreachable
398
399bb33:                                             ; preds = %bb31
400  br label %bb34
401
402bb34:                                             ; preds = %bb33
403  %tmp35 = icmp eq i64 0, %tmp26
404  br i1 %tmp35, label %bb36, label %bb27
405
406bb36:                                             ; preds = %bb34
407  br label %bb54
408
409bb37:                                             ; preds = %bb16
410  %tmp38 = load i32, i32* undef, align 8
411  %tmp39 = select i1 %tmp7, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @global_1, i64 0, i64 0), i8* null
412  %tmp40 = icmp ne i32 %tmp38, 0
413  switch i32 undef, label %bb41 [
414    i32 1, label %bb42
415    i32 4, label %bb42
416  ]
417
418bb41:                                             ; preds = %bb37
419  br label %bb50
420
421bb42:                                             ; preds = %bb37, %bb37
422  %tmp43 = call signext i32 @call_5(i8* %tmp39)
423  %tmp44 = load i16, i16* getelementptr inbounds (%0, %0* @global_2, i64 0, i32 81), align 4
424  %tmp45 = sitofp i16 %tmp44 to float
425  %tmp46 = select i1 %tmp40, float 1.750000e+00, float 1.500000e+00
426  %tmp47 = fmul fast float %tmp46, %tmp45
427  %tmp48 = fadd fast float %tmp47, 0.000000e+00
428  %tmp49 = fptosi float %tmp48 to i32
429  br label %bb50
430
431bb50:                                             ; preds = %bb42, %bb41
432  %tmp51 = phi i32 [ %tmp49, %bb42 ], [ undef, %bb41 ]
433  %tmp52 = trunc i32 %tmp51 to i16
434  %tmp53 = call %3* @call_4(%4* nonnull undef, i32 signext 1024, i32 signext 0, i32 signext %tmp38, i32 signext 0, i32 signext 0, i16 signext %tmp52, i16 signext undef, %2* %arg, %1* %arg1, i32 signext -1, float 0.000000e+00, float undef, float -1.000000e+00, float -1.000000e+00, i8* null)
435  br label %bb54
436
437bb54:                                             ; preds = %bb50, %bb36
438  br i1 %tmp15, label %bb55, label %bb56
439
440bb55:                                             ; preds = %bb54
441  unreachable
442
443bb56:                                             ; preds = %bb54
444  ret void
445}
446