llvm-6502/test/Analysis/CostModel/X86/scalarize.ll
Raul E. Silvera 6df2b69098 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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203509 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-10 22:59:13 +00:00

42 lines
1.3 KiB
LLVM

; 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
}