Correct cost model for vector shift on AVX2

- After moving logic recognizing vector shift with scalar amount from
  DAG combining into DAG lowering, we declare to customize all vector
  shifts even vector shift on AVX is legal. As a result, the cost model
  needs special tuning to identify these legal cases.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177586 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Michael Liao
2013-03-20 22:01:10 +00:00
parent 6178e5f50c
commit f74e9bf650
2 changed files with 77 additions and 0 deletions
+54
View File
@@ -72,3 +72,57 @@ define i32 @fmul(i32 %arg) {
%B = fmul <8 x float> undef, undef
ret i32 undef
}
; AVX: shift
; AVX2: shift
define void @shift() {
; AVX: cost of 2 {{.*}} shl
; AVX2: cost of 1 {{.*}} shl
%A0 = shl <4 x i32> undef, undef
; AVX: cost of 2 {{.*}} shl
; AVX2: cost of 1 {{.*}} shl
%A1 = shl <2 x i64> undef, undef
; AVX: cost of 2 {{.*}} lshr
; AVX2: cost of 1 {{.*}} lshr
%B0 = lshr <4 x i32> undef, undef
; AVX: cost of 2 {{.*}} lshr
; AVX2: cost of 1 {{.*}} lshr
%B1 = lshr <2 x i64> undef, undef
; AVX: cost of 2 {{.*}} ashr
; AVX2: cost of 1 {{.*}} ashr
%C0 = ashr <4 x i32> undef, undef
; AVX: cost of 6 {{.*}} ashr
; AVX2: cost of 6 {{.*}} ashr
%C1 = ashr <2 x i64> undef, undef
ret void
}
; AVX: avx2shift
; AVX2: avx2shift
define void @avx2shift() {
; AVX: cost of 2 {{.*}} shl
; AVX2: cost of 1 {{.*}} shl
%A0 = shl <8 x i32> undef, undef
; AVX: cost of 2 {{.*}} shl
; AVX2: cost of 1 {{.*}} shl
%A1 = shl <4 x i64> undef, undef
; AVX: cost of 2 {{.*}} lshr
; AVX2: cost of 1 {{.*}} lshr
%B0 = lshr <8 x i32> undef, undef
; AVX: cost of 2 {{.*}} lshr
; AVX2: cost of 1 {{.*}} lshr
%B1 = lshr <4 x i64> undef, undef
; AVX: cost of 2 {{.*}} ashr
; AVX2: cost of 1 {{.*}} ashr
%C0 = ashr <8 x i32> undef, undef
; AVX: cost of 12 {{.*}} ashr
; AVX2: cost of 12 {{.*}} ashr
%C1 = ashr <4 x i64> undef, undef
ret void
}