xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2012-05-29-TailDupBug.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumbv7-apple-ios -mcpu=cortex-a8 -verify-machineinstrs < %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Teach taildup to update livein set to appease verifier.
4*9880d681SAndroid Build Coastguard Worker; rdar://11538365
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker%struct.__CFString.2 = type opaque
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdeclare void @CFRelease(i8*)
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine hidden fastcc i32 @t() ssp {
11*9880d681SAndroid Build Coastguard Workerentry:
12*9880d681SAndroid Build Coastguard Worker  %mylocale.i.i = alloca [256 x i8], align 1
13*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %return, label %CFStringIsHyphenationAvailableForLocale.exit
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard WorkerCFStringIsHyphenationAvailableForLocale.exit:     ; preds = %entry
16*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %return, label %if.end
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %CFStringIsHyphenationAvailableForLocale.exit
19*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end8.thread.i, label %if.then.i
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerif.then.i:                                        ; preds = %if.end
22*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end8.thread.i, label %if.end8.i
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerif.end8.thread.i:                                 ; preds = %if.then.i, %if.end
25*9880d681SAndroid Build Coastguard Worker  unreachable
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerif.end8.i:                                        ; preds = %if.then.i
28*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then11.i, label %__CFHyphenationPullTokenizer.exit
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerif.then11.i:                                      ; preds = %if.end8.i
31*9880d681SAndroid Build Coastguard Worker  unreachable
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker__CFHyphenationPullTokenizer.exit:                ; preds = %if.end8.i
34*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end68, label %if.then3
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerif.then3:                                         ; preds = %__CFHyphenationPullTokenizer.exit
37*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %cond.end, label %cond.false
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workercond.false:                                       ; preds = %if.then3
40*9880d681SAndroid Build Coastguard Worker  br label %cond.end
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workercond.end:                                         ; preds = %cond.false, %if.then3
43*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %while.end, label %while.body
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerwhile.body:                                       ; preds = %cond.end
46*9880d681SAndroid Build Coastguard Worker  unreachable
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerwhile.end:                                        ; preds = %cond.end
49*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end5.i, label %if.then.i16
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerif.then.i16:                                      ; preds = %while.end
52*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then4.i, label %if.end5.i
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerif.then4.i:                                       ; preds = %if.then.i16
55*9880d681SAndroid Build Coastguard Worker  br i1 false, label %cleanup.thread, label %if.end.i20
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerif.end5.i:                                        ; preds = %if.then.i16, %while.end
58*9880d681SAndroid Build Coastguard Worker  unreachable
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerif.end.i20:                                       ; preds = %if.then4.i
61*9880d681SAndroid Build Coastguard Worker  br label %for.body.i146.i
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerfor.body.i146.i:                                  ; preds = %for.body.i146.i, %if.end.i20
64*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end20.i, label %for.body.i146.i
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerif.end20.i:                                       ; preds = %for.body.i146.i
67*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %cleanup.thread, label %if.end23.i
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerif.end23.i:                                       ; preds = %if.end20.i
70*9880d681SAndroid Build Coastguard Worker  br label %for.body.i94.i
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerfor.body.i94.i:                                   ; preds = %for.body.i94.i, %if.end23.i
73*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then28.i, label %for.body.i94.i
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerif.then28.i:                                      ; preds = %for.body.i94.i
76*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %cond.true.i26, label %land.lhs.true
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workercond.true.i26:                                    ; preds = %if.then28.i
79*9880d681SAndroid Build Coastguard Worker  br label %land.lhs.true
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Workerland.lhs.true:                                    ; preds = %cond.true.i26, %if.then28.i
82*9880d681SAndroid Build Coastguard Worker  br i1 false, label %cleanup.thread, label %if.end35
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerif.end35:                                         ; preds = %land.lhs.true
85*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %cleanup.thread, label %if.end45
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerif.end45:                                         ; preds = %if.end35
88*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.then50, label %if.end.i37
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerif.end.i37:                                       ; preds = %if.end45
91*9880d681SAndroid Build Coastguard Worker  br label %if.then50
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerif.then50:                                        ; preds = %if.end.i37, %if.end45
94*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %__CFHyphenationGetHyphensForString.exit, label %if.end.i
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerif.end.i:                                         ; preds = %if.then50
97*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %cleanup.i, label %cond.true.i
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workercond.true.i:                                      ; preds = %if.end.i
100*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %for.cond16.preheader.i, label %for.cond57.preheader.i
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerfor.cond16.preheader.i:                           ; preds = %cond.true.i
103*9880d681SAndroid Build Coastguard Worker  %cmp1791.i = icmp sgt i32 undef, 1
104*9880d681SAndroid Build Coastguard Worker  br i1 %cmp1791.i, label %for.body18.i, label %for.cond57.preheader.i
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerfor.cond57.preheader.i:                           ; preds = %for.cond16.preheader.i, %cond.true.i
107*9880d681SAndroid Build Coastguard Worker  %sub69.i = add i32 undef, -2
108*9880d681SAndroid Build Coastguard Worker  br label %cleanup.i
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerfor.body18.i:                                     ; preds = %for.cond16.preheader.i
111*9880d681SAndroid Build Coastguard Worker  store i16 0, i16* undef, align 2
112*9880d681SAndroid Build Coastguard Worker  br label %while.body.i
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerwhile.body.i:                                     ; preds = %while.body.i, %for.body18.i
115*9880d681SAndroid Build Coastguard Worker  br label %while.body.i
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workercleanup.i:                                        ; preds = %for.cond57.preheader.i, %if.end.i
118*9880d681SAndroid Build Coastguard Worker  br label %__CFHyphenationGetHyphensForString.exit
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker__CFHyphenationGetHyphensForString.exit:          ; preds = %cleanup.i, %if.then50
121*9880d681SAndroid Build Coastguard Worker  %retval.1.i = phi i32 [ 0, %cleanup.i ], [ -1, %if.then50 ]
122*9880d681SAndroid Build Coastguard Worker  %phitmp = bitcast %struct.__CFString.2* null to i8*
123*9880d681SAndroid Build Coastguard Worker  br label %if.end68
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workercleanup.thread:                                   ; preds = %if.end35, %land.lhs.true, %if.end20.i, %if.then4.i
126*9880d681SAndroid Build Coastguard Worker  call void @llvm.stackrestore(i8* null)
127*9880d681SAndroid Build Coastguard Worker  br label %return
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerif.end68:                                         ; preds = %__CFHyphenationGetHyphensForString.exit, %__CFHyphenationPullTokenizer.exit
130*9880d681SAndroid Build Coastguard Worker  %hyphenCount.2 = phi i32 [ %retval.1.i, %__CFHyphenationGetHyphensForString.exit ], [ 0, %__CFHyphenationPullTokenizer.exit ]
131*9880d681SAndroid Build Coastguard Worker  %_token.1 = phi i8* [ %phitmp, %__CFHyphenationGetHyphensForString.exit ], [ undef, %__CFHyphenationPullTokenizer.exit ]
132*9880d681SAndroid Build Coastguard Worker  call void @CFRelease(i8* %_token.1)
133*9880d681SAndroid Build Coastguard Worker  br label %return
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Workerreturn:                                           ; preds = %if.end68, %cleanup.thread, %CFStringIsHyphenationAvailableForLocale.exit, %entry
136*9880d681SAndroid Build Coastguard Worker  %retval.1 = phi i32 [ %hyphenCount.2, %if.end68 ], [ -1, %CFStringIsHyphenationAvailableForLocale.exit ], [ -1, %cleanup.thread ], [ -1, %entry ]
137*9880d681SAndroid Build Coastguard Worker  ret i32 %retval.1
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.stackrestore(i8*) nounwind
141