xref: /aosp_15_r20/external/llvm/test/Transforms/JumpThreading/landing-pad.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -disable-output -jump-threading
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker%class.E = type { i32 (...)**, %class.C }
4*9880d681SAndroid Build Coastguard Worker%class.C = type { %class.A }
5*9880d681SAndroid Build Coastguard Worker%class.A = type { i32 }
6*9880d681SAndroid Build Coastguard Worker%class.D = type { %class.F }
7*9880d681SAndroid Build Coastguard Worker%class.F = type { %class.E }
8*9880d681SAndroid Build Coastguard Worker%class.B = type { %class.D* }
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker@_ZTV1D = unnamed_addr constant [3 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1D to i8*), i8* bitcast (void (%class.D*)* @_ZN1D7doApplyEv to i8*)]
11*9880d681SAndroid Build Coastguard Worker@_ZTI1D = external unnamed_addr constant { i8*, i8*, i8* }
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine void @_ZN15EditCommandImpl5applyEv(%class.E* %this) uwtable align 2 {
14*9880d681SAndroid Build Coastguard Workerentry:
15*9880d681SAndroid Build Coastguard Worker  %0 = bitcast %class.E* %this to void (%class.E*)***
16*9880d681SAndroid Build Coastguard Worker  %vtable = load void (%class.E*)**, void (%class.E*)*** %0, align 8
17*9880d681SAndroid Build Coastguard Worker  %1 = load void (%class.E*)*, void (%class.E*)** %vtable, align 8
18*9880d681SAndroid Build Coastguard Worker  call void %1(%class.E* %this)
19*9880d681SAndroid Build Coastguard Worker  ret void
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1DC1Ev(%class.D* nocapture %this) unnamed_addr uwtable align 2 {
23*9880d681SAndroid Build Coastguard Workerentry:
24*9880d681SAndroid Build Coastguard Worker  call void @_ZN24CompositeEditCommandImplC2Ev()
25*9880d681SAndroid Build Coastguard Worker  %0 = getelementptr inbounds %class.D, %class.D* %this, i64 0, i32 0, i32 0, i32 0
26*9880d681SAndroid Build Coastguard Worker  store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1D, i64 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8
27*9880d681SAndroid Build Coastguard Worker  ret void
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1DC2Ev(%class.D* nocapture %this) unnamed_addr uwtable align 2 {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  call void @_ZN24CompositeEditCommandImplC2Ev()
33*9880d681SAndroid Build Coastguard Worker  %0 = getelementptr inbounds %class.D, %class.D* %this, i64 0, i32 0, i32 0, i32 0
34*9880d681SAndroid Build Coastguard Worker  store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1D, i64 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdeclare void @_ZN24CompositeEditCommandImplC2Ev() #1
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1D7doApplyEv(%class.D* nocapture %this) unnamed_addr nounwind readnone uwtable align 2 {
41*9880d681SAndroid Build Coastguard Workerentry:
42*9880d681SAndroid Build Coastguard Worker  ret void
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine void @_Z3fn1v() uwtable personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
46*9880d681SAndroid Build Coastguard Workerentry:
47*9880d681SAndroid Build Coastguard Worker  %call = call noalias i8* @_Znwm() #8
48*9880d681SAndroid Build Coastguard Worker  invoke void @_ZN24CompositeEditCommandImplC2Ev()
49*9880d681SAndroid Build Coastguard Worker          to label %_ZN1DC1Ev.exit unwind label %lpad
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker_ZN1DC1Ev.exit:                                   ; preds = %entry
52*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i8* %call to i32 (...)***
53*9880d681SAndroid Build Coastguard Worker  store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1D, i64 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8
54*9880d681SAndroid Build Coastguard Worker  %_ref.i.i.i = getelementptr inbounds i8, i8* %call, i64 8
55*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i8* %_ref.i.i.i to i32*
56*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %1, align 4
57*9880d681SAndroid Build Coastguard Worker  %inc.i.i.i = add nsw i32 %2, 1
58*9880d681SAndroid Build Coastguard Worker  store i32 %inc.i.i.i, i32* %1, align 4
59*9880d681SAndroid Build Coastguard Worker  %3 = bitcast i8* %call to %class.D*
60*9880d681SAndroid Build Coastguard Worker  invoke void @_ZN1D7doApplyEv(%class.D* %3)
61*9880d681SAndroid Build Coastguard Worker          to label %_ZN15EditCommandImpl5applyEv.exit unwind label %lpad1
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker_ZN15EditCommandImpl5applyEv.exit:                ; preds = %_ZN1DC1Ev.exit
64*9880d681SAndroid Build Coastguard Worker  invoke void @_ZN1D16deleteKeyPressedEv()
65*9880d681SAndroid Build Coastguard Worker          to label %invoke.cont7 unwind label %lpad1
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerinvoke.cont7:                                     ; preds = %_ZN15EditCommandImpl5applyEv.exit
68*9880d681SAndroid Build Coastguard Worker  ret void
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerlpad:                                             ; preds = %entry
71*9880d681SAndroid Build Coastguard Worker  %4 = landingpad { i8*, i32 }
72*9880d681SAndroid Build Coastguard Worker          cleanup
73*9880d681SAndroid Build Coastguard Worker  call void @_ZdlPv() #9
74*9880d681SAndroid Build Coastguard Worker  unreachable
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerlpad1:                                            ; preds = %_ZN1DC1Ev.exit, %_ZN15EditCommandImpl5applyEv.exit
77*9880d681SAndroid Build Coastguard Worker  %5 = landingpad { i8*, i32 }
78*9880d681SAndroid Build Coastguard Worker          cleanup
79*9880d681SAndroid Build Coastguard Worker  %6 = load i32, i32* %1, align 4
80*9880d681SAndroid Build Coastguard Worker  %tobool.i.i.i = icmp eq i32 %6, 0
81*9880d681SAndroid Build Coastguard Worker  br i1 %tobool.i.i.i, label %_ZN1BI1DED1Ev.exit, label %if.then.i.i.i
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerif.then.i.i.i:                                    ; preds = %lpad1
84*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %_ZN1BI1DED1Ev.exit, label %delete.notnull.i.i.i
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdelete.notnull.i.i.i:                             ; preds = %if.then.i.i.i
87*9880d681SAndroid Build Coastguard Worker  call void @_ZdlPv() #9
88*9880d681SAndroid Build Coastguard Worker  unreachable
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker_ZN1BI1DED1Ev.exit:                               ; preds = %lpad1, %if.then.i.i.i
91*9880d681SAndroid Build Coastguard Worker  resume { i8*, i32 } undef
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerterminate.lpad:                                   ; No predecessors!
94*9880d681SAndroid Build Coastguard Worker  %7 = landingpad { i8*, i32 }
95*9880d681SAndroid Build Coastguard Worker          catch i8* null
96*9880d681SAndroid Build Coastguard Worker  unreachable
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1BI1DEC1EPS0_(%class.B* nocapture %this, %class.D* %p1) unnamed_addr uwtable align 2 {
100*9880d681SAndroid Build Coastguard Workerentry:
101*9880d681SAndroid Build Coastguard Worker  %m_ptr.i = getelementptr inbounds %class.B, %class.B* %this, i64 0, i32 0
102*9880d681SAndroid Build Coastguard Worker  store %class.D* %p1, %class.D** %m_ptr.i, align 8
103*9880d681SAndroid Build Coastguard Worker  %_ref.i.i = getelementptr inbounds %class.D, %class.D* %p1, i64 0, i32 0, i32 0, i32 1, i32 0, i32 0
104*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %_ref.i.i, align 4
105*9880d681SAndroid Build Coastguard Worker  %inc.i.i = add nsw i32 %0, 1
106*9880d681SAndroid Build Coastguard Worker  store i32 %inc.i.i, i32* %_ref.i.i, align 4
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerdeclare noalias i8* @_Znwm()
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_v0(...)
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerdeclare void @_ZdlPv()
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdefine %class.D* @_ZN1BI1DEptEv(%class.B* nocapture readonly %this) nounwind readonly uwtable align 2 {
117*9880d681SAndroid Build Coastguard Workerentry:
118*9880d681SAndroid Build Coastguard Worker  %m_ptr = getelementptr inbounds %class.B, %class.B* %this, i64 0, i32 0
119*9880d681SAndroid Build Coastguard Worker  %0 = load %class.D*, %class.D** %m_ptr, align 8
120*9880d681SAndroid Build Coastguard Worker  ret %class.D* %0
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdeclare void @_ZN1D16deleteKeyPressedEv()
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1BI1DED1Ev(%class.B* nocapture readonly %this) unnamed_addr uwtable align 2 {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  %m_ptr.i = getelementptr inbounds %class.B, %class.B* %this, i64 0, i32 0
128*9880d681SAndroid Build Coastguard Worker  %0 = load %class.D*, %class.D** %m_ptr.i, align 8
129*9880d681SAndroid Build Coastguard Worker  %_ref.i.i = getelementptr inbounds %class.D, %class.D* %0, i64 0, i32 0, i32 0, i32 1, i32 0, i32 0
130*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %_ref.i.i, align 4
131*9880d681SAndroid Build Coastguard Worker  %tobool.i.i = icmp eq i32 %1, 0
132*9880d681SAndroid Build Coastguard Worker  br i1 %tobool.i.i, label %_ZN1BI1DED2Ev.exit, label %if.then.i.i
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerif.then.i.i:                                      ; preds = %entry
135*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %_ZN1BI1DED2Ev.exit, label %delete.notnull.i.i
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerdelete.notnull.i.i:                               ; preds = %if.then.i.i
138*9880d681SAndroid Build Coastguard Worker  call void @_ZdlPv() #9
139*9880d681SAndroid Build Coastguard Worker  unreachable
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker_ZN1BI1DED2Ev.exit:                               ; preds = %entry, %if.then.i.i
142*9880d681SAndroid Build Coastguard Worker  ret void
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdeclare hidden void @__clang_call_terminate()
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1BI1DED2Ev(%class.B* nocapture readonly %this) unnamed_addr uwtable align 2 {
148*9880d681SAndroid Build Coastguard Workerentry:
149*9880d681SAndroid Build Coastguard Worker  %m_ptr = getelementptr inbounds %class.B, %class.B* %this, i64 0, i32 0
150*9880d681SAndroid Build Coastguard Worker  %0 = load %class.D*, %class.D** %m_ptr, align 8
151*9880d681SAndroid Build Coastguard Worker  %_ref.i = getelementptr inbounds %class.D, %class.D* %0, i64 0, i32 0, i32 0, i32 1, i32 0, i32 0
152*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %_ref.i, align 4
153*9880d681SAndroid Build Coastguard Worker  %tobool.i = icmp eq i32 %1, 0
154*9880d681SAndroid Build Coastguard Worker  br i1 %tobool.i, label %_ZN1AI1CE5derefEv.exit, label %if.then.i
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerif.then.i:                                        ; preds = %entry
157*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %_ZN1AI1CE5derefEv.exit, label %delete.notnull.i
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerdelete.notnull.i:                                 ; preds = %if.then.i
160*9880d681SAndroid Build Coastguard Worker  call void @_ZdlPv() #9
161*9880d681SAndroid Build Coastguard Worker  unreachable
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker_ZN1AI1CE5derefEv.exit:                           ; preds = %entry, %if.then.i
164*9880d681SAndroid Build Coastguard Worker  ret void
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1AI1CE5derefEv(%class.A* nocapture readonly %this) nounwind uwtable align 2 {
168*9880d681SAndroid Build Coastguard Workerentry:
169*9880d681SAndroid Build Coastguard Worker  %_ref = getelementptr inbounds %class.A, %class.A* %this, i64 0, i32 0
170*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %_ref, align 4
171*9880d681SAndroid Build Coastguard Worker  %tobool = icmp eq i32 %0, 0
172*9880d681SAndroid Build Coastguard Worker  br i1 %tobool, label %if.end, label %if.then
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
175*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %if.end, label %delete.notnull
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerdelete.notnull:                                   ; preds = %if.then
178*9880d681SAndroid Build Coastguard Worker  call void @_ZdlPv() #9
179*9880d681SAndroid Build Coastguard Worker  unreachable
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %entry, %if.then
182*9880d681SAndroid Build Coastguard Worker  ret void
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1BI1DEC2EPS0_(%class.B* nocapture %this, %class.D* %p1) unnamed_addr uwtable align 2 {
186*9880d681SAndroid Build Coastguard Workerentry:
187*9880d681SAndroid Build Coastguard Worker  %m_ptr = getelementptr inbounds %class.B, %class.B* %this, i64 0, i32 0
188*9880d681SAndroid Build Coastguard Worker  store %class.D* %p1, %class.D** %m_ptr, align 8
189*9880d681SAndroid Build Coastguard Worker  %_ref.i = getelementptr inbounds %class.D, %class.D* %p1, i64 0, i32 0, i32 0, i32 1, i32 0, i32 0
190*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %_ref.i, align 4
191*9880d681SAndroid Build Coastguard Worker  %inc.i = add nsw i32 %0, 1
192*9880d681SAndroid Build Coastguard Worker  store i32 %inc.i, i32* %_ref.i, align 4
193*9880d681SAndroid Build Coastguard Worker  ret void
194*9880d681SAndroid Build Coastguard Worker}
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Workerdefine void @_ZN1AI1CE3refEv(%class.A* nocapture %this) nounwind uwtable align 2 {
197*9880d681SAndroid Build Coastguard Workerentry:
198*9880d681SAndroid Build Coastguard Worker  %_ref = getelementptr inbounds %class.A, %class.A* %this, i64 0, i32 0
199*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %_ref, align 4
200*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i32 %0, 1
201*9880d681SAndroid Build Coastguard Worker  store i32 %inc, i32* %_ref, align 4
202*9880d681SAndroid Build Coastguard Worker  ret void
203*9880d681SAndroid Build Coastguard Worker}
204