; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @foo() { entry: %call = call i32 @cond() %tobool = icmp ne i32 %call, 0 br i1 %tobool, label %if.then, label %if.end if.then: ; preds = %entry call void @abort1() unreachable if.end: ; preds = %entry %call1 = call i32 @cond() %tobool2 = icmp ne i32 %call1, 0 br i1 %tobool2, label %if.then3, label %if.end4 if.then3: ; preds = %if.end call void @abort2() unreachable if.end4: ; preds = %if.end %call5 = call i32 @cond() %tobool6 = icmp ne i32 %call5, 0 br i1 %tobool6, label %if.then7, label %if.end8 if.then7: ; preds = %if.end4 call void @abort3() unreachable if.end8: ; preds = %if.end4 ret i32 0 } ; CHECK-LABEL: foo: ; CHECK: callq cond ; CHECK: callq cond ; CHECK: callq cond ; We don't need int3's between these calls to abort, since they won't confuse ; the unwinder. ; CHECK: callq abort1 ; CHECK-NEXT: # %if.then3 ; CHECK: callq abort2 ; CHECK-NEXT: # %if.then7 ; CHECK: callq abort3 ; CHECK-NEXT: int3 declare dso_local i32 @cond() declare dso_local void @abort1() noreturn declare dso_local void @abort2() noreturn declare dso_local void @abort3() noreturn