xref: /aosp_15_r20/external/llvm/test/CodeGen/Thumb2/2009-09-28-ITBlockBug.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 -disable-cgp-branch-opts -arm-atomic-cfg-tidy=0 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker%struct.pix_pos = type { i32, i32, i32, i32, i32, i32 }
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@getNeighbour = external global void (i32, i32, i32, i32, %struct.pix_pos*)*, align 4 ; <void (i32, i32, i32, i32, %struct.pix_pos*)**> [#uses=2]
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine void @t() nounwind {
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t:
9*9880d681SAndroid Build Coastguard Worker; CHECK:      it eq
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cmpeq
11*9880d681SAndroid Build Coastguard Workerentry:
12*9880d681SAndroid Build Coastguard Worker  %pix_a.i294 = alloca [4 x %struct.pix_pos], align 4 ; <[4 x %struct.pix_pos]*> [#uses=2]
13*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %land.rhs, label %lor.end
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerland.rhs:                                         ; preds = %entry
16*9880d681SAndroid Build Coastguard Worker  br label %lor.end
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerlor.end:                                          ; preds = %land.rhs, %entry
19*9880d681SAndroid Build Coastguard Worker  switch i32 0, label %if.end371 [
20*9880d681SAndroid Build Coastguard Worker    i32 10, label %if.then366
21*9880d681SAndroid Build Coastguard Worker    i32 14, label %if.then366
22*9880d681SAndroid Build Coastguard Worker  ]
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerif.then366:                                       ; preds = %lor.end, %lor.end
25*9880d681SAndroid Build Coastguard Worker  unreachable
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerif.end371:                                        ; preds = %lor.end
28*9880d681SAndroid Build Coastguard Worker  %arrayidx56.2.i = getelementptr [4 x %struct.pix_pos], [4 x %struct.pix_pos]* %pix_a.i294, i32 0, i32 2 ; <%struct.pix_pos*> [#uses=1]
29*9880d681SAndroid Build Coastguard Worker  %arrayidx56.3.i = getelementptr [4 x %struct.pix_pos], [4 x %struct.pix_pos]* %pix_a.i294, i32 0, i32 3 ; <%struct.pix_pos*> [#uses=1]
30*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %for.body1857, label %for.end4557
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerfor.body1857:                                     ; preds = %if.end371
33*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then1867, label %for.cond1933
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerif.then1867:                                      ; preds = %for.body1857
36*9880d681SAndroid Build Coastguard Worker  unreachable
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerfor.cond1933:                                     ; preds = %for.body1857
39*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %for.body1940, label %if.then4493
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerfor.body1940:                                     ; preds = %for.cond1933
42*9880d681SAndroid Build Coastguard Worker  %shl = shl i32 undef, 2                         ; <i32> [#uses=1]
43*9880d681SAndroid Build Coastguard Worker  %shl1959 = shl i32 undef, 2                     ; <i32> [#uses=4]
44*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then1992, label %if.else2003
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerif.then1992:                                      ; preds = %for.body1940
47*9880d681SAndroid Build Coastguard Worker  %tmp14.i302 = load i32, i32* undef                   ; <i32> [#uses=4]
48*9880d681SAndroid Build Coastguard Worker  %add.i307452 = or i32 %shl1959, 1               ; <i32> [#uses=1]
49*9880d681SAndroid Build Coastguard Worker  %sub.i308 = add i32 %shl, -1                    ; <i32> [#uses=4]
50*9880d681SAndroid Build Coastguard Worker  call  void undef(i32 %tmp14.i302, i32 %sub.i308, i32 %shl1959, i32 0, %struct.pix_pos* undef) nounwind
51*9880d681SAndroid Build Coastguard Worker  %tmp49.i309 = load void (i32, i32, i32, i32, %struct.pix_pos*)*, void (i32, i32, i32, i32, %struct.pix_pos*)** @getNeighbour ; <void (i32, i32, i32, i32, %struct.pix_pos*)*> [#uses=1]
52*9880d681SAndroid Build Coastguard Worker  call  void %tmp49.i309(i32 %tmp14.i302, i32 %sub.i308, i32 %add.i307452, i32 0, %struct.pix_pos* null) nounwind
53*9880d681SAndroid Build Coastguard Worker  %tmp49.1.i = load void (i32, i32, i32, i32, %struct.pix_pos*)*, void (i32, i32, i32, i32, %struct.pix_pos*)** @getNeighbour ; <void (i32, i32, i32, i32, %struct.pix_pos*)*> [#uses=1]
54*9880d681SAndroid Build Coastguard Worker  call  void %tmp49.1.i(i32 %tmp14.i302, i32 %sub.i308, i32 undef, i32 0, %struct.pix_pos* %arrayidx56.2.i) nounwind
55*9880d681SAndroid Build Coastguard Worker  call  void undef(i32 %tmp14.i302, i32 %sub.i308, i32 undef, i32 0, %struct.pix_pos* %arrayidx56.3.i) nounwind
56*9880d681SAndroid Build Coastguard Worker  unreachable
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerif.else2003:                                      ; preds = %for.body1940
59*9880d681SAndroid Build Coastguard Worker  switch i32 undef, label %if.then2015 [
60*9880d681SAndroid Build Coastguard Worker    i32 10, label %if.then4382
61*9880d681SAndroid Build Coastguard Worker    i32 14, label %if.then4382
62*9880d681SAndroid Build Coastguard Worker  ]
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerif.then2015:                                      ; preds = %if.else2003
65*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.else2298, label %if.then2019
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerif.then2019:                                      ; preds = %if.then2015
68*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then2065, label %if.else2081
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerif.then2065:                                      ; preds = %if.then2019
71*9880d681SAndroid Build Coastguard Worker  br label %if.end2128
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerif.else2081:                                      ; preds = %if.then2019
74*9880d681SAndroid Build Coastguard Worker  br label %if.end2128
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerif.end2128:                                       ; preds = %if.else2081, %if.then2065
77*9880d681SAndroid Build Coastguard Worker  unreachable
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerif.else2298:                                      ; preds = %if.then2015
80*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %land.lhs.true2813, label %cond.end2841
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerland.lhs.true2813:                                ; preds = %if.else2298
83*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %cond.end2841, label %cond.true2824
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workercond.true2824:                                    ; preds = %land.lhs.true2813
86*9880d681SAndroid Build Coastguard Worker  br label %cond.end2841
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workercond.end2841:                                     ; preds = %cond.true2824, %land.lhs.true2813, %if.else2298
89*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %for.cond2882.preheader, label %for.cond2940.preheader
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerfor.cond2882.preheader:                           ; preds = %cond.end2841
92*9880d681SAndroid Build Coastguard Worker  %mul3693 = shl i32 undef, 1                     ; <i32> [#uses=2]
93*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then3689, label %if.else3728
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerfor.cond2940.preheader:                           ; preds = %cond.end2841
96*9880d681SAndroid Build Coastguard Worker  br label %for.inc3040
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerfor.inc3040:                                      ; preds = %for.inc3040, %for.cond2940.preheader
99*9880d681SAndroid Build Coastguard Worker  br label %for.inc3040
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerif.then3689:                                      ; preds = %for.cond2882.preheader
102*9880d681SAndroid Build Coastguard Worker  %add3695 = add nsw i32 %mul3693, %shl1959       ; <i32> [#uses=1]
103*9880d681SAndroid Build Coastguard Worker  %mul3697 = shl i32 %add3695, 2                  ; <i32> [#uses=2]
104*9880d681SAndroid Build Coastguard Worker  %arrayidx3705 = getelementptr inbounds i16, i16* undef, i32 1 ; <i16*> [#uses=1]
105*9880d681SAndroid Build Coastguard Worker  %tmp3706 = load i16, i16* %arrayidx3705              ; <i16> [#uses=1]
106*9880d681SAndroid Build Coastguard Worker  %conv3707 = sext i16 %tmp3706 to i32            ; <i32> [#uses=1]
107*9880d681SAndroid Build Coastguard Worker  %add3708 = add nsw i32 %conv3707, %mul3697      ; <i32> [#uses=1]
108*9880d681SAndroid Build Coastguard Worker  %arrayidx3724 = getelementptr inbounds i16, i16* null, i32 1 ; <i16*> [#uses=1]
109*9880d681SAndroid Build Coastguard Worker  %tmp3725 = load i16, i16* %arrayidx3724              ; <i16> [#uses=1]
110*9880d681SAndroid Build Coastguard Worker  %conv3726 = sext i16 %tmp3725 to i32            ; <i32> [#uses=1]
111*9880d681SAndroid Build Coastguard Worker  %add3727 = add nsw i32 %conv3726, %mul3697      ; <i32> [#uses=1]
112*9880d681SAndroid Build Coastguard Worker  br label %if.end3770
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerif.else3728:                                      ; preds = %for.cond2882.preheader
115*9880d681SAndroid Build Coastguard Worker  %mul3733 = add i32 %shl1959, 1073741816         ; <i32> [#uses=1]
116*9880d681SAndroid Build Coastguard Worker  %add3735 = add nsw i32 %mul3733, %mul3693       ; <i32> [#uses=1]
117*9880d681SAndroid Build Coastguard Worker  %mul3737 = shl i32 %add3735, 2                  ; <i32> [#uses=2]
118*9880d681SAndroid Build Coastguard Worker  %tmp3746 = load i16, i16* undef                      ; <i16> [#uses=1]
119*9880d681SAndroid Build Coastguard Worker  %conv3747 = sext i16 %tmp3746 to i32            ; <i32> [#uses=1]
120*9880d681SAndroid Build Coastguard Worker  %add3748 = add nsw i32 %conv3747, %mul3737      ; <i32> [#uses=1]
121*9880d681SAndroid Build Coastguard Worker  %arrayidx3765 = getelementptr inbounds i16, i16* null, i32 1 ; <i16*> [#uses=1]
122*9880d681SAndroid Build Coastguard Worker  %tmp3766 = load i16, i16* %arrayidx3765              ; <i16> [#uses=1]
123*9880d681SAndroid Build Coastguard Worker  %conv3767 = sext i16 %tmp3766 to i32            ; <i32> [#uses=1]
124*9880d681SAndroid Build Coastguard Worker  %add3768 = add nsw i32 %conv3767, %mul3737      ; <i32> [#uses=1]
125*9880d681SAndroid Build Coastguard Worker  br label %if.end3770
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerif.end3770:                                       ; preds = %if.else3728, %if.then3689
128*9880d681SAndroid Build Coastguard Worker  %vec2_y.1 = phi i32 [ %add3727, %if.then3689 ], [ %add3768, %if.else3728 ] ; <i32> [#uses=0]
129*9880d681SAndroid Build Coastguard Worker  %vec1_y.2 = phi i32 [ %add3708, %if.then3689 ], [ %add3748, %if.else3728 ] ; <i32> [#uses=0]
130*9880d681SAndroid Build Coastguard Worker  unreachable
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerif.then4382:                                      ; preds = %if.else2003, %if.else2003
133*9880d681SAndroid Build Coastguard Worker  switch i32 undef, label %if.then4394 [
134*9880d681SAndroid Build Coastguard Worker    i32 10, label %if.else4400
135*9880d681SAndroid Build Coastguard Worker    i32 14, label %if.else4400
136*9880d681SAndroid Build Coastguard Worker  ]
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerif.then4394:                                      ; preds = %if.then4382
139*9880d681SAndroid Build Coastguard Worker  unreachable
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerif.else4400:                                      ; preds = %if.then4382, %if.then4382
142*9880d681SAndroid Build Coastguard Worker  br label %for.cond4451.preheader
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerfor.cond4451.preheader:                           ; preds = %for.cond4451.preheader, %if.else4400
145*9880d681SAndroid Build Coastguard Worker  br label %for.cond4451.preheader
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerif.then4493:                                      ; preds = %for.cond1933
148*9880d681SAndroid Build Coastguard Worker  unreachable
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Workerfor.end4557:                                      ; preds = %if.end371
151*9880d681SAndroid Build Coastguard Worker  ret void
152*9880d681SAndroid Build Coastguard Worker}
153