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 4declare void @zzz() 5 6define i32 @lex(i1 %c0, i1 %c1, i32 %r0, i32 %r1, i32 %v) { 7; CHECK-LABEL: @lex( 8; CHECK-NEXT: entry: 9; CHECK-NEXT: [[C0_NOT:%.*]] = xor i1 [[C0:%.*]], true 10; CHECK-NEXT: [[C1_NOT:%.*]] = xor i1 [[C1:%.*]], true 11; CHECK-NEXT: [[BRMERGE:%.*]] = select i1 [[C0_NOT]], i1 true, i1 [[C1_NOT]] 12; CHECK-NEXT: [[R0_MUX:%.*]] = select i1 [[C0_NOT]], i32 [[R0:%.*]], i32 [[R1:%.*]] 13; CHECK-NEXT: br i1 [[BRMERGE]], label [[COMMON_RET:%.*]], label [[DO_BODY:%.*]] 14; CHECK: common.ret: 15; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[R0_MUX]], [[ENTRY:%.*]] ], [ [[R1]], [[DO_BODY]] ] 16; CHECK-NEXT: ret i32 [[COMMON_RET_OP]] 17; CHECK: do.body: 18; CHECK-NEXT: call void @zzz() 19; CHECK-NEXT: switch i32 [[V:%.*]], label [[COMMON_RET]] [ 20; CHECK-NEXT: i32 10, label [[DO_BODY]] 21; CHECK-NEXT: i32 32, label [[DO_BODY]] 22; CHECK-NEXT: i32 9, label [[DO_BODY]] 23; CHECK-NEXT: ] 24; 25entry: 26 br i1 %c0, label %if.end, label %if.then 27 28if.then: ; preds = %entry 29 ret i32 %r0 30 31if.end: ; preds = %entry 32 br i1 %c1, label %do.body, label %do.end 33 34do.body: ; preds = %if.then193, %if.then193, %if.then193, %do.body, %do.body, %if.end 35 call void @zzz() 36 switch i32 %v, label %do.end [ 37 i32 10, label %if.then193 38 i32 32, label %do.body 39 i32 9, label %do.body 40 ] 41 42if.then193: ; preds = %do.body 43 switch i32 %v, label %do.end [ 44 i32 32, label %do.body 45 i32 10, label %do.body 46 i32 9, label %do.body 47 ] 48 49do.end: ; preds = %if.then193, %do.body, %if.end 50 ret i32 %r1 51} 52