[Alignment][NFC] Use Align with TargetLowering::setMinFunctionAlignment
[llvm-core.git] / test / CodeGen / X86 / vec_reassociate.ll
blobc8b61809d31ad20f16cd6a46460b0171723f3fcd
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X86
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X64
5 define <4 x i32> @add_4i32(<4 x i32> %a0, <4 x i32> %a1) {
6 ; X86-LABEL: add_4i32:
7 ; X86:       # %bb.0:
8 ; X86-NEXT:    paddd %xmm1, %xmm0
9 ; X86-NEXT:    retl
11 ; X64-LABEL: add_4i32:
12 ; X64:       # %bb.0:
13 ; X64-NEXT:    paddd %xmm1, %xmm0
14 ; X64-NEXT:    retq
15   %1 = add <4 x i32> %a0, <i32  1, i32 -2, i32  3, i32 -4>
16   %2 = add <4 x i32> %a1, <i32 -1, i32  2, i32 -3, i32  4>
17   %3 = add <4 x i32> %1, %2
18   ret <4 x i32> %3
21 define <4 x i32> @add_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
22 ; X86-LABEL: add_4i32_commute:
23 ; X86:       # %bb.0:
24 ; X86-NEXT:    paddd %xmm1, %xmm0
25 ; X86-NEXT:    retl
27 ; X64-LABEL: add_4i32_commute:
28 ; X64:       # %bb.0:
29 ; X64-NEXT:    paddd %xmm1, %xmm0
30 ; X64-NEXT:    retq
31   %1 = add <4 x i32> <i32  1, i32 -2, i32  3, i32 -4>, %a0
32   %2 = add <4 x i32> <i32 -1, i32  2, i32 -3, i32  4>, %a1
33   %3 = add <4 x i32> %1, %2
34   ret <4 x i32> %3
37 define <4 x i32> @mul_4i32(<4 x i32> %a0, <4 x i32> %a1) {
38 ; X86-LABEL: mul_4i32:
39 ; X86:       # %bb.0:
40 ; X86-NEXT:    pmulld %xmm1, %xmm0
41 ; X86-NEXT:    pmulld {{\.LCPI.*}}, %xmm0
42 ; X86-NEXT:    retl
44 ; X64-LABEL: mul_4i32:
45 ; X64:       # %bb.0:
46 ; X64-NEXT:    pmulld %xmm1, %xmm0
47 ; X64-NEXT:    pmulld {{.*}}(%rip), %xmm0
48 ; X64-NEXT:    retq
49   %1 = mul <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 4>
50   %2 = mul <4 x i32> %a1, <i32 4, i32 3, i32 2, i32 1>
51   %3 = mul <4 x i32> %1, %2
52   ret <4 x i32> %3
55 define <4 x i32> @mul_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
56 ; X86-LABEL: mul_4i32_commute:
57 ; X86:       # %bb.0:
58 ; X86-NEXT:    pmulld %xmm1, %xmm0
59 ; X86-NEXT:    pmulld {{\.LCPI.*}}, %xmm0
60 ; X86-NEXT:    retl
62 ; X64-LABEL: mul_4i32_commute:
63 ; X64:       # %bb.0:
64 ; X64-NEXT:    pmulld %xmm1, %xmm0
65 ; X64-NEXT:    pmulld {{.*}}(%rip), %xmm0
66 ; X64-NEXT:    retq
67   %1 = mul <4 x i32> <i32 1, i32 2, i32 3, i32 4>, %a0
68   %2 = mul <4 x i32> <i32 4, i32 3, i32 2, i32 1>, %a1
69   %3 = mul <4 x i32> %1, %2
70   ret <4 x i32> %3
73 define <4 x i32> @and_4i32(<4 x i32> %a0, <4 x i32> %a1) {
74 ; X86-LABEL: and_4i32:
75 ; X86:       # %bb.0:
76 ; X86-NEXT:    andps %xmm1, %xmm0
77 ; X86-NEXT:    andps {{\.LCPI.*}}, %xmm0
78 ; X86-NEXT:    retl
80 ; X64-LABEL: and_4i32:
81 ; X64:       # %bb.0:
82 ; X64-NEXT:    andps %xmm1, %xmm0
83 ; X64-NEXT:    andps {{.*}}(%rip), %xmm0
84 ; X64-NEXT:    retq
85   %1 = and <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>
86   %2 = and <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>
87   %3 = and <4 x i32> %1, %2
88   ret <4 x i32> %3
91 define <4 x i32> @and_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
92 ; X86-LABEL: and_4i32_commute:
93 ; X86:       # %bb.0:
94 ; X86-NEXT:    andps %xmm1, %xmm0
95 ; X86-NEXT:    andps {{\.LCPI.*}}, %xmm0
96 ; X86-NEXT:    retl
98 ; X64-LABEL: and_4i32_commute:
99 ; X64:       # %bb.0:
100 ; X64-NEXT:    andps %xmm1, %xmm0
101 ; X64-NEXT:    andps {{.*}}(%rip), %xmm0
102 ; X64-NEXT:    retq
103   %1 = and <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0
104   %2 = and <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1
105   %3 = and <4 x i32> %1, %2
106   ret <4 x i32> %3
109 define <4 x i32> @or_4i32(<4 x i32> %a0, <4 x i32> %a1) {
110 ; X86-LABEL: or_4i32:
111 ; X86:       # %bb.0:
112 ; X86-NEXT:    orps %xmm1, %xmm0
113 ; X86-NEXT:    orps {{\.LCPI.*}}, %xmm0
114 ; X86-NEXT:    retl
116 ; X64-LABEL: or_4i32:
117 ; X64:       # %bb.0:
118 ; X64-NEXT:    orps %xmm1, %xmm0
119 ; X64-NEXT:    orps {{.*}}(%rip), %xmm0
120 ; X64-NEXT:    retq
121   %1 = or <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>
122   %2 = or <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>
123   %3 = or <4 x i32> %1, %2
124   ret <4 x i32> %3
127 define <4 x i32> @or_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
128 ; X86-LABEL: or_4i32_commute:
129 ; X86:       # %bb.0:
130 ; X86-NEXT:    orps %xmm1, %xmm0
131 ; X86-NEXT:    orps {{\.LCPI.*}}, %xmm0
132 ; X86-NEXT:    retl
134 ; X64-LABEL: or_4i32_commute:
135 ; X64:       # %bb.0:
136 ; X64-NEXT:    orps %xmm1, %xmm0
137 ; X64-NEXT:    orps {{.*}}(%rip), %xmm0
138 ; X64-NEXT:    retq
139   %1 = or <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0
140   %2 = or <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1
141   %3 = or <4 x i32> %1, %2
142   ret <4 x i32> %3
145 define <4 x i32> @xor_4i32(<4 x i32> %a0, <4 x i32> %a1) {
146 ; X86-LABEL: xor_4i32:
147 ; X86:       # %bb.0:
148 ; X86-NEXT:    xorps %xmm1, %xmm0
149 ; X86-NEXT:    xorps {{\.LCPI.*}}, %xmm0
150 ; X86-NEXT:    retl
152 ; X64-LABEL: xor_4i32:
153 ; X64:       # %bb.0:
154 ; X64-NEXT:    xorps %xmm1, %xmm0
155 ; X64-NEXT:    xorps {{.*}}(%rip), %xmm0
156 ; X64-NEXT:    retq
157   %1 = xor <4 x i32> %a0, <i32 -2, i32 -2, i32  3, i32  3>
158   %2 = xor <4 x i32> %a1, <i32 -1, i32 -1, i32  1, i32  1>
159   %3 = xor <4 x i32> %1, %2
160   ret <4 x i32> %3
163 define <4 x i32> @xor_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) {
164 ; X86-LABEL: xor_4i32_commute:
165 ; X86:       # %bb.0:
166 ; X86-NEXT:    xorps %xmm1, %xmm0
167 ; X86-NEXT:    xorps {{\.LCPI.*}}, %xmm0
168 ; X86-NEXT:    retl
170 ; X64-LABEL: xor_4i32_commute:
171 ; X64:       # %bb.0:
172 ; X64-NEXT:    xorps %xmm1, %xmm0
173 ; X64-NEXT:    xorps {{.*}}(%rip), %xmm0
174 ; X64-NEXT:    retq
175   %1 = xor <4 x i32> <i32 -2, i32 -2, i32  3, i32  3>, %a0
176   %2 = xor <4 x i32> <i32 -1, i32 -1, i32  1, i32  1>, %a1
177   %3 = xor <4 x i32> %1, %2
178   ret <4 x i32> %3