xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/bswap-vector.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=x86-64 | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-SSE --check-prefix=CHECK-NOSSSE3
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=core2 | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-SSE --check-prefix=CHECK-SSSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=core-avx2 | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-AVX --check-prefix=CHECK-AVX2
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=core-avx2 -x86-experimental-vector-widening-legalization | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-WIDE-AVX --check-prefix=CHECK-WIDE-AVX2
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
8*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu"
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.bswap.v8i16(<8 x i16>)
11*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.bswap.v4i32(<4 x i32>)
12*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.bswap.v2i64(<2 x i64>)
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test1(<8 x i16> %v) {
15*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test1:
16*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
17*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm1
18*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm2
19*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
20*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[1,0,3,2,4,5,6,7]
21*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,5,4,7,6]
22*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
23*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
24*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
25*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm0
26*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
27*9880d681SAndroid Build Coastguard Worker;
28*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test1:
29*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
30*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
31*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
32*9880d681SAndroid Build Coastguard Worker;
33*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test1:
34*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
35*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
36*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
37*9880d681SAndroid Build Coastguard Worker;
38*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test1:
39*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
40*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
41*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %r = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)
44*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test2(<4 x i32> %v) {
48*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test2:
49*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
50*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm1
51*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm2
52*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
53*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
54*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
55*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
56*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
57*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
58*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm0
59*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
60*9880d681SAndroid Build Coastguard Worker;
61*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test2:
62*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
63*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
64*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
65*9880d681SAndroid Build Coastguard Worker;
66*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test2:
67*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
68*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
69*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
70*9880d681SAndroid Build Coastguard Worker;
71*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test2:
72*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
73*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
74*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
75*9880d681SAndroid Build Coastguard Workerentry:
76*9880d681SAndroid Build Coastguard Worker  %r = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)
77*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test3(<2 x i64> %v) {
81*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test3:
82*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
83*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm1
84*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm2
85*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
86*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[2,3,0,1]
87*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
88*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
89*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
90*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
91*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
92*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
93*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm0
94*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
95*9880d681SAndroid Build Coastguard Worker;
96*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test3:
97*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
98*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
99*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
100*9880d681SAndroid Build Coastguard Worker;
101*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test3:
102*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
103*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
104*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
105*9880d681SAndroid Build Coastguard Worker;
106*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test3:
107*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
108*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
109*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
110*9880d681SAndroid Build Coastguard Workerentry:
111*9880d681SAndroid Build Coastguard Worker  %r = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)
112*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %r
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.bswap.v16i16(<16 x i16>)
116*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.bswap.v8i32(<8 x i32>)
117*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.bswap.v4i64(<4 x i64>)
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test4(<16 x i16> %v) {
120*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test4:
121*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
122*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm2, %xmm2
123*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm3
124*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
125*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
126*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,4,7,6]
127*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
128*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
129*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
130*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm0
131*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm1, %xmm3
132*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
133*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[1,0,3,2,4,5,6,7]
134*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,5,4,7,6]
135*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
136*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
137*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,4,7,6]
138*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm1
139*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
140*9880d681SAndroid Build Coastguard Worker;
141*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test4:
142*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
143*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
144*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm0
145*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm1
146*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
147*9880d681SAndroid Build Coastguard Worker;
148*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test4:
149*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
150*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,21,20,23,22,25,24,27,26,29,28,31,30]
151*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
152*9880d681SAndroid Build Coastguard Worker;
153*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test4:
154*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
155*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,21,20,23,22,25,24,27,26,29,28,31,30]
156*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
157*9880d681SAndroid Build Coastguard Workerentry:
158*9880d681SAndroid Build Coastguard Worker  %r = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)
159*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test5(<8 x i32> %v) {
163*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test5:
164*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
165*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm2, %xmm2
166*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm3
167*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
168*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
169*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
170*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
171*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
172*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
173*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm0
174*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm1, %xmm3
175*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
176*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
177*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
178*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
179*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
180*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
181*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm1
182*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
183*9880d681SAndroid Build Coastguard Worker;
184*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test5:
185*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
186*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
187*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm0
188*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm1
189*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
190*9880d681SAndroid Build Coastguard Worker;
191*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test5:
192*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
193*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28]
194*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
195*9880d681SAndroid Build Coastguard Worker;
196*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test5:
197*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
198*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,19,18,17,16,23,22,21,20,27,26,25,24,31,30,29,28]
199*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
200*9880d681SAndroid Build Coastguard Workerentry:
201*9880d681SAndroid Build Coastguard Worker  %r = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)
202*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test6(<4 x i64> %v) {
206*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test6:
207*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
208*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm2, %xmm2
209*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm3
210*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
211*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
212*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
213*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
214*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
215*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
216*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
217*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
218*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm0
219*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm1, %xmm3
220*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
221*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[2,3,0,1]
222*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[3,2,1,0,4,5,6,7]
223*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,7,6,5,4]
224*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
225*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
226*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
227*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
228*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm3, %xmm1
229*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
230*9880d681SAndroid Build Coastguard Worker;
231*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test6:
232*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
233*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8]
234*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm0
235*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb %xmm2, %xmm1
236*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
237*9880d681SAndroid Build Coastguard Worker;
238*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test6:
239*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
240*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24]
241*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
242*9880d681SAndroid Build Coastguard Worker;
243*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test6:
244*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
245*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24]
246*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
247*9880d681SAndroid Build Coastguard Workerentry:
248*9880d681SAndroid Build Coastguard Worker  %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)
249*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %r
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.bswap.v4i16(<4 x i16>)
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test7(<4 x i16> %v) {
255*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-LABEL: test7:
256*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3:       # BB#0: # %entry
257*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pxor %xmm1, %xmm1
258*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    movdqa %xmm0, %xmm2
259*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
260*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm2 = xmm2[3,2,1,0,4,5,6,7]
261*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,7,6,5,4]
262*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
263*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
264*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
265*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    packuswb %xmm2, %xmm0
266*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    psrld $16, %xmm0
267*9880d681SAndroid Build Coastguard Worker; CHECK-NOSSSE3-NEXT:    retq
268*9880d681SAndroid Build Coastguard Worker;
269*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-LABEL: test7:
270*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3:       # BB#0: # %entry
271*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
272*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    psrld $16, %xmm0
273*9880d681SAndroid Build Coastguard Worker; CHECK-SSSE3-NEXT:    retq
274*9880d681SAndroid Build Coastguard Worker;
275*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: test7:
276*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
277*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]
278*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vpsrld $16, %xmm0, %xmm0
279*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
280*9880d681SAndroid Build Coastguard Worker;
281*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: test7:
282*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
283*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14]
284*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
285*9880d681SAndroid Build Coastguard Workerentry:
286*9880d681SAndroid Build Coastguard Worker  %r = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %v)
287*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %r
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker;
291*9880d681SAndroid Build Coastguard Worker; Double BSWAP -> Identity
292*9880d681SAndroid Build Coastguard Worker;
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @identity_v8i16(<8 x i16> %v) {
295*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v8i16:
296*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
297*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
298*9880d681SAndroid Build Coastguard Workerentry:
299*9880d681SAndroid Build Coastguard Worker  %bs1 = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)
300*9880d681SAndroid Build Coastguard Worker  %bs2 = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %bs1)
301*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %bs2
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @identity_v4i32(<4 x i32> %v) {
305*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v4i32:
306*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
307*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
308*9880d681SAndroid Build Coastguard Workerentry:
309*9880d681SAndroid Build Coastguard Worker  %bs1 = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)
310*9880d681SAndroid Build Coastguard Worker  %bs2 = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %bs1)
311*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %bs2
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @identity_v2i64(<2 x i64> %v) {
315*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v2i64:
316*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
317*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
318*9880d681SAndroid Build Coastguard Workerentry:
319*9880d681SAndroid Build Coastguard Worker  %bs1 = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)
320*9880d681SAndroid Build Coastguard Worker  %bs2 = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %bs1)
321*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bs2
322*9880d681SAndroid Build Coastguard Worker}
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @identity_v16i16(<16 x i16> %v) {
325*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v16i16:
326*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
327*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
328*9880d681SAndroid Build Coastguard Workerentry:
329*9880d681SAndroid Build Coastguard Worker  %bs1 = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)
330*9880d681SAndroid Build Coastguard Worker  %bs2 = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %bs1)
331*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %bs2
332*9880d681SAndroid Build Coastguard Worker}
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @identity_v8i32(<8 x i32> %v) {
335*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v8i32:
336*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
337*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
338*9880d681SAndroid Build Coastguard Workerentry:
339*9880d681SAndroid Build Coastguard Worker  %bs1 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)
340*9880d681SAndroid Build Coastguard Worker  %bs2 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %bs1)
341*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %bs2
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @identity_v4i64(<4 x i64> %v) {
345*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v4i64:
346*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
347*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
348*9880d681SAndroid Build Coastguard Workerentry:
349*9880d681SAndroid Build Coastguard Worker  %bs1 = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)
350*9880d681SAndroid Build Coastguard Worker  %bs2 = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %bs1)
351*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %bs2
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @identity_v4i16(<4 x i16> %v) {
355*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-LABEL: identity_v4i16:
356*9880d681SAndroid Build Coastguard Worker; CHECK-ALL:       # BB#0: # %entry
357*9880d681SAndroid Build Coastguard Worker; CHECK-ALL-NEXT:    retq
358*9880d681SAndroid Build Coastguard Workerentry:
359*9880d681SAndroid Build Coastguard Worker  %bs1 = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %v)
360*9880d681SAndroid Build Coastguard Worker  %bs2 = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %bs1)
361*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %bs2
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker;
365*9880d681SAndroid Build Coastguard Worker; Constant Folding
366*9880d681SAndroid Build Coastguard Worker;
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @fold_v8i16() {
369*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-LABEL: fold_v8i16:
370*9880d681SAndroid Build Coastguard Worker; CHECK-SSE:       # BB#0: # %entry
371*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]
372*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    retq
373*9880d681SAndroid Build Coastguard Worker;
374*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: fold_v8i16:
375*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
376*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]
377*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
378*9880d681SAndroid Build Coastguard Worker;
379*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: fold_v8i16:
380*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
381*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]
382*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
383*9880d681SAndroid Build Coastguard Workerentry:
384*9880d681SAndroid Build Coastguard Worker  %r = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> <i16 0, i16 1, i16 -1, i16 2, i16 -3, i16 4, i16 -5, i16 6>)
385*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @fold_v4i32() {
389*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-LABEL: fold_v4i32:
390*9880d681SAndroid Build Coastguard Worker; CHECK-SSE:       # BB#0: # %entry
391*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,4294967295,33554432,4261412863]
392*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    retq
393*9880d681SAndroid Build Coastguard Worker;
394*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: fold_v4i32:
395*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
396*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,33554432,4261412863]
397*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
398*9880d681SAndroid Build Coastguard Worker;
399*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: fold_v4i32:
400*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
401*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,33554432,4261412863]
402*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
403*9880d681SAndroid Build Coastguard Workerentry:
404*9880d681SAndroid Build Coastguard Worker  %r = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> <i32 0, i32 -1, i32 2, i32 -3>)
405*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r
406*9880d681SAndroid Build Coastguard Worker}
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @fold_v2i64() {
409*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-LABEL: fold_v2i64:
410*9880d681SAndroid Build Coastguard Worker; CHECK-SSE:       # BB#0: # %entry
411*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
412*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    retq
413*9880d681SAndroid Build Coastguard Worker;
414*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: fold_v2i64:
415*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
416*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
417*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
418*9880d681SAndroid Build Coastguard Worker;
419*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: fold_v2i64:
420*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
421*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
422*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
423*9880d681SAndroid Build Coastguard Workerentry:
424*9880d681SAndroid Build Coastguard Worker  %r = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> <i64 255, i64 -1>)
425*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %r
426*9880d681SAndroid Build Coastguard Worker}
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @fold_v16i16() {
429*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-LABEL: fold_v16i16:
430*9880d681SAndroid Build Coastguard Worker; CHECK-SSE:       # BB#0: # %entry
431*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]
432*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm1 = [63999,2048,63487,2560,62975,3072,62463,3584]
433*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    retq
434*9880d681SAndroid Build Coastguard Worker;
435*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: fold_v16i16:
436*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
437*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [0,256,65535,512,65023,1024,64511,1536,63999,2048,63487,2560,62975,3072,62463,3584]
438*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
439*9880d681SAndroid Build Coastguard Worker;
440*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: fold_v16i16:
441*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
442*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [0,256,65535,512,65023,1024,64511,1536,63999,2048,63487,2560,62975,3072,62463,3584]
443*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
444*9880d681SAndroid Build Coastguard Workerentry:
445*9880d681SAndroid Build Coastguard Worker  %r = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> <i16 0, i16 1, i16 -1, i16 2, i16 -3, i16 4, i16 -5, i16 6, i16 -7, i16 8, i16 -9, i16 10, i16 -11, i16 12, i16 -13, i16 14>)
446*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
447*9880d681SAndroid Build Coastguard Worker}
448*9880d681SAndroid Build Coastguard Worker
449*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @fold_v8i32() {
450*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-LABEL: fold_v8i32:
451*9880d681SAndroid Build Coastguard Worker; CHECK-SSE:       # BB#0: # %entry
452*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [0,16777216,4294967295,33554432]
453*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm1 = [4261412863,67108864,4227858431,100663296]
454*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    retq
455*9880d681SAndroid Build Coastguard Worker;
456*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: fold_v8i32:
457*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
458*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [0,16777216,4294967295,33554432,4261412863,67108864,4227858431,100663296]
459*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
460*9880d681SAndroid Build Coastguard Worker;
461*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: fold_v8i32:
462*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
463*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [0,16777216,4294967295,33554432,4261412863,67108864,4227858431,100663296]
464*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
465*9880d681SAndroid Build Coastguard Workerentry:
466*9880d681SAndroid Build Coastguard Worker  %r = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> <i32 0, i32 1, i32 -1, i32 2, i32 -3, i32 4, i32 -5, i32 6>)
467*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r
468*9880d681SAndroid Build Coastguard Worker}
469*9880d681SAndroid Build Coastguard Worker
470*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @fold_v4i64() {
471*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-LABEL: fold_v4i64:
472*9880d681SAndroid Build Coastguard Worker; CHECK-SSE:       # BB#0: # %entry
473*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
474*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    movaps {{.*#+}} xmm1 = [18446462598732840960,72056494526300160]
475*9880d681SAndroid Build Coastguard Worker; CHECK-SSE-NEXT:    retq
476*9880d681SAndroid Build Coastguard Worker;
477*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-LABEL: fold_v4i64:
478*9880d681SAndroid Build Coastguard Worker; CHECK-AVX:       # BB#0: # %entry
479*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18374686479671623680,18446744073709551615,18446462598732840960,72056494526300160]
480*9880d681SAndroid Build Coastguard Worker; CHECK-AVX-NEXT:    retq
481*9880d681SAndroid Build Coastguard Worker;
482*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-LABEL: fold_v4i64:
483*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX:       # BB#0: # %entry
484*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18374686479671623680,18446744073709551615,18446462598732840960,72056494526300160]
485*9880d681SAndroid Build Coastguard Worker; CHECK-WIDE-AVX-NEXT:    retq
486*9880d681SAndroid Build Coastguard Workerentry:
487*9880d681SAndroid Build Coastguard Worker  %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> <i64 255, i64 -1, i64 65535, i64 16776960>)
488*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %r
489*9880d681SAndroid Build Coastguard Worker}
490