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 -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Test that we correctly fold a shuffle that performs a swizzle of another 5*9880d681SAndroid Build Coastguard Worker; shuffle node according to the rule 6*9880d681SAndroid Build Coastguard Worker; shuffle (shuffle (x, undef, M0), undef, M1) -> shuffle(x, undef, M2) 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; We only do this if the resulting mask is legal to avoid introducing an 9*9880d681SAndroid Build Coastguard Worker; illegal shuffle that is expanded into a sub-optimal sequence of instructions 10*9880d681SAndroid Build Coastguard Worker; during lowering stage. 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_1(<4 x i32> %v) { 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_1: 14*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 17*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1> 18*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1> 19*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_2(<4 x i32> %v) { 23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_2: 24*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,1,3,0] 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 27*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2> 28*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2> 29*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_3(<4 x i32> %v) { 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_3: 34*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 37*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0> 38*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0> 39*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_4(<4 x i32> %v) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_4: 44*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,0,2] 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 47*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0> 48*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0> 49*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_5(<4 x i32> %v) { 53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_5: 54*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 57*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> 58*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> 59*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_6(<4 x i32> %v) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_6: 64*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,0,1,3] 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3> 68*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3> 69*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_7(<4 x i32> %v) { 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_7: 74*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,3,1] 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 77*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2> 78*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2> 79*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_8(<4 x i32> %v) { 83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_8: 84*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,3,2,0] 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 87*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1> 88*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1> 89*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_9(<4 x i32> %v) { 93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_9: 94*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 97*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2> 98*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2> 99*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_10(<4 x i32> %v) { 103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_10: 104*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,2,0,3] 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 107*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3> 108*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3> 109*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_11(<4 x i32> %v) { 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_11: 114*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0] 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 117*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1> 118*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1> 119*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_12(<4 x i32> %v) { 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_12: 124*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,1,2] 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 127*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1> 128*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1> 129*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_13(<4 x i32> %v) { 133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_13: 134*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,2,1,0] 136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 137*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2> 138*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2> 139*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @swizzle_14(<4 x i32> %v) { 143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_14: 144*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,0,2,1] 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 147*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %v, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0> 148*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0> 149*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_15(<4 x float> %v) { 153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_15: 154*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,0,3,2] 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1> 158*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 0, i32 1> 159*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_16(<4 x float> %v) { 163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_16: 164*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,1,3,0] 166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 167*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2> 168*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 0, i32 2> 169*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 170*9880d681SAndroid Build Coastguard Worker} 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_17(<4 x float> %v) { 173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_17: 174*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,0,3,2] 176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 177*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0> 178*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 1, i32 0> 179*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_18(<4 x float> %v) { 183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_18: 184*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,1,0,2] 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 187*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0> 188*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 3, i32 0> 189*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 190*9880d681SAndroid Build Coastguard Worker} 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_19(<4 x float> %v) { 193*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_19: 194*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufpd {{.*#+}} xmm0 = xmm0[1,0] 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 197*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> 198*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> 199*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_20(<4 x float> %v) { 203*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_20: 204*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0,1,3] 206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 207*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3> 208*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 0, i32 3> 209*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 210*9880d681SAndroid Build Coastguard Worker} 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_21(<4 x float> %v) { 213*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_21: 214*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2,3,1] 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 217*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2> 218*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 3, i32 1, i32 2> 219*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_22(<4 x float> %v) { 223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_22: 224*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3,2,0] 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 227*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1> 228*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1> 229*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_23(<4 x float> %v) { 233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_23: 234*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufpd {{.*#+}} xmm0 = xmm0[1,0] 236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 237*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2> 238*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 2> 239*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_24(<4 x float> %v) { 243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_24: 244*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,2,0,3] 246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 247*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3> 248*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 1, i32 3> 249*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 250*9880d681SAndroid Build Coastguard Worker} 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_25(<4 x float> %v) { 253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_25: 254*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,2,1,0] 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 257*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1> 258*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 2, i32 0, i32 3, i32 1> 259*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 260*9880d681SAndroid Build Coastguard Worker} 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_26(<4 x float> %v) { 263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_26: 264*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3,1,2] 266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 267*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1> 268*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 0, i32 2, i32 3, i32 1> 269*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 270*9880d681SAndroid Build Coastguard Worker} 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_27(<4 x float> %v) { 273*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_27: 274*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,2,1,0] 276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 277*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2> 278*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 0, i32 2> 279*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 280*9880d681SAndroid Build Coastguard Worker} 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_28(<4 x float> %v) { 283*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_28: 284*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0,2,1] 286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 287*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0> 288*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 0> 289*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @swizzle_29(<4 x float> %v) { 293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_29: 294*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,3,2,0] 296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 297*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> <i32 3, i32 1, i32 2, i32 0> 298*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 3> 299*9880d681SAndroid Build Coastguard Worker ret <4 x float> %2 300*9880d681SAndroid Build Coastguard Worker} 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker; Make sure that we combine the shuffles from each function below into a single 303*9880d681SAndroid Build Coastguard Worker; legal shuffle (either pshuflw or pshufb depending on the masks). 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_30(<8 x i16> %v) { 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_30: 307*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7] 309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 310*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 7, i32 5, i32 6, i32 4> 311*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 7, i32 5, i32 6, i32 4> 312*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 313*9880d681SAndroid Build Coastguard Worker} 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_31(<8 x i16> %v) { 316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_31: 317*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,2,0,4,5,6,7] 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 320*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 3, i32 0, i32 2, i32 1, i32 7, i32 5, i32 6, i32 4> 321*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 3, i32 0, i32 2, i32 1, i32 7, i32 5, i32 6, i32 4> 322*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_32(<8 x i16> %v) { 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_32: 327*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,2,3] 329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 330*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 7, i32 5, i32 6, i32 4> 331*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 2, i32 3, i32 0, i32 7, i32 5, i32 6, i32 4> 332*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 333*9880d681SAndroid Build Coastguard Worker} 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_33(<8 x i16> %v) { 336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_33: 337*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,3,0,4,5,6,7] 339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,7,6,4] 340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 341*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 5, i32 7, i32 2, i32 3, i32 1, i32 0> 342*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 5, i32 7, i32 2, i32 3, i32 1, i32 0> 343*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 344*9880d681SAndroid Build Coastguard Worker} 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_34(<8 x i16> %v) { 347*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_34: 348*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 349*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,3,0,2,4,5,6,7] 350*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5] 351*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 352*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 7, i32 6, i32 5, i32 1, i32 2, i32 0, i32 3> 353*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 7, i32 6, i32 5, i32 1, i32 2, i32 0, i32 3> 354*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 355*9880d681SAndroid Build Coastguard Worker} 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_35(<8 x i16> %v) { 358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_35: 359*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7] 361*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,7,6] 362*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 363*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 7, i32 4, i32 6, i32 5, i32 1, i32 3, i32 0, i32 2> 364*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 7, i32 4, i32 6, i32 5, i32 1, i32 3, i32 0, i32 2> 365*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 366*9880d681SAndroid Build Coastguard Worker} 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_36(<8 x i16> %v) { 369*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_36: 370*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 371*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,3,2,1,4,5,6,7] 372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7] 373*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 374*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 7, i32 5, i32 0, i32 1, i32 3, i32 2> 375*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 6, i32 7, i32 5, i32 0, i32 1, i32 3, i32 2> 376*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_37(<8 x i16> %v) { 380*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_37: 381*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 382*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,7,6,5] 383*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 384*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 7, i32 5, i32 6, i32 4> 385*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 7, i32 4, i32 6, i32 5> 386*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 387*9880d681SAndroid Build Coastguard Worker} 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_38(<8 x i16> %v) { 390*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_38: 391*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 392*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,1,0,3,4,5,6,7] 393*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,6,7] 394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 395*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 5, i32 6, i32 4, i32 7, i32 0, i32 2, i32 1, i32 3> 396*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 5, i32 6, i32 4, i32 7, i32 0, i32 2, i32 1, i32 3> 397*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_39(<8 x i16> %v) { 401*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_39: 402*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 403*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[2,3,1,0,4,5,6,7] 404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,4,5] 405*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 406*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 5, i32 4, i32 6, i32 7, i32 3, i32 2, i32 1, i32 0> 407*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 5, i32 4, i32 6, i32 7, i32 3, i32 2, i32 1, i32 0> 408*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 409*9880d681SAndroid Build Coastguard Worker} 410*9880d681SAndroid Build Coastguard Worker 411*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_40(<8 x i16> %v) { 412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_40: 413*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,1,2,0,4,5,6,7] 415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,5,7] 416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 417*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 6, i32 4, i32 7, i32 5, i32 1, i32 0, i32 3, i32 2> 418*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 6, i32 4, i32 7, i32 5, i32 1, i32 0, i32 3, i32 2> 419*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 420*9880d681SAndroid Build Coastguard Worker} 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_41(<8 x i16> %v) { 423*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_41: 424*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7] 426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,3,2] 427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 428*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 6, i32 7, i32 5, i32 4, i32 0, i32 1, i32 3, i32 2> 429*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 6, i32 7, i32 5, i32 4, i32 0, i32 1, i32 3, i32 2> 430*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 431*9880d681SAndroid Build Coastguard Worker} 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @swizzle_42(<8 x i16> %v) { 434*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: swizzle_42: 435*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] 437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 438*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %v, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 7, i32 6, i32 4, i32 5> 439*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 3, i32 2, i32 7, i32 6, i32 4, i32 5> 440*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 441*9880d681SAndroid Build Coastguard Worker} 442