; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 ; RUN: opt < %s -S -passes=speculative-execution \ ; RUN: -spec-exec-max-speculation-cost 4 -spec-exec-max-not-hoisted 3 \ ; RUN: | FileCheck %s define void @ifThen_bitcast(i32 %arg) { ; CHECK-LABEL: define void @ifThen_bitcast( ; CHECK-SAME: i32 [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = bitcast i32 [[ARG]] to float ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = bitcast i32 %arg to float br label %b b: ret void } define void @ifThen_ptrtoint(ptr %arg) { ; CHECK-LABEL: define void @ifThen_ptrtoint( ; CHECK-SAME: ptr [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = ptrtoint ptr [[ARG]] to i64 ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = ptrtoint ptr %arg to i64 br label %b b: ret void } define void @ifThen_ptrtoaddr(ptr %arg) { ; CHECK-LABEL: define void @ifThen_ptrtoaddr( ; CHECK-SAME: ptr [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = ptrtoaddr ptr [[ARG]] to i64 ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = ptrtoaddr ptr %arg to i64 br label %b b: ret void } define void @ifThen_inttoptr(i64 %arg) { ; CHECK-LABEL: define void @ifThen_inttoptr( ; CHECK-SAME: i64 [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = inttoptr i64 [[ARG]] to ptr ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = inttoptr i64 %arg to ptr br label %b b: ret void } define void @ifThen_addrspacecast(ptr %arg) { ; CHECK-LABEL: define void @ifThen_addrspacecast( ; CHECK-SAME: ptr [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = addrspacecast ptr [[ARG]] to ptr addrspace(1) ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = addrspacecast ptr %arg to ptr addrspace(1) br label %b b: ret void } define void @ifThen_fptoui(float %arg) { ; CHECK-LABEL: define void @ifThen_fptoui( ; CHECK-SAME: float [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = fptoui float [[ARG]] to i32 ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = fptoui float %arg to i32 br label %b b: ret void } define void @ifThen_fptosi(float %arg) { ; CHECK-LABEL: define void @ifThen_fptosi( ; CHECK-SAME: float [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = fptosi float [[ARG]] to i32 ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = fptosi float %arg to i32 br label %b b: ret void } define void @ifThen_uitofp(i32 %arg) { ; CHECK-LABEL: define void @ifThen_uitofp( ; CHECK-SAME: i32 [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = uitofp i32 [[ARG]] to float ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = uitofp i32 %arg to float br label %b b: ret void } define void @ifThen_sitofp(i32 %arg) { ; CHECK-LABEL: define void @ifThen_sitofp( ; CHECK-SAME: i32 [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = sitofp i32 [[ARG]] to float ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = sitofp i32 %arg to float br label %b b: ret void } define void @ifThen_fpext(float %arg) { ; CHECK-LABEL: define void @ifThen_fpext( ; CHECK-SAME: float [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = fpext float [[ARG]] to double ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = fpext float %arg to double br label %b b: ret void } define void @ifThen_fptrunc(double %arg) { ; CHECK-LABEL: define void @ifThen_fptrunc( ; CHECK-SAME: double [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = fptrunc double [[ARG]] to float ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = fptrunc double %arg to float br label %b b: ret void } define void @ifThen_trunc(i32 %arg) { ; CHECK-LABEL: define void @ifThen_trunc( ; CHECK-SAME: i32 [[ARG:%.*]]) { ; CHECK-NEXT: [[X:%.*]] = trunc i32 [[ARG]] to i16 ; CHECK-NEXT: br i1 true, label %[[A:.*]], label %[[B:.*]] ; CHECK: [[A]]: ; CHECK-NEXT: br label %[[B]] ; CHECK: [[B]]: ; CHECK-NEXT: ret void ; br i1 true, label %a, label %b a: %x = trunc i32 %arg to i16 br label %b b: ret void }