aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/X86/sse_reload_fold.ll
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-02-11 21:29:39 +0000
committerDan Gohman <gohman@apple.com>2009-02-11 21:29:39 +0000
commitc8db34cb07fea88c4b8f3e0f095fd8aed568b28e (patch)
tree180555e018ae5b9046d0ff282acb5183c7f73556 /test/CodeGen/X86/sse_reload_fold.ll
parent8bb332d45dd266b9678446cea5812371d8d3e8af (diff)
downloadexternal_llvm-c8db34cb07fea88c4b8f3e0f095fd8aed568b28e.zip
external_llvm-c8db34cb07fea88c4b8f3e0f095fd8aed568b28e.tar.gz
external_llvm-c8db34cb07fea88c4b8f3e0f095fd8aed568b28e.tar.bz2
Don't use special heuristics for nodes with no data predecessors
unless they actually have data successors, and likewise for nodes with no data successors unless they actually have data precessors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64327 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/sse_reload_fold.ll')
-rw-r--r--test/CodeGen/X86/sse_reload_fold.ll45
1 files changed, 23 insertions, 22 deletions
diff --git a/test/CodeGen/X86/sse_reload_fold.ll b/test/CodeGen/X86/sse_reload_fold.ll
index 1100eb7..547763e 100644
--- a/test/CodeGen/X86/sse_reload_fold.ll
+++ b/test/CodeGen/X86/sse_reload_fold.ll
@@ -2,9 +2,10 @@
; RUN: llc -march=x86-64 -mattr=+64bit,+sse3 -print-failed-fuse-candidates |& \
; RUN: grep fail | count 1
-declare void @bar()
-declare <4 x float> @qux()
-declare <2 x double> @pin()
+declare float @test_f(float %f)
+declare double @test_d(double %f)
+declare <4 x float> @test_vf(<4 x float> %f)
+declare <2 x double> @test_vd(<2 x double> %f)
declare float @llvm.sqrt.f32(float)
declare double @llvm.sqrt.f64(double)
@@ -26,99 +27,99 @@ declare <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double>, <2 x double>)
declare <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double>, <2 x double>)
define float @foo(float %f) {
- call void @bar()
+ %a = call float @test_f(float %f)
%t = call float @llvm.sqrt.f32(float %f)
ret float %t
}
define double @doo(double %f) {
- call void @bar()
+ %a = call double @test_d(double %f)
%t = call double @llvm.sqrt.f64(double %f)
ret double %t
}
define <4 x float> @a0(<4 x float> %f) {
- call void @bar()
+ %a = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @a1(<4 x float> %f) {
- call void @bar()
+ %a = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @a2(<4 x float> %f) {
- call void @bar()
+ %a = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @b3(<4 x float> %f) {
- %y = call <4 x float> @qux()
+ %y = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %y, <4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @b4(<4 x float> %f) {
- %y = call <4 x float> @qux()
+ %y = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %y, <4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @b5(<4 x float> %f) {
- %y = call <4 x float> @qux()
+ %y = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %y, <4 x float> %f, i8 7)
ret <4 x float> %t
}
define <4 x float> @b6(<4 x float> %f) {
- %y = call <4 x float> @qux()
+ %y = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse3.addsub.ps(<4 x float> %y, <4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @b7(<4 x float> %f) {
- %y = call <4 x float> @qux()
+ %y = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse3.hadd.ps(<4 x float> %y, <4 x float> %f)
ret <4 x float> %t
}
define <4 x float> @b8(<4 x float> %f) {
- %y = call <4 x float> @qux()
+ %y = call <4 x float> @test_vf(<4 x float> %f)
%t = call <4 x float> @llvm.x86.sse3.hsub.ps(<4 x float> %y, <4 x float> %f)
ret <4 x float> %t
}
define <2 x double> @c1(<2 x double> %f) {
- call void @bar()
+ %a = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double> %f)
ret <2 x double> %t
}
define <2 x double> @d3(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %y, <2 x double> %f)
ret <2 x double> %t
}
define <2 x double> @d4(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %y, <2 x double> %f)
ret <2 x double> %t
}
define <2 x double> @d5(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %y, <2 x double> %f, i8 7)
ret <2 x double> %t
}
define <2 x double> @d6(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse3.addsub.pd(<2 x double> %y, <2 x double> %f)
ret <2 x double> %t
}
define <2 x double> @d7(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse3.hadd.pd(<2 x double> %y, <2 x double> %f)
ret <2 x double> %t
}
define <2 x double> @d8(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %y, <2 x double> %f)
ret <2 x double> %t
}
; This one should fail to fuse.
define <2 x double> @z0(<2 x double> %f) {
- %y = call <2 x double> @pin()
+ %y = call <2 x double> @test_vd(<2 x double> %f)
%t = call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %f, <2 x double> %y)
ret <2 x double> %t
}