1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -callsite-splitting -simplifycfg < %s | FileCheck %s
3
4define i16 @test1() {
5; CHECK-LABEL: @test1(
6; CHECK-NEXT:  entry:
7; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 undef, i16 1, i16 0
8; CHECK-NEXT:    br label [[FOR_COND12:%.*]]
9; CHECK:       for.cond12:
10; CHECK-NEXT:    call void @callee(i16 [[SPEC_SELECT]])
11; CHECK-NEXT:    br label [[FOR_COND12]]
12;
13entry:
14  %spec.select = select i1 undef, i16 1, i16 0
15  %tobool18 = icmp ne i16 %spec.select, 0
16  br i1 %tobool18, label %for.cond12.us, label %for.cond12
17
18for.cond12.us:
19  unreachable
20
21for.cond12:
22  call void @callee(i16 %spec.select)
23  br label %for.cond12
24}
25
26define i16 @test2() {
27; CHECK-LABEL: @test2(
28; CHECK-NEXT:  entry:
29; CHECK-NEXT:    [[S:%.*]] = select i1 undef, i16 1, i16 0
30; CHECK-NEXT:    br label [[FOR_COND12:%.*]]
31; CHECK:       for.cond12:
32; CHECK-NEXT:    call void @callee(i16 [[S]])
33; CHECK-NEXT:    [[ADD:%.*]] = add i16 [[S]], 10
34; CHECK-NEXT:    [[ADD2:%.*]] = add i16 [[S]], 10
35; CHECK-NEXT:    br label [[FOR_COND12]]
36;
37entry:
38  %s= select i1 undef, i16 1, i16 0
39  %tobool18 = icmp ne i16 %s, 0
40  br i1 %tobool18, label %for.cond12.us, label %for.cond12
41
42for.cond12.us:
43  unreachable
44
45for.cond12:
46  call void @callee(i16 %s)
47  %add = add i16 %s, 10
48  %add2 = add i16 %s, 10
49  br label %for.cond12
50}
51
52define i16 @test3() {
53; CHECK-LABEL: @test3(
54; CHECK-NEXT:  entry:
55; CHECK-NEXT:    [[S:%.*]] = select i1 undef, i16 1, i16 0
56; CHECK-NEXT:    br label [[FOR_COND12:%.*]]
57; CHECK:       for.cond12:
58; CHECK-NEXT:    call void @callee(i16 [[S]])
59; CHECK-NEXT:    [[ADD:%.*]] = add i16 [[S]], 10
60; CHECK-NEXT:    [[ADD2:%.*]] = add i16 [[ADD]], 10
61; CHECK-NEXT:    br i1 undef, label [[FOR_COND12]], label [[EXIT:%.*]]
62; CHECK:       exit:
63; CHECK-NEXT:    ret i16 [[ADD2]]
64;
65entry:
66  %s= select i1 undef, i16 1, i16 0
67  %tobool18 = icmp ne i16 %s, 0
68  br i1 %tobool18, label %for.cond12.us, label %for.cond12
69
70for.cond12.us:
71  unreachable
72
73for.cond12:
74  call void @callee(i16 %s)
75  %add = add i16 %s, 10
76  %add2 = add i16 %add, 10
77  br i1 undef, label %for.cond12, label %exit
78
79exit:
80  ret i16 %add2
81}
82
83declare void @callee(i16 %flag)
84