diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-10-28 20:00:33 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-10-28 20:00:33 +0000 |
| commit | ef00283425e40d9e78129d28e0c8ad965c3ea66b (patch) | |
| tree | ec5d2693b651e20afa6c6607110eac0dead048d0 /llvm/test | |
| parent | e0ab873a843b5f1320d376d67c9c5683c89a9921 (diff) | |
| download | bcm5719-llvm-ef00283425e40d9e78129d28e0c8ad965c3ea66b.tar.gz bcm5719-llvm-ef00283425e40d9e78129d28e0c8ad965c3ea66b.zip | |
SpeculativeExecution: Allow speculating more inst types
Partial step towards removing the whitelist and only
using TTI's cost.
llvm-svn: 285438
Diffstat (limited to 'llvm/test')
4 files changed, 318 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-calls.ll b/llvm/test/Transforms/SpeculativeExecution/spec-calls.ll new file mode 100644 index 00000000000..5fa9059a503 --- /dev/null +++ b/llvm/test/Transforms/SpeculativeExecution/spec-calls.ll @@ -0,0 +1,64 @@ +; RUN: opt < %s -S -speculative-execution \ +; RUN: -spec-exec-max-speculation-cost 4 -spec-exec-max-not-hoisted 3 \ +; RUN: | FileCheck %s + +declare float @llvm.fabs.f32(float) nounwind readnone +declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone + +declare float @unknown(float) +declare float @unknown_readnone(float) nounwind readnone + +; CHECK-LABEL: @ifThen_fabs( +; CHECK: call float @llvm.fabs.f32( +; CHECK: br i1 true +define void @ifThen_fabs() { + br i1 true, label %a, label %b + +a: + %x = call float @llvm.fabs.f32(float 1.0) + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_ctlz( +; CHECK: call i32 @llvm.ctlz.i32( +; CHECK: br i1 true +define void @ifThen_ctlz() { + br i1 true, label %a, label %b + +a: + %x = call i32 @llvm.ctlz.i32(i32 0, i1 true) + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_call_sideeffects( +; CHECK: br i1 true +; CHECK: call float @unknown( +define void @ifThen_call_sideeffects() { + br i1 true, label %a, label %b + +a: + %x = call float @unknown(float 1.0) + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_call_readnone( +; CHECK: br i1 true +; CHECK: call float @unknown_readnone( +define void @ifThen_call_readnone() { + br i1 true, label %a, label %b +a: + %x = call float @unknown_readnone(float 1.0) + br label %b + +b: + ret void +} diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll b/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll new file mode 100644 index 00000000000..c75d7449d11 --- /dev/null +++ b/llvm/test/Transforms/SpeculativeExecution/spec-casts.ll @@ -0,0 +1,136 @@ +; RUN: opt < %s -S -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() { + br i1 true, label %a, label %b + +a: + %x = bitcast i32 undef to float + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_ptrtoint( +; CHECK: ptrtoint +; CHECK: br i1 true +define void @ifThen_ptrtoint() { + br i1 true, label %a, label %b + +a: + %x = ptrtoint i32* undef to i64 + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_inttoptr( +; CHECK: inttoptr +; CHECK: br i1 true +define void @ifThen_inttoptr() { + br i1 true, label %a, label %b + +a: + %x = inttoptr i64 undef to i32* + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_addrspacecast( +; CHECK: addrspacecast +; CHECK: br i1 true +define void @ifThen_addrspacecast() { + br i1 true, label %a, label %b +a: + %x = addrspacecast i32* undef to i32 addrspace(1)* + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fptoui( +; CHECK: fptoui +; CHECK: br i1 true +define void @ifThen_fptoui() { + br i1 true, label %a, label %b +a: + %x = fptoui float undef to i32 + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fptosi( +; CHECK: fptosi +; CHECK: br i1 true +define void @ifThen_fptosi() { + br i1 true, label %a, label %b +a: + %x = fptosi float undef to i32 + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_uitofp( +; CHECK: uitofp +; CHECK: br i1 true +define void @ifThen_uitofp() { + br i1 true, label %a, label %b +a: + %x = uitofp i32 undef to float + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_sitofp( +; CHECK: sitofp +; CHECK: br i1 true +define void @ifThen_sitofp() { + br i1 true, label %a, label %b +a: + %x = sitofp i32 undef to float + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fpext( +; CHECK: fpext +; CHECK: br i1 true +define void @ifThen_fpext() { + br i1 true, label %a, label %b +a: + %x = fpext float undef to double + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fptrunc( +; CHECK: fptrunc +; CHECK: br i1 true +define void @ifThen_fptrunc() { + br i1 true, label %a, label %b +a: + %x = fptrunc double undef to float + br label %b + +b: + ret void +} diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-compares.ll b/llvm/test/Transforms/SpeculativeExecution/spec-compares.ll new file mode 100644 index 00000000000..0d97374456c --- /dev/null +++ b/llvm/test/Transforms/SpeculativeExecution/spec-compares.ll @@ -0,0 +1,31 @@ +; RUN: opt < %s -S -speculative-execution \ +; RUN: -spec-exec-max-speculation-cost 4 -spec-exec-max-not-hoisted 3 \ +; RUN: | FileCheck %s + +; CHECK-LABEL: @ifThen_icmp( +; CHECK: icmp +; CHECK: br i1 true +define void @ifThen_icmp() { + br i1 true, label %a, label %b + +a: + %x = icmp eq i32 undef, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fcmp( +; CHECK: fcmp +; CHECK: br i1 true +define void @ifThen_fcmp() { + br i1 true, label %a, label %b + +a: + %x = fcmp oeq float undef, undef + br label %b + +b: + ret void +} diff --git a/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll b/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll new file mode 100644 index 00000000000..efab8ab704c --- /dev/null +++ b/llvm/test/Transforms/SpeculativeExecution/spec-fp.ll @@ -0,0 +1,87 @@ +; RUN: opt < %s -S -speculative-execution \ +; RUN: -spec-exec-max-speculation-cost 4 -spec-exec-max-not-hoisted 3 \ +; RUN: | FileCheck %s + +; CHECK-LABEL: @ifThen_fadd( +; CHECK: fadd +; CHECK: br i1 true +define void @ifThen_fadd() { + br i1 true, label %a, label %b + +a: + %x = fadd float undef, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fsub( +; CHECK: fsub +; CHECK: br i1 true +define void @ifThen_fsub() { + br i1 true, label %a, label %b + +a: + %x = fsub float undef, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fneg( +; CHECK: fsub float -0.0 +; CHECK: br i1 true +define void @ifThen_fneg() { + br i1 true, label %a, label %b + +a: + %x = fsub float -0.0, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fmul( +; CHECK: fmul +; CHECK: br i1 true +define void @ifThen_fmul() { + br i1 true, label %a, label %b + +a: + %x = fmul float undef, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_fdiv( +; CHECK: fdiv +; CHECK: br i1 true +define void @ifThen_fdiv() { + br i1 true, label %a, label %b + +a: + %x = fdiv float undef, undef + br label %b + +b: + ret void +} + +; CHECK-LABEL: @ifThen_frem( +; CHECK: frem +; CHECK: br i1 true +define void @ifThen_frem() { + br i1 true, label %a, label %b + +a: + %x = frem float undef, undef + br label %b + +b: + ret void +} |

