Add a triple to switch.ll test.
[oota-llvm.git] / test / CodeGen / X86 / vec_reassociate.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s\r
2 \r
3 define <4 x i32> @add_4i32(<4 x i32> %a0, <4 x i32> %a1) {\r
4   ;CHECK-LABEL:  @add_4i32\r
5   ;CHECK:        # BB#0:\r
6   ;CHECK-NEXT:   paddd %xmm1, %xmm0\r
7   ;CHECK-NEXT:   retq\r
8   %1 = add <4 x i32> %a0, <i32  1, i32 -2, i32  3, i32 -4>\r
9   %2 = add <4 x i32> %a1, <i32 -1, i32  2, i32 -3, i32  4>\r
10   %3 = add <4 x i32> %1, %2\r
11   ret <4 x i32> %3\r
12 }\r
13 \r
14 define <4 x i32> @add_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {\r
15   ;CHECK-LABEL:  @add_4i32_commute\r
16   ;CHECK:        # BB#0:\r
17   ;CHECK-NEXT:   paddd %xmm1, %xmm0\r
18   ;CHECK-NEXT:   retq\r
19   %1 = add <4 x i32> <i32  1, i32 -2, i32  3, i32 -4>, %a0\r
20   %2 = add <4 x i32> <i32 -1, i32  2, i32 -3, i32  4>, %a1\r
21   %3 = add <4 x i32> %1, %2\r
22   ret <4 x i32> %3\r
23 }\r
24 \r
25 define <4 x i32> @mul_4i32(<4 x i32> %a0, <4 x i32> %a1) {\r
26   ;CHECK-LABEL:  @mul_4i32\r
27   ;CHECK:        # BB#0:\r
28   ;CHECK-NEXT:   pmulld %xmm1, %xmm0\r
29   ;CHECK-NEXT:   pmulld .LCPI2_0(%rip), %xmm0\r
30   ;CHECK-NEXT:   retq\r
31   %1 = mul <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 4>\r
32   %2 = mul <4 x i32> %a1, <i32 4, i32 3, i32 2, i32 1>\r
33   %3 = mul <4 x i32> %1, %2\r
34   ret <4 x i32> %3\r
35 }\r
36 \r
37 define <4 x i32> @mul_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {\r
38   ;CHECK-LABEL:  @mul_4i32_commute\r
39   ;CHECK:        # BB#0:\r
40   ;CHECK-NEXT:   pmulld %xmm1, %xmm0\r
41   ;CHECK-NEXT:   pmulld .LCPI3_0(%rip), %xmm0\r
42   ;CHECK-NEXT:   retq\r
43   %1 = mul <4 x i32> <i32 1, i32 2, i32 3, i32 4>, %a0\r
44   %2 = mul <4 x i32> <i32 4, i32 3, i32 2, i32 1>, %a1\r
45   %3 = mul <4 x i32> %1, %2\r
46   ret <4 x i32> %3\r
47 }\r
48 \r
49 define <4 x i32> @and_4i32(<4 x i32> %a0, <4 x i32> %a1) {\r
50   ;CHECK-LABEL:  @and_4i32\r
51   ;CHECK:        # BB#0:\r
52   ;CHECK-NEXT:   andps %xmm1, %xmm0\r
53   ;CHECK-NEXT:   andps .LCPI4_0(%rip), %xmm0\r
54   ;CHECK-NEXT:   retq\r
55   %1 = and <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>\r
56   %2 = and <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>\r
57   %3 = and <4 x i32> %1, %2\r
58   ret <4 x i32> %3\r
59 }\r
60 \r
61 define <4 x i32> @and_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {\r
62   ;CHECK-LABEL:  @and_4i32_commute\r
63   ;CHECK:        # BB#0:\r
64   ;CHECK-NEXT:   andps %xmm1, %xmm0\r
65   ;CHECK-NEXT:   andps .LCPI5_0(%rip), %xmm0\r
66   ;CHECK-NEXT:   retq\r
67   %1 = and <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0\r
68   %2 = and <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1\r
69   %3 = and <4 x i32> %1, %2\r
70   ret <4 x i32> %3\r
71 }\r
72 \r
73 define <4 x i32> @or_4i32(<4 x i32> %a0, <4 x i32> %a1) {\r
74   ;CHECK-LABEL:  @or_4i32\r
75   ;CHECK:        # BB#0:\r
76   ;CHECK-NEXT:   orps %xmm1, %xmm0\r
77   ;CHECK-NEXT:   orps .LCPI6_0(%rip), %xmm0\r
78   ;CHECK-NEXT:   retq\r
79   %1 = or <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>\r
80   %2 = or <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>\r
81   %3 = or <4 x i32> %1, %2\r
82   ret <4 x i32> %3\r
83 }\r
84 \r
85 define <4 x i32> @or_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {\r
86   ;CHECK-LABEL:  @or_4i32_commute\r
87   ;CHECK:        # BB#0:\r
88   ;CHECK-NEXT:   orps %xmm1, %xmm0\r
89   ;CHECK-NEXT:   orps .LCPI7_0(%rip), %xmm0\r
90   ;CHECK-NEXT:   retq\r
91   %1 = or <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0 \r
92   %2 = or <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1\r
93   %3 = or <4 x i32> %1, %2\r
94   ret <4 x i32> %3\r
95 }\r
96 \r
97 define <4 x i32> @xor_4i32(<4 x i32> %a0, <4 x i32> %a1) {\r
98   ;CHECK-LABEL:  @xor_4i32\r
99   ;CHECK:        # BB#0:\r
100   ;CHECK-NEXT:   xorps %xmm1, %xmm0\r
101   ;CHECK-NEXT:   xorps .LCPI8_0(%rip), %xmm0\r
102   ;CHECK-NEXT:   retq\r
103   %1 = xor <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>\r
104   %2 = xor <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>\r
105   %3 = xor <4 x i32> %1, %2\r
106   ret <4 x i32> %3\r
107 }\r
108 \r
109 define <4 x i32> @xor_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {\r
110   ;CHECK-LABEL:  @xor_4i32_commute\r
111   ;CHECK:        # BB#0:\r
112   ;CHECK-NEXT:   xorps %xmm1, %xmm0\r
113   ;CHECK-NEXT:   xorps .LCPI9_0(%rip), %xmm0\r
114   ;CHECK-NEXT:   retq\r
115   %1 = xor <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0\r
116   %2 = xor <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1\r
117   %3 = xor <4 x i32> %1, %2\r
118   ret <4 x i32> %3\r
119 }\r