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