xref: /llvm-project/llvm/test/Transforms/SimplifyCFG/no-md-sink.ll (revision 8979ae42769e529b0f6fce3268492ffb49bd54b9)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -sink-common-insts -S | FileCheck %s
3; RUN: opt < %s -passes='simplifycfg<sink-common-insts>' -S | FileCheck %s
4
5define i1 @test1(i1 zeroext %flag, ptr %y) #0 {
6; CHECK-LABEL: @test1(
7; CHECK-NEXT:  entry:
8; CHECK-NEXT:    [[S:%.*]] = call i1 @llvm.type.test(ptr [[Y:%.*]], metadata [[META0:![0-9]+]])
9; CHECK-NEXT:    [[R:%.*]] = call i1 @llvm.type.test(ptr [[Y]], metadata [[META1:![0-9]+]])
10; CHECK-NEXT:    [[T:%.*]] = select i1 [[FLAG:%.*]], i1 [[R]], i1 [[S]]
11; CHECK-NEXT:    ret i1 [[T]]
12;
13entry:
14  br i1 %flag, label %if.then, label %if.else
15
16if.then:
17  %r = call i1 @llvm.type.test(ptr %y, metadata !0)
18  br label %if.end
19
20if.else:
21  %s = call i1 @llvm.type.test(ptr %y, metadata !1)
22  br label %if.end
23
24if.end:
25  %t = phi i1 [ %s, %if.else ], [ %r, %if.then ]
26  ret i1 %t
27}
28
29!0 = !{i32 0, !"typeid1"}
30!1 = !{i32 4, !"typeid1"}
31
32declare i1 @llvm.type.test(ptr %ptr, metadata %bitset) nounwind readnone
33
34define i1 @test2(i1 zeroext %flag, ptr %y, ptr %z) #0 {
35; CHECK-LABEL: @test2(
36; CHECK-NEXT:  entry:
37; CHECK-NEXT:    [[Y_Z:%.*]] = select i1 [[FLAG:%.*]], ptr [[Y:%.*]], ptr [[Z:%.*]]
38; CHECK-NEXT:    [[S:%.*]] = call i1 @llvm.type.test(ptr [[Y_Z]], metadata [[META1]])
39; CHECK-NEXT:    ret i1 [[S]]
40;
41entry:
42  br i1 %flag, label %if.then, label %if.else
43
44if.then:
45  %r = call i1 @llvm.type.test(ptr %y, metadata !0)
46  br label %if.end
47
48if.else:
49  %s = call i1 @llvm.type.test(ptr %z, metadata !0)
50  br label %if.end
51
52if.end:
53  %t = phi i1 [ %s, %if.else ], [ %r, %if.then ]
54  ret i1 %t
55}
56