diff options
Diffstat (limited to 'llvm/test/Transforms/SpeculativeExecution/spec-casts.ll')
-rw-r--r-- | llvm/test/Transforms/SpeculativeExecution/spec-casts.ll | 197 |
1 files changed, 142 insertions, 55 deletions
diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll b/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll index c966bed..c7500cf 100644 --- a/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll +++ b/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll @@ -1,147 +1,234 @@ +; 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 -; CHECK-LABEL: @ifThen_bitcast( -; CHECK: bitcast -; CHECK: br i1 true -define void @ifThen_bitcast() { +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 undef to float + %x = bitcast i32 %arg to float br label %b b: ret void } -; CHECK-LABEL: @ifThen_ptrtoint( -; CHECK: ptrtoint -; CHECK: br i1 true -define void @ifThen_ptrtoint() { +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 undef to i64 + %x = ptrtoint ptr %arg to i64 br label %b b: ret void } -; CHECK-LABEL: @ifThen_inttoptr( -; CHECK: inttoptr -; CHECK: br i1 true -define void @ifThen_inttoptr() { +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 = inttoptr i64 undef to ptr + %x = ptrtoaddr ptr %arg to i64 br label %b b: ret void } -; CHECK-LABEL: @ifThen_addrspacecast( -; CHECK: addrspacecast -; CHECK: br i1 true -define void @ifThen_addrspacecast() { +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 undef to ptr addrspace(1) + %x = addrspacecast ptr %arg to ptr addrspace(1) br label %b b: ret void } -; CHECK-LABEL: @ifThen_fptoui( -; CHECK: fptoui -; CHECK: br i1 true -define void @ifThen_fptoui() { +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 undef to i32 + %x = fptoui float %arg to i32 br label %b b: ret void } -; CHECK-LABEL: @ifThen_fptosi( -; CHECK: fptosi -; CHECK: br i1 true -define void @ifThen_fptosi() { +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 undef to i32 + %x = fptosi float %arg to i32 br label %b b: ret void } -; CHECK-LABEL: @ifThen_uitofp( -; CHECK: uitofp -; CHECK: br i1 true -define void @ifThen_uitofp() { +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 undef to float + %x = uitofp i32 %arg to float br label %b b: ret void } -; CHECK-LABEL: @ifThen_sitofp( -; CHECK: sitofp -; CHECK: br i1 true -define void @ifThen_sitofp() { +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 undef to float + %x = sitofp i32 %arg to float br label %b b: ret void } -; CHECK-LABEL: @ifThen_fpext( -; CHECK: fpext -; CHECK: br i1 true -define void @ifThen_fpext() { +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 undef to double + %x = fpext float %arg to double br label %b b: ret void } -; CHECK-LABEL: @ifThen_fptrunc( -; CHECK: fptrunc -; CHECK: br i1 true -define void @ifThen_fptrunc() { +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 undef to float + %x = fptrunc double %arg to float br label %b b: ret void } -; CHECK-LABEL: @ifThen_trunc( -; CHECK: trunc -; CHECK: br i1 true -define void @ifThen_trunc() { +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 undef to i16 + %x = trunc i32 %arg to i16 br label %b b: |