; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -simplifycfg -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck %s ; RUN: opt -S -passes=simplifycfg < %s | FileCheck %s declare void @foo() convergent define i32 @test_01(i32 %a) { ; CHECK-LABEL: @test_01( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 0 ; CHECK-NEXT: br i1 [[COND]], label [[MERGE:%.*]], label [[IF_FALSE:%.*]] ; CHECK: if.false: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[MERGE]] ; CHECK: merge: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[IF_FALSE_2:%.*]] ; CHECK: if.false.2: ; CHECK-NEXT: call void @foo() ; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: ret i32 [[A]] ; entry: %cond = icmp eq i32 %a, 0 br i1 %cond, label %merge, label %if.false if.false: call void @foo() br label %merge merge: call void @foo() br i1 %cond, label %exit, label %if.false.2 if.false.2: call void @foo() br label %exit exit: ret i32 %a }