summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-10-28 20:00:33 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-10-28 20:00:33 +0000
commitef00283425e40d9e78129d28e0c8ad965c3ea66b (patch)
treeec5d2693b651e20afa6c6607110eac0dead048d0 /llvm/test
parente0ab873a843b5f1320d376d67c9c5683c89a9921 (diff)
downloadbcm5719-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')
-rw-r--r--llvm/test/Transforms/SpeculativeExecution/spec-calls.ll64
-rw-r--r--llvm/test/Transforms/SpeculativeExecution/spec-casts.ll136
-rw-r--r--llvm/test/Transforms/SpeculativeExecution/spec-compares.ll31
-rw-r--r--llvm/test/Transforms/SpeculativeExecution/spec-fp.ll87
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
+}
OpenPOWER on IntegriCloud