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