@@ -22,6 +22,29 @@ funclet_end:
2222 cleanupret from %cleanuppad unwind to caller
2323}
2424
25+ define void @unreachable_cleanuppad_linear_middle_block (i64 %shapes.1 ) personality ptr null {
26+ ; CHECK-LABEL: define void @unreachable_cleanuppad_linear_middle_block(
27+ ; CHECK-SAME: i64 [[SHAPES_1:%.*]]) personality ptr null {
28+ ; CHECK-NEXT: [[START:.*:]]
29+ ; CHECK-NEXT: [[_7:%.*]] = icmp ult i64 0, [[SHAPES_1]]
30+ ; CHECK-NEXT: ret void
31+ ;
32+ start:
33+ %_7 = icmp ult i64 0 , %shapes.1
34+ ret void
35+
36+ funclet:
37+ %cleanuppad = cleanuppad within none []
38+ br label %middle_block
39+
40+ middle_block:
41+ %tmp1 = add i64 %shapes.1 , 42
42+ br label %funclet_end
43+
44+ funclet_end:
45+ cleanupret from %cleanuppad unwind to caller
46+ }
47+
2548define void @unreachable_cleanuppad_multiple_predecessors (i64 %shapes.1 ) personality ptr null {
2649; CHECK-LABEL: define void @unreachable_cleanuppad_multiple_predecessors(
2750; CHECK-SAME: i64 [[SHAPES_1:%.*]]) personality ptr null {
@@ -172,10 +195,17 @@ bb13:
172195declare x86_thiscallcc ptr @quux (ptr , ptr , i32 )
173196
174197define x86_thiscallcc ptr @baz (ptr %arg , ptr %arg1 , ptr %arg2 , i1 %arg3 , ptr %arg4 ) personality ptr null {
198+ ; CHECK-LABEL: define x86_thiscallcc ptr @baz(
199+ ; CHECK-SAME: ptr [[ARG:%.*]], ptr [[ARG1:%.*]], ptr [[ARG2:%.*]], i1 [[ARG3:%.*]], ptr [[ARG4:%.*]]) personality ptr null {
200+ ; CHECK-NEXT: [[BB:.*:]]
201+ ; CHECK-NEXT: [[ALLOCA:%.*]] = alloca [2 x %struct.foo], align 4
202+ ; CHECK-NEXT: [[INVOKE:%.*]] = call x86_thiscallcc ptr @quux(ptr null, ptr null, i32 0) #[[ATTR1:[0-9]+]]
203+ ; CHECK-NEXT: unreachable
204+ ;
175205bb:
176206 %alloca = alloca [2 x %struct.foo ], align 4
177207 %invoke = invoke x86_thiscallcc ptr @quux (ptr null , ptr null , i32 0 )
178- to label %bb5 unwind label %bb10
208+ to label %bb5 unwind label %bb10
179209
180210bb5: ; preds = %bb
181211 %getelementptr = getelementptr i8 , ptr %arg , i32 20
0 commit comments