summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis/CostModel/X86/scalarize.ll
diff options
context:
space:
mode:
authorRaul E. Silvera <rsilvera@google.com>2014-03-10 22:59:13 +0000
committerRaul E. Silvera <rsilvera@google.com>2014-03-10 22:59:13 +0000
commitce376c0fcb8548b980257d30d43164c4a63f70ad (patch)
tree4674402872cdebcb5ba78a4aa3e54a8e5689666d /llvm/test/Analysis/CostModel/X86/scalarize.ll
parent92aa8c220af260b5f4792f059549cb0ce7ef0a4d (diff)
downloadbcm5719-llvm-ce376c0fcb8548b980257d30d43164c4a63f70ad.tar.gz
bcm5719-llvm-ce376c0fcb8548b980257d30d43164c4a63f70ad.zip
When analyzing vectors of element type that require legalization,
the legalization cost must be included to get an accurate estimation of the total cost of the scalarized vector. The inaccurate cost triggered unprofitable SLP vectorization on 32-bit X86. Summary: Include legalization overhead when computing scalarization cost Reviewers: hfinkel, nadav CC: chandlerc, rnk, llvm-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2992 llvm-svn: 203509
Diffstat (limited to 'llvm/test/Analysis/CostModel/X86/scalarize.ll')
-rw-r--r--llvm/test/Analysis/CostModel/X86/scalarize.ll41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/Analysis/CostModel/X86/scalarize.ll b/llvm/test/Analysis/CostModel/X86/scalarize.ll
new file mode 100644
index 00000000000..fc25fcbc563
--- /dev/null
+++ b/llvm/test/Analysis/CostModel/X86/scalarize.ll
@@ -0,0 +1,41 @@
+; RUN: opt < %s -cost-model -analyze -mtriple=i386 -mcpu=corei7-avx | FileCheck %s -check-prefix=CHECK32
+; RUN: opt < %s -cost-model -analyze -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s -check-prefix=CHECK64
+
+; Test vector scalarization costs.
+; RUN: llc < %s -march=x86 -mcpu=i386
+; RUN: llc < %s -march=x86 -mcpu=yonah
+
+%i4 = type <4 x i32>
+%i8 = type <2 x i64>
+
+;;; TEST HANDLING OF VARIOUS VECTOR SIZES
+
+declare %i4 @llvm.bswap.v4i32(%i4)
+declare %i8 @llvm.bswap.v2i64(%i8)
+
+declare %i4 @llvm.ctpop.v4i32(%i4)
+declare %i8 @llvm.ctpop.v2i64(%i8)
+
+; CHECK32-LABEL: test_scalarized_intrinsics
+; CHECK64-LABEL: test_scalarized_intrinsics
+define void @test_scalarized_intrinsics() {
+ %r1 = add %i8 undef, undef
+
+; CHECK32: cost of 12 {{.*}}bswap.v4i32
+; CHECK64: cost of 12 {{.*}}bswap.v4i32
+ %r2 = call %i4 @llvm.bswap.v4i32(%i4 undef)
+; CHECK32: cost of 10 {{.*}}bswap.v2i64
+; CHECK64: cost of 6 {{.*}}bswap.v2i64
+ %r3 = call %i8 @llvm.bswap.v2i64(%i8 undef)
+
+; CHECK32: cost of 12 {{.*}}ctpop.v4i32
+; CHECK64: cost of 12 {{.*}}ctpop.v4i32
+ %r4 = call %i4 @llvm.ctpop.v4i32(%i4 undef)
+; CHECK32: cost of 10 {{.*}}ctpop.v2i64
+; CHECK64: cost of 6 {{.*}}ctpop.v2i64
+ %r5 = call %i8 @llvm.ctpop.v2i64(%i8 undef)
+
+; CHECK32: ret
+; CHECK64: ret
+ ret void
+}
OpenPOWER on IntegriCloud