1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s 3 4define void @pr46638(i1 %c, i32 %x) { 5; CHECK-LABEL: @pr46638( 6; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[X:%.*]], 0 7; CHECK-NEXT: call void @llvm.assume(i1 [[CMP1]]) 8; CHECK-NEXT: br i1 [[C:%.*]], label [[TRUE2_CRITEDGE:%.*]], label [[FALSE1:%.*]] 9; CHECK: false1: 10; CHECK-NEXT: call void @dummy(i32 1) 11; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[X]], 0 12; CHECK-NEXT: [[EXT:%.*]] = zext i1 [[CMP2]] to i32 13; CHECK-NEXT: call void @dummy(i32 [[EXT]]) 14; CHECK-NEXT: br label [[COMMON_RET:%.*]] 15; CHECK: common.ret: 16; CHECK-NEXT: ret void 17; CHECK: true2.critedge: 18; CHECK-NEXT: call void @dummy(i32 0) 19; CHECK-NEXT: call void @dummy(i32 2) 20; CHECK-NEXT: br label [[COMMON_RET]] 21; 22 %cmp1 = icmp slt i32 %x, 0 23 call void @llvm.assume(i1 %cmp1) 24 br i1 %c, label %true1, label %false1 25 26true1: 27 %cmp2 = icmp sgt i32 %x, 0 28 %ext = zext i1 %cmp2 to i32 29 call void @dummy(i32 %ext) 30 br i1 %c, label %true2, label %false2 31 32false1: 33 call void @dummy(i32 1) 34 br label %true1 35 36true2: 37 call void @dummy(i32 2) 38 ret void 39 40false2: 41 ret void 42} 43 44declare void @dummy(i32) 45declare void @llvm.assume(i1) 46