1; Test that vectors are scalarized/lowered correctly
2; (with both legalization methods).
3; RUN: llc -march=x86  < %s
4; RUN: llc -march=x86  < %s
5
6; A simple test to check copyToParts and copyFromParts.
7
8define <4 x i64> @test_param_0(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
9   ret <4 x i64> %A
10}
11
12define <2 x i32> @test_param_1(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
13   ret <2 x i32> %B
14}
15
16define <4 x i8> @test_param_2(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
17   ret <4 x i8> %C
18}
19
20; Simple tests to check arithmetic and vector operations on types which need to
21; be legalized (no loads/stores to/from memory here).
22
23define <4 x i64> @test_arith_0(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
24   %K = add <4 x i64> %A, <i64 0, i64 1, i64 3, i64 9>
25   ret <4 x i64> %K
26}
27
28define <2 x i32> @test_arith_1(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
29   %K = add <2 x i32> %B, <i32 0, i32 1>
30   ret <2 x i32> %K
31}
32
33define <4 x i8> @test_arith_2(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
34   %K = add <4 x i8> %C, <i8 0, i8 1, i8 3, i8 9>
35   ret <4 x i8> %K
36}
37
38define i8 @test_arith_3(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
39   %K = add <4 x i8> %C, <i8 0, i8 1, i8 3, i8 9>
40   %Y = extractelement <4 x i8> %K, i32 1
41   ret i8 %Y
42}
43
44define <4 x i8> @test_arith_4(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
45   %Y = insertelement <4 x i8> %C, i8 1, i32 0
46   ret <4 x i8> %Y
47}
48
49define <4 x i32> @test_arith_5(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
50   %Y = insertelement <4 x i32> %C, i32 1, i32 0
51   ret <4 x i32> %Y
52}
53
54define <4 x i32> @test_arith_6(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
55   %F = extractelement <2 x i32> %B, i32 1
56   %Y = insertelement <4 x i32> %C, i32 %F, i32 0
57   ret <4 x i32> %Y
58}
59
60define <4 x i64> @test_arith_7(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
61   %F = extractelement <2 x i32> %B, i32 1
62   %W = zext i32 %F to i64
63   %Y = insertelement <4 x i64> %A, i64 %W, i32 0
64   ret <4 x i64> %Y
65}
66
67define i64 @test_arith_8(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
68   %F = extractelement <2 x i32> %B, i32 1
69   %W = zext i32 %F to i64
70   %T = add i64 %W , 11
71   ret i64 %T
72}
73
74define <4 x i64> @test_arith_9(<4 x i64> %A, <2 x i32> %B, <4 x i16> %C)  {
75   %T = add <4 x i16> %C, %C
76   %F0 = extractelement <4 x i16> %T, i32 0
77   %F1 = extractelement <4 x i16> %T, i32 1
78   %W0 = zext i16 %F0 to i64
79   %W1 = zext i16 %F1 to i64
80   %Y0 = insertelement <4 x i64> %A,  i64 %W0, i32 0
81   %Y1 = insertelement <4 x i64> %Y0, i64 %W1, i32 2
82   ret <4 x i64> %Y1
83}
84
85define <4 x i16> @test_arith_10(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
86   %F = bitcast <2 x i32> %B to <4 x i16>
87   %T = add <4 x i16> %F , <i16 0, i16 1, i16 2, i16 3>
88   ret <4 x i16> %T
89}
90
91
92; Simple tests to check saving/loading from memory
93define <4 x i16> @test_mem_0(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
94   %F = bitcast <2 x i32> %B to <4 x i16>
95   %T = add <4 x i16> %F , <i16 0, i16 1, i16 2, i16 3>
96   ret <4 x i16> %T
97}
98
99