ZERO_EXTEND/SIGN_EXTEND/TRUNCATE optimization for AVX2
[oota-llvm.git] / test / CodeGen / X86 / avx2-conversions.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=core-avx2 -mattr=+avx2 | FileCheck %s\r
2 \r
3 ; CHECK: trunc4\r
4 ; CHECK: vpermd\r
5 ; CHECK-NOT: vinsert\r
6 ; CHECK: ret\r
7 define <4 x i32> @trunc4(<4 x i64> %A) nounwind {\r
8   %B = trunc <4 x i64> %A to <4 x i32>\r
9   ret <4 x i32>%B\r
10 }\r
11 \r
12 ; CHECK: trunc8\r
13 ; CHECK: vpshufb\r
14 ; CHECK-NOT: vinsert\r
15 ; CHECK: ret\r
16 \r
17 define <8 x i16> @trunc8(<8 x i32> %A) nounwind {\r
18   %B = trunc <8 x i32> %A to <8 x i16>\r
19   ret <8 x i16>%B\r
20 }\r
21 \r
22 ; CHECK: sext4\r
23 ; CHECK: vpmovsxdq\r
24 ; CHECK-NOT: vinsert\r
25 ; CHECK: ret\r
26 define <4 x i64> @sext4(<4 x i32> %A) nounwind {\r
27   %B = sext <4 x i32> %A to <4 x i64>\r
28   ret <4 x i64>%B\r
29 }\r
30 \r
31 ; CHECK: sext8\r
32 ; CHECK: vpmovsxwd\r
33 ; CHECK-NOT: vinsert\r
34 ; CHECK: ret\r
35 define <8 x i32> @sext8(<8 x i16> %A) nounwind {\r
36   %B = sext <8 x i16> %A to <8 x i32>\r
37   ret <8 x i32>%B\r
38 }\r
39 \r
40 ; CHECK: zext4\r
41 ; CHECK: vpmovzxdq\r
42 ; CHECK-NOT: vinsert\r
43 ; CHECK: ret\r
44 define <4 x i64> @zext4(<4 x i32> %A) nounwind {\r
45   %B = zext <4 x i32> %A to <4 x i64>\r
46   ret <4 x i64>%B\r
47 }\r
48 \r
49 ; CHECK: zext8\r
50 ; CHECK: vpmovzxwd\r
51 ; CHECK-NOT: vinsert\r
52 ; CHECK: ret\r
53 define <8 x i32> @zext8(<8 x i16> %A) nounwind {\r
54   %B = zext <8 x i16> %A to <8 x i32>\r
55   ret <8 x i32>%B\r
56 }\r
57 ; CHECK: zext_8i8_8i32\r
58 ; CHECK: vpmovzxwd\r
59 ; CHECK: vpand\r
60 ; CHECK: ret\r
61 define <8 x i32> @zext_8i8_8i32(<8 x i8> %A) nounwind {\r
62   %B = zext <8 x i8> %A to <8 x i32>  \r
63   ret <8 x i32>%B\r
64 }\r
65 \r
66 \r
67 \r
68 \r