1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-ssse3 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE2 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+sse3,+ssse3 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSSE3 3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE41 4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX 5*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=core-avx2 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX2 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; Verify the cost model for alternate shuffles. 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; shufflevector instructions with illegal 64-bit vector types. 11*9880d681SAndroid Build Coastguard Worker; 64-bit packed integer vectors (v2i32) are promoted to type v2i64. 12*9880d681SAndroid Build Coastguard Worker; 64-bit packed float vectors (v2f32) are widened to type v4f32. 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_v2i32(<2 x i32> %a, <2 x i32> %b) { 15*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 0, i32 3> 16*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %1 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i32': 19*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 20*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 21*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 22*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 23*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_v2f32(<2 x float> %a, <2 x float> %b) { 26*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 0, i32 3> 27*9880d681SAndroid Build Coastguard Worker ret <2 x float> %1 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f32': 30*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 31*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 32*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 33*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 34*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_v2i32_2(<2 x i32> %a, <2 x i32> %b) { 37*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i32> %a, <2 x i32> %b, <2 x i32> <i32 2, i32 1> 38*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %1 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i32_2': 41*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 42*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 43*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 44*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 45*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_v2f32_2(<2 x float> %a, <2 x float> %b) { 48*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x float> %a, <2 x float> %b, <2 x i32> <i32 2, i32 1> 49*9880d681SAndroid Build Coastguard Worker ret <2 x float> %1 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f32_2': 52*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 53*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 54*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 55*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 56*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of two elements. 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) { 62*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 0, i32 3> 63*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i64': 66*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 67*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 68*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 69*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 70*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) { 73*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 3> 74*9880d681SAndroid Build Coastguard Worker ret <2 x double> %1 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f64': 77*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 78*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 79*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 80*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 81*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64_2(<2 x i64> %a, <2 x i64> %b) { 85*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 2, i32 1> 86*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2i64_2': 89*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 90*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 91*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 92*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 93*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_v2f64_2(<2 x double> %a, <2 x double> %b) { 97*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 2, i32 1> 98*9880d681SAndroid Build Coastguard Worker ret <2 x double> %1 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v2f64_2': 101*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 102*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 103*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 104*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 105*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of four elements. 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) { 110*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7> 111*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %1 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i32': 114*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 115*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 116*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 117*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 118*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_v4i32_2(<4 x i32> %a, <4 x i32> %b) { 122*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 123*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %1 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i32_2': 126*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 127*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 128*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 129*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 130*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) { 134*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7> 135*9880d681SAndroid Build Coastguard Worker ret <4 x float> %1 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f32': 138*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 139*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 140*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 141*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 142*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_v4f32_2(<4 x float> %a, <4 x float> %b) { 146*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 147*9880d681SAndroid Build Coastguard Worker ret <4 x float> %1 148*9880d681SAndroid Build Coastguard Worker} 149*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f32_2': 150*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 151*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 152*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 153*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 154*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_v4i64(<4 x i64> %a, <4 x i64> %b) { 157*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7> 158*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %1 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i64': 161*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 162*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 163*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 164*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 165*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_v4i64_2(<4 x i64> %a, <4 x i64> %b) { 169*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 170*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %1 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4i64_2': 173*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 174*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 175*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 176*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 177*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { 181*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7> 182*9880d681SAndroid Build Coastguard Worker ret <4 x double> %1 183*9880d681SAndroid Build Coastguard Worker} 184*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f64': 185*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 186*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 187*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 188*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 189*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_v4f64_2(<4 x double> %a, <4 x double> %b) { 193*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 194*9880d681SAndroid Build Coastguard Worker ret <4 x double> %1 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v4f64_2': 197*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 198*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 199*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 200*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 201*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of eight elements. 205*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) { 206*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15> 207*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %1 208*9880d681SAndroid Build Coastguard Worker} 209*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i16': 210*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 8 for instruction: %1 = shufflevector 211*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 212*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 213*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 214*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_v8i16_2(<8 x i16> %a, <8 x i16> %b) { 218*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7> 219*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %1 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i16_2': 222*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 8 for instruction: %1 = shufflevector 223*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 224*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 225*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 226*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_v8i32(<8 x i32> %a, <8 x i32> %b) { 230*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15> 231*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %1 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i32': 234*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 235*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 236*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 237*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 238*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_v8i32_2(<8 x i32> %a, <8 x i32> %b) { 242*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7> 243*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %1 244*9880d681SAndroid Build Coastguard Worker} 245*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8i32_2': 246*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 247*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 248*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 249*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 250*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_v8f32(<8 x float> %a, <8 x float> %b) { 254*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15> 255*9880d681SAndroid Build Coastguard Worker ret <8 x float> %1 256*9880d681SAndroid Build Coastguard Worker} 257*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8f32': 258*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 259*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 260*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 261*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 262*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_v8f32_2(<8 x float> %a, <8 x float> %b) { 266*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7> 267*9880d681SAndroid Build Coastguard Worker ret <8 x float> %1 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v8f32_2': 270*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 271*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 4 for instruction: %1 = shufflevector 272*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 273*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 274*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker; Test shuffles on packed vectors of sixteen elements. 278*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_v16i8(<16 x i8> %a, <16 x i8> %b) { 279*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31> 280*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %1 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i8': 283*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 48 for instruction: %1 = shufflevector 284*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 285*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 286*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 287*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_v16i8_2(<16 x i8> %a, <16 x i8> %b) { 291*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15> 292*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %1 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i8_2': 295*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 48 for instruction: %1 = shufflevector 296*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 297*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 298*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 299*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 3 for instruction: %1 = shufflevector 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_v16i16(<16 x i16> %a, <16 x i16> %b) { 303*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31> 304*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %1 305*9880d681SAndroid Build Coastguard Worker} 306*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i16': 307*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 16 for instruction: %1 = shufflevector 308*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction: %1 = shufflevector 309*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 310*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 5 for instruction: %1 = shufflevector 311*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_v16i16_2(<16 x i16> %a, <16 x i16> %b) { 315*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15> 316*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %1 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v16i16_2': 319*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 16 for instruction: %1 = shufflevector 320*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction: %1 = shufflevector 321*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 2 for instruction: %1 = shufflevector 322*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 5 for instruction: %1 = shufflevector 323*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 1 for instruction: %1 = shufflevector 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_v32i8(<32 x i8> %a, <32 x i8> %b) { 326*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 33, i32 2, i32 35, i32 4, i32 37, i32 6, i32 39, i32 8, i32 41, i32 10, i32 43, i32 12, i32 45, i32 14, i32 47, i32 16, i32 49, i32 18, i32 51, i32 20, i32 53, i32 22, i32 55, i32 24, i32 57, i32 26, i32 59, i32 28, i32 61, i32 30, i32 63> 327*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %1 328*9880d681SAndroid Build Coastguard Worker} 329*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v32i8': 330*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 96 for instruction: %1 = shufflevector 331*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction: %1 = shufflevector 332*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 6 for instruction: %1 = shufflevector 333*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 9 for instruction: %1 = shufflevector 334*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 9 for instruction: %1 = shufflevector 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_v32i8_2(<32 x i8> %a, <32 x i8> %b) { 338*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 32, i32 1, i32 34, i32 3, i32 36, i32 5, i32 38, i32 7, i32 40, i32 9, i32 42, i32 11, i32 44, i32 13, i32 46, i32 15, i32 48, i32 17, i32 50, i32 19, i32 52, i32 21, i32 54, i32 23, i32 56, i32 25, i32 58, i32 27, i32 60, i32 29, i32 62, i32 31> 339*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %1 340*9880d681SAndroid Build Coastguard Worker} 341*9880d681SAndroid Build Coastguard Worker; CHECK: Printing analysis 'Cost Model Analysis' for function 'test_v32i8_2': 342*9880d681SAndroid Build Coastguard Worker; SSE2: Cost Model: {{.*}} 96 for instruction: %1 = shufflevector 343*9880d681SAndroid Build Coastguard Worker; SSSE3: Cost Model: {{.*}} 6 for instruction: %1 = shufflevector 344*9880d681SAndroid Build Coastguard Worker; SSE41: Cost Model: {{.*}} 6 for instruction: %1 = shufflevector 345*9880d681SAndroid Build Coastguard Worker; AVX: Cost Model: {{.*}} 9 for instruction: %1 = shufflevector 346*9880d681SAndroid Build Coastguard Worker; AVX2: Cost Model: {{.*}} 9 for instruction: %1 = shufflevector 347*9880d681SAndroid Build Coastguard Worker 348