xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2011-05-04-MultipleLandingPadSuccs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs
2*9880d681SAndroid Build Coastguard Worker; <rdar://problem/9187612>
3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32"
4*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv7-apple-darwin"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine void @func() unnamed_addr align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  br label %for.cond
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerfor.cond:
11*9880d681SAndroid Build Coastguard Worker  %tmp2 = phi i32 [ 0, %entry ], [ %add, %for.cond.backedge ]
12*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %tmp2, 14
13*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %for.body, label %for.end
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerfor.body:
16*9880d681SAndroid Build Coastguard Worker  %add = add i32 %tmp2, 1
17*9880d681SAndroid Build Coastguard Worker  switch i32 %tmp2, label %sw.default [
18*9880d681SAndroid Build Coastguard Worker    i32 0, label %sw.bb
19*9880d681SAndroid Build Coastguard Worker    i32 1, label %sw.bb
20*9880d681SAndroid Build Coastguard Worker    i32 2, label %sw.bb
21*9880d681SAndroid Build Coastguard Worker    i32 4, label %sw.bb
22*9880d681SAndroid Build Coastguard Worker    i32 5, label %sw.bb
23*9880d681SAndroid Build Coastguard Worker    i32 10, label %sw.bb
24*9880d681SAndroid Build Coastguard Worker  ]
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workersw.bb:
27*9880d681SAndroid Build Coastguard Worker  invoke void @foo()
28*9880d681SAndroid Build Coastguard Worker          to label %invoke.cont17 unwind label %lpad
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerinvoke.cont17:
31*9880d681SAndroid Build Coastguard Worker  invoke void @foo()
32*9880d681SAndroid Build Coastguard Worker          to label %for.cond.backedge unwind label %lpad26
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerfor.cond.backedge:
35*9880d681SAndroid Build Coastguard Worker  br label %for.cond
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerlpad:
38*9880d681SAndroid Build Coastguard Worker  %exn = landingpad { i8*, i32 }
39*9880d681SAndroid Build Coastguard Worker           catch i8* null
40*9880d681SAndroid Build Coastguard Worker  invoke void @foo()
41*9880d681SAndroid Build Coastguard Worker          to label %eh.resume unwind label %terminate.lpad
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerlpad26:
44*9880d681SAndroid Build Coastguard Worker  %exn27 = landingpad { i8*, i32 }
45*9880d681SAndroid Build Coastguard Worker           catch i8* null
46*9880d681SAndroid Build Coastguard Worker  invoke void @foo()
47*9880d681SAndroid Build Coastguard Worker          to label %eh.resume unwind label %terminate.lpad
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workersw.default:
50*9880d681SAndroid Build Coastguard Worker  br label %for.cond.backedge
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerfor.end:
53*9880d681SAndroid Build Coastguard Worker  invoke void @foo()
54*9880d681SAndroid Build Coastguard Worker          to label %call8.i.i.i.noexc unwind label %lpad44
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workercall8.i.i.i.noexc:
57*9880d681SAndroid Build Coastguard Worker  ret void
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerlpad44:
60*9880d681SAndroid Build Coastguard Worker  %exn45 = landingpad { i8*, i32 }
61*9880d681SAndroid Build Coastguard Worker           catch i8* null
62*9880d681SAndroid Build Coastguard Worker  invoke void @foo()
63*9880d681SAndroid Build Coastguard Worker          to label %eh.resume unwind label %terminate.lpad
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workereh.resume:
66*9880d681SAndroid Build Coastguard Worker  %exn.slot.0 = phi { i8*, i32 } [ %exn27, %lpad26 ], [ %exn, %lpad ], [ %exn45, %lpad44 ]
67*9880d681SAndroid Build Coastguard Worker  resume { i8*, i32 } %exn.slot.0
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerterminate.lpad:
70*9880d681SAndroid Build Coastguard Worker  %exn51 = landingpad { i8*, i32 }
71*9880d681SAndroid Build Coastguard Worker           catch i8* null
72*9880d681SAndroid Build Coastguard Worker  tail call void @_ZSt9terminatev() noreturn nounwind
73*9880d681SAndroid Build Coastguard Worker  unreachable
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerdeclare void @foo()
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_sj0(...)
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdeclare void @_Unwind_SjLj_Resume_or_Rethrow(i8*)
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerdeclare void @_ZSt9terminatev()
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker!0 = !{!"any pointer", !1}
85*9880d681SAndroid Build Coastguard Worker!1 = !{!"omnipotent char", !2}
86*9880d681SAndroid Build Coastguard Worker!2 = !{!"Simple C/C++ TBAA", null}
87*9880d681SAndroid Build Coastguard Worker!3 = !{!"bool", !1}
88*9880d681SAndroid Build Coastguard Worker!4 = !{!"int", !1}
89