Improve long vector sext/zext lowering on ARM
[oota-llvm.git] / test / Analysis / CostModel / ARM / shuffle.ll
1 ; RUN: opt < %s  -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -mcpu=swift | FileCheck %s
2 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
3 target triple = "thumbv7-apple-ios6.0.0"
4
5 ; CHECK: shuffle
6 define void @shuffle() {
7
8
9   ;; Reverse shuffles should be lowered to vrev and possibly a vext (for
10   ;; quadwords)
11
12     ; Vector values
13   ; CHECK: cost of 1 {{.*}} shuffle
14   %v7 = shufflevector <2 x i8> undef, <2 x i8>undef, <2 x i32> <i32 1, i32 0>
15   ; CHECK: cost of 1 {{.*}} shuffle
16   %v8 = shufflevector <4 x i8> undef, <4 x i8>undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
17   ; CHECK: cost of 1 {{.*}} shuffle
18   %v9 = shufflevector <8 x i8> undef, <8 x i8>undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
19   ; CHECK: cost of 2 {{.*}} shuffle
20   %v10 = shufflevector <16 x i8> undef, <16 x i8>undef, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
21
22   ; CHECK: cost of 1 {{.*}} shuffle
23   %v11 = shufflevector <2 x i16> undef, <2 x i16>undef, <2 x i32> <i32 1, i32 0>
24   ; CHECK: cost of 1 {{.*}} shuffle
25   %v12 = shufflevector <4 x i16> undef, <4 x i16>undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
26   ; CHECK: cost of 2 {{.*}} shuffle
27   %v13 = shufflevector <8 x i16> undef, <8 x i16>undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
28
29   ; CHECK: cost of 1 {{.*}} shuffle
30   %v14 = shufflevector <2 x i32> undef, <2 x i32>undef, <2 x i32> <i32 1, i32 0>
31   ; CHECK: cost of 2 {{.*}} shuffle
32   %v15 = shufflevector <4 x i32> undef, <4 x i32>undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
33
34   ; CHECK: cost of 1 {{.*}} shuffle
35   %v16 = shufflevector <2 x float> undef, <2 x float>undef, <2 x i32> <i32 1, i32 0>
36   ; CHECK: cost of 2 {{.*}} shuffle
37   %v17 = shufflevector <4 x float> undef, <4 x float>undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
38
39   ret void
40 }