; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 ; RUN: opt < %s -O3 -S | FileCheck %s define i32 @thread_uncond_bb_cmp(i1 %c, i32 %v) { ; CHECK-LABEL: define i32 @thread_uncond_bb_cmp( ; CHECK-SAME: i1 [[C:%.*]], i32 [[V:%.*]]) local_unnamed_addr { ; CHECK-NEXT: entry: ; CHECK-NEXT: br i1 [[C]], label [[DO_END:%.*]], label [[IF_THEN:%.*]] ; CHECK: if.then: ; CHECK-NEXT: tail call void @dummy() ; CHECK-NEXT: br label [[DO_END]] ; CHECK: return: ; CHECK-NEXT: [[RETVAL:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[V]], [[IF_THEN]] ] ; CHECK-NEXT: ret i32 [[RETVAL]] ; entry: br i1 %c, label %do.end, label %if.then if.then: ; preds = %entry call void @dummy() %tobool = icmp eq i32 %v, 0 br i1 %tobool, label %do.end, label %return do.end: ; preds = %entry, %if.then br label %return return: ; preds = %if.then, %do.end %retval = phi i32 [ 0, %do.end ], [ %v, %if.then ] ret i32 %retval } define i32 @thread_uncond_bb_cmp_zext(i1 %c, i32 %v) { ; CHECK-LABEL: define i32 @thread_uncond_bb_cmp_zext( ; CHECK-SAME: i1 [[C:%.*]], i32 [[V:%.*]]) local_unnamed_addr { ; CHECK-NEXT: entry: ; CHECK-NEXT: br i1 [[C]], label [[DO_END:%.*]], label [[IF_THEN:%.*]] ; CHECK: if.then: ; CHECK-NEXT: tail call void @dummy() ; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[V]], 0 ; CHECK-NEXT: [[SPEC_SELECT:%.*]] = zext i1 [[TOBOOL]] to i32 ; CHECK-NEXT: br label [[DO_END]] ; CHECK: return: ; CHECK-NEXT: [[RETVAL:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[SPEC_SELECT]], [[IF_THEN]] ] ; CHECK-NEXT: ret i32 [[RETVAL]] ; entry: br i1 %c, label %do.end, label %if.then if.then: ; preds = %entry call void @dummy() %tobool = icmp eq i32 %v, 0 br i1 %tobool, label %do.end, label %return do.end: ; preds = %entry, %if.then br label %return return: ; preds = %if.then, %do.end %retval = phi i32 [ 0, %do.end ], [ 1, %if.then ] ret i32 %retval } declare void @dummy()