brintos

brintos / llvm-project-archived public Read only

0
0
Text · 41.6 KiB · d9a7586 Raw
667 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SLM4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX15; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX26; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX5127; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX5128 9define <8 x i32> @add_sub_v8i32(<8 x i32> %a, <8 x i32> %b) {10; SSE-LABEL: @add_sub_v8i32(11; SSE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[TMP2:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>12; SSE-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>13; SSE-NEXT:    [[TMP8:%.*]] = add <4 x i32> [[TMP1]], [[TMP4]]14; SSE-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>15; SSE-NEXT:    [[TMP9:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>16; SSE-NEXT:    [[TMP6:%.*]] = sub <4 x i32> [[TMP3]], [[TMP9]]17; SSE-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>18; SSE-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>19; SSE-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP7]], <8 x i32> [[TMP10]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>20; SSE-NEXT:    ret <8 x i32> [[TMP5]]21;22; SLM-LABEL: @add_sub_v8i32(23; SLM-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[TMP2:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>24; SLM-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>25; SLM-NEXT:    [[TMP8:%.*]] = add <4 x i32> [[TMP1]], [[TMP4]]26; SLM-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>27; SLM-NEXT:    [[TMP9:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>28; SLM-NEXT:    [[TMP6:%.*]] = sub <4 x i32> [[TMP3]], [[TMP9]]29; SLM-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>30; SLM-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>31; SLM-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP7]], <8 x i32> [[TMP10]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>32; SLM-NEXT:    ret <8 x i32> [[TMP5]]33;34; AVX1-LABEL: @add_sub_v8i32(35; AVX1-NEXT:    [[TMP1:%.*]] = add <8 x i32> [[A:%.*]], [[B:%.*]]36; AVX1-NEXT:    [[TMP2:%.*]] = sub <8 x i32> [[A]], [[B]]37; AVX1-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>38; AVX1-NEXT:    ret <8 x i32> [[TMP3]]39;40; AVX2-LABEL: @add_sub_v8i32(41; AVX2-NEXT:    [[TMP1:%.*]] = add <8 x i32> [[A:%.*]], [[B:%.*]]42; AVX2-NEXT:    [[TMP2:%.*]] = sub <8 x i32> [[A]], [[B]]43; AVX2-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>44; AVX2-NEXT:    ret <8 x i32> [[TMP3]]45;46; AVX512-LABEL: @add_sub_v8i32(47; AVX512-NEXT:    [[TMP1:%.*]] = add <8 x i32> [[A:%.*]], [[B:%.*]]48; AVX512-NEXT:    [[TMP2:%.*]] = sub <8 x i32> [[A]], [[B]]49; AVX512-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>50; AVX512-NEXT:    ret <8 x i32> [[TMP3]]51;52  %a0 = extractelement <8 x i32> %a, i32 053  %a1 = extractelement <8 x i32> %a, i32 154  %a2 = extractelement <8 x i32> %a, i32 255  %a3 = extractelement <8 x i32> %a, i32 356  %a4 = extractelement <8 x i32> %a, i32 457  %a5 = extractelement <8 x i32> %a, i32 558  %a6 = extractelement <8 x i32> %a, i32 659  %a7 = extractelement <8 x i32> %a, i32 760  %b0 = extractelement <8 x i32> %b, i32 061  %b1 = extractelement <8 x i32> %b, i32 162  %b2 = extractelement <8 x i32> %b, i32 263  %b3 = extractelement <8 x i32> %b, i32 364  %b4 = extractelement <8 x i32> %b, i32 465  %b5 = extractelement <8 x i32> %b, i32 566  %b6 = extractelement <8 x i32> %b, i32 667  %b7 = extractelement <8 x i32> %b, i32 768  %ab0 = add i32 %a0, %b069  %ab1 = add i32 %a1, %b170  %ab2 = add i32 %a2, %b271  %ab3 = add i32 %a3, %b372  %ab4 = sub i32 %a4, %b473  %ab5 = sub i32 %a5, %b574  %ab6 = sub i32 %a6, %b675  %ab7 = sub i32 %a7, %b776  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 077  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 178  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 279  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 380  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 481  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 582  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 683  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 784  ret <8 x i32> %r785}86 87define <4 x i32> @add_and_v4i32(<4 x i32> %a, <4 x i32> %b) {88; CHECK-LABEL: @add_and_v4i32(89; CHECK-NEXT:    [[TMP1:%.*]] = add <4 x i32> [[A:%.*]], [[B:%.*]]90; CHECK-NEXT:    [[TMP2:%.*]] = and <4 x i32> [[A]], [[B]]91; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>92; CHECK-NEXT:    ret <4 x i32> [[TMP3]]93;94  %a0 = extractelement <4 x i32> %a, i32 095  %a1 = extractelement <4 x i32> %a, i32 196  %a2 = extractelement <4 x i32> %a, i32 297  %a3 = extractelement <4 x i32> %a, i32 398  %b0 = extractelement <4 x i32> %b, i32 099  %b1 = extractelement <4 x i32> %b, i32 1100  %b2 = extractelement <4 x i32> %b, i32 2101  %b3 = extractelement <4 x i32> %b, i32 3102  %ab0 = add i32 %a0, %b0103  %ab1 = add i32 %a1, %b1104  %ab2 = and i32 %a2, %b2105  %ab3 = and i32 %a3, %b3106  %r0 = insertelement <4 x i32> undef, i32 %ab0, i32 0107  %r1 = insertelement <4 x i32>   %r0, i32 %ab1, i32 1108  %r2 = insertelement <4 x i32>   %r1, i32 %ab2, i32 2109  %r3 = insertelement <4 x i32>   %r2, i32 %ab3, i32 3110  ret <4 x i32> %r3111}112 113define <4 x i32> @add_mul_v4i32(<4 x i32> %a, <4 x i32> %b) {114; CHECK-LABEL: @add_mul_v4i32(115; CHECK-NEXT:    [[TMP1:%.*]] = mul <4 x i32> [[A:%.*]], [[B:%.*]]116; CHECK-NEXT:    [[TMP2:%.*]] = add <4 x i32> [[A]], [[B]]117; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> <i32 0, i32 5, i32 6, i32 3>118; CHECK-NEXT:    ret <4 x i32> [[TMP3]]119;120  %a0 = extractelement <4 x i32> %a, i32 0121  %a1 = extractelement <4 x i32> %a, i32 1122  %a2 = extractelement <4 x i32> %a, i32 2123  %a3 = extractelement <4 x i32> %a, i32 3124  %b0 = extractelement <4 x i32> %b, i32 0125  %b1 = extractelement <4 x i32> %b, i32 1126  %b2 = extractelement <4 x i32> %b, i32 2127  %b3 = extractelement <4 x i32> %b, i32 3128  %ab0 = mul i32 %a0, %b0129  %ab1 = add i32 %a1, %b1130  %ab2 = add i32 %a2, %b2131  %ab3 = mul i32 %a3, %b3132  %r0 = insertelement <4 x i32> undef, i32 %ab0, i32 0133  %r1 = insertelement <4 x i32>   %r0, i32 %ab1, i32 1134  %r2 = insertelement <4 x i32>   %r1, i32 %ab2, i32 2135  %r3 = insertelement <4 x i32>   %r2, i32 %ab3, i32 3136  ret <4 x i32> %r3137}138 139define <8 x i32> @ashr_shl_v8i32(<8 x i32> %a, <8 x i32> %b) {140; SSE-LABEL: @ashr_shl_v8i32(141; SSE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[TMP2:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>142; SSE-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>143; SSE-NEXT:    [[TMP8:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP4]]144; SSE-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>145; SSE-NEXT:    [[TMP9:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>146; SSE-NEXT:    [[TMP6:%.*]] = shl <4 x i32> [[TMP3]], [[TMP9]]147; SSE-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>148; SSE-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>149; SSE-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP7]], <8 x i32> [[TMP10]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>150; SSE-NEXT:    ret <8 x i32> [[TMP5]]151;152; SLM-LABEL: @ashr_shl_v8i32(153; SLM-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[TMP2:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>154; SLM-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>155; SLM-NEXT:    [[TMP8:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP4]]156; SLM-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>157; SLM-NEXT:    [[TMP9:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>158; SLM-NEXT:    [[TMP6:%.*]] = shl <4 x i32> [[TMP3]], [[TMP9]]159; SLM-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>160; SLM-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>161; SLM-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP7]], <8 x i32> [[TMP10]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>162; SLM-NEXT:    ret <8 x i32> [[TMP5]]163;164; AVX1-LABEL: @ashr_shl_v8i32(165; AVX1-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[A:%.*]], [[B:%.*]]166; AVX1-NEXT:    [[TMP2:%.*]] = shl <8 x i32> [[A]], [[B]]167; AVX1-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>168; AVX1-NEXT:    ret <8 x i32> [[TMP3]]169;170; AVX2-LABEL: @ashr_shl_v8i32(171; AVX2-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[A:%.*]], [[B:%.*]]172; AVX2-NEXT:    [[TMP2:%.*]] = shl <8 x i32> [[A]], [[B]]173; AVX2-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>174; AVX2-NEXT:    ret <8 x i32> [[TMP3]]175;176; AVX512-LABEL: @ashr_shl_v8i32(177; AVX512-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[A:%.*]], [[B:%.*]]178; AVX512-NEXT:    [[TMP2:%.*]] = shl <8 x i32> [[A]], [[B]]179; AVX512-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>180; AVX512-NEXT:    ret <8 x i32> [[TMP3]]181;182  %a0 = extractelement <8 x i32> %a, i32 0183  %a1 = extractelement <8 x i32> %a, i32 1184  %a2 = extractelement <8 x i32> %a, i32 2185  %a3 = extractelement <8 x i32> %a, i32 3186  %a4 = extractelement <8 x i32> %a, i32 4187  %a5 = extractelement <8 x i32> %a, i32 5188  %a6 = extractelement <8 x i32> %a, i32 6189  %a7 = extractelement <8 x i32> %a, i32 7190  %b0 = extractelement <8 x i32> %b, i32 0191  %b1 = extractelement <8 x i32> %b, i32 1192  %b2 = extractelement <8 x i32> %b, i32 2193  %b3 = extractelement <8 x i32> %b, i32 3194  %b4 = extractelement <8 x i32> %b, i32 4195  %b5 = extractelement <8 x i32> %b, i32 5196  %b6 = extractelement <8 x i32> %b, i32 6197  %b7 = extractelement <8 x i32> %b, i32 7198  %ab0 = ashr i32 %a0, %b0199  %ab1 = ashr i32 %a1, %b1200  %ab2 = ashr i32 %a2, %b2201  %ab3 = ashr i32 %a3, %b3202  %ab4 = shl  i32 %a4, %b4203  %ab5 = shl  i32 %a5, %b5204  %ab6 = shl  i32 %a6, %b6205  %ab7 = shl  i32 %a7, %b7206  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 0207  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 1208  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 2209  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 3210  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 4211  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 5212  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 6213  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 7214  ret <8 x i32> %r7215}216 217define <8 x i32> @ashr_shl_v8i32_const(<8 x i32> %a) {218; SSE-LABEL: @ashr_shl_v8i32_const(219; SSE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>220; SSE-NEXT:    [[TMP2:%.*]] = ashr <4 x i32> [[TMP1]], splat (i32 2)221; SSE-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>222; SSE-NEXT:    [[TMP4:%.*]] = shl <4 x i32> [[TMP3]], splat (i32 3)223; SSE-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>224; SSE-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>225; SSE-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP6]], <8 x i32> [[TMP7]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>226; SSE-NEXT:    ret <8 x i32> [[TMP5]]227;228; SLM-LABEL: @ashr_shl_v8i32_const(229; SLM-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>230; SLM-NEXT:    [[TMP2:%.*]] = ashr <4 x i32> [[TMP1]], splat (i32 2)231; SLM-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>232; SLM-NEXT:    [[TMP4:%.*]] = shl <4 x i32> [[TMP3]], splat (i32 3)233; SLM-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>234; SLM-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>235; SLM-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP6]], <8 x i32> [[TMP7]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>236; SLM-NEXT:    ret <8 x i32> [[TMP5]]237;238; AVX1-LABEL: @ashr_shl_v8i32_const(239; AVX1-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[A:%.*]], <i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>240; AVX1-NEXT:    [[TMP2:%.*]] = shl <8 x i32> [[A]], <i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>241; AVX1-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>242; AVX1-NEXT:    ret <8 x i32> [[TMP3]]243;244; AVX2-LABEL: @ashr_shl_v8i32_const(245; AVX2-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[A:%.*]], <i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>246; AVX2-NEXT:    [[TMP2:%.*]] = shl <8 x i32> [[A]], <i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>247; AVX2-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>248; AVX2-NEXT:    ret <8 x i32> [[TMP3]]249;250; AVX512-LABEL: @ashr_shl_v8i32_const(251; AVX512-NEXT:    [[TMP1:%.*]] = ashr <8 x i32> [[A:%.*]], <i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>252; AVX512-NEXT:    [[TMP2:%.*]] = shl <8 x i32> [[A]], <i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3>253; AVX512-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>254; AVX512-NEXT:    ret <8 x i32> [[TMP3]]255;256  %a0 = extractelement <8 x i32> %a, i32 0257  %a1 = extractelement <8 x i32> %a, i32 1258  %a2 = extractelement <8 x i32> %a, i32 2259  %a3 = extractelement <8 x i32> %a, i32 3260  %a4 = extractelement <8 x i32> %a, i32 4261  %a5 = extractelement <8 x i32> %a, i32 5262  %a6 = extractelement <8 x i32> %a, i32 6263  %a7 = extractelement <8 x i32> %a, i32 7264  %ab0 = ashr i32 %a0, 2265  %ab1 = ashr i32 %a1, 2266  %ab2 = ashr i32 %a2, 2267  %ab3 = ashr i32 %a3, 2268  %ab4 = shl  i32 %a4, 3269  %ab5 = shl  i32 %a5, 3270  %ab6 = shl  i32 %a6, 3271  %ab7 = shl  i32 %a7, 3272  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 0273  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 1274  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 2275  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 3276  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 4277  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 5278  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 6279  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 7280  ret <8 x i32> %r7281}282 283define <8 x i32> @ashr_lshr_shl_v8i32(<8 x i32> %a, <8 x i32> %b) {284; SSE-LABEL: @ashr_lshr_shl_v8i32(285; SSE-NEXT:    [[A6:%.*]] = extractelement <8 x i32> [[A:%.*]], i32 6286; SSE-NEXT:    [[A7:%.*]] = extractelement <8 x i32> [[A]], i32 7287; SSE-NEXT:    [[B6:%.*]] = extractelement <8 x i32> [[B:%.*]], i32 6288; SSE-NEXT:    [[B7:%.*]] = extractelement <8 x i32> [[B]], i32 7289; SSE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>290; SSE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>291; SSE-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP2]]292; SSE-NEXT:    [[TMP4:%.*]] = lshr <4 x i32> [[TMP1]], [[TMP2]]293; SSE-NEXT:    [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>294; SSE-NEXT:    [[TMP6:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <2 x i32> <i32 4, i32 5>295; SSE-NEXT:    [[TMP10:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <2 x i32> <i32 4, i32 5>296; SSE-NEXT:    [[TMP7:%.*]] = lshr <2 x i32> [[TMP6]], [[TMP10]]297; SSE-NEXT:    [[AB6:%.*]] = shl i32 [[A6]], [[B6]]298; SSE-NEXT:    [[AB7:%.*]] = shl i32 [[A7]], [[B7]]299; SSE-NEXT:    [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>300; SSE-NEXT:    [[TMP9:%.*]] = shufflevector <2 x i32> [[TMP7]], <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>301; SSE-NEXT:    [[R51:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> [[TMP9]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>302; SSE-NEXT:    [[R6:%.*]] = insertelement <8 x i32> [[R51]], i32 [[AB6]], i32 6303; SSE-NEXT:    [[R7:%.*]] = insertelement <8 x i32> [[R6]], i32 [[AB7]], i32 7304; SSE-NEXT:    ret <8 x i32> [[R7]]305;306; SLM-LABEL: @ashr_lshr_shl_v8i32(307; SLM-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>308; SLM-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>309; SLM-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP2]]310; SLM-NEXT:    [[TMP4:%.*]] = lshr <4 x i32> [[TMP1]], [[TMP2]]311; SLM-NEXT:    [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>312; SLM-NEXT:    [[TMP6:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>313; SLM-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>314; SLM-NEXT:    [[TMP8:%.*]] = lshr <4 x i32> [[TMP6]], [[TMP7]]315; SLM-NEXT:    [[TMP9:%.*]] = shl <4 x i32> [[TMP6]], [[TMP7]]316; SLM-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> [[TMP9]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>317; SLM-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>318; SLM-NEXT:    [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>319; SLM-NEXT:    [[R71:%.*]] = shufflevector <8 x i32> [[TMP11]], <8 x i32> [[TMP12]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>320; SLM-NEXT:    ret <8 x i32> [[R71]]321;322; AVX1-LABEL: @ashr_lshr_shl_v8i32(323; AVX1-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>324; AVX1-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>325; AVX1-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP2]]326; AVX1-NEXT:    [[TMP4:%.*]] = lshr <4 x i32> [[TMP1]], [[TMP2]]327; AVX1-NEXT:    [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>328; AVX1-NEXT:    [[TMP6:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>329; AVX1-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>330; AVX1-NEXT:    [[TMP8:%.*]] = lshr <4 x i32> [[TMP6]], [[TMP7]]331; AVX1-NEXT:    [[TMP9:%.*]] = shl <4 x i32> [[TMP6]], [[TMP7]]332; AVX1-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> [[TMP9]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>333; AVX1-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>334; AVX1-NEXT:    [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>335; AVX1-NEXT:    [[R71:%.*]] = shufflevector <8 x i32> [[TMP11]], <8 x i32> [[TMP12]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>336; AVX1-NEXT:    ret <8 x i32> [[R71]]337;338; AVX2-LABEL: @ashr_lshr_shl_v8i32(339; AVX2-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>340; AVX2-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>341; AVX2-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP2]]342; AVX2-NEXT:    [[TMP4:%.*]] = lshr <4 x i32> [[TMP1]], [[TMP2]]343; AVX2-NEXT:    [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>344; AVX2-NEXT:    [[TMP6:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>345; AVX2-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>346; AVX2-NEXT:    [[TMP8:%.*]] = lshr <4 x i32> [[TMP6]], [[TMP7]]347; AVX2-NEXT:    [[TMP9:%.*]] = shl <4 x i32> [[TMP6]], [[TMP7]]348; AVX2-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> [[TMP9]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>349; AVX2-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>350; AVX2-NEXT:    [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>351; AVX2-NEXT:    [[R71:%.*]] = shufflevector <8 x i32> [[TMP11]], <8 x i32> [[TMP12]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>352; AVX2-NEXT:    ret <8 x i32> [[R71]]353;354; AVX512-LABEL: @ashr_lshr_shl_v8i32(355; AVX512-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>356; AVX512-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[B:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>357; AVX512-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[TMP1]], [[TMP2]]358; AVX512-NEXT:    [[TMP4:%.*]] = lshr <4 x i32> [[TMP1]], [[TMP2]]359; AVX512-NEXT:    [[TMP5:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>360; AVX512-NEXT:    [[TMP6:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>361; AVX512-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i32> [[B]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>362; AVX512-NEXT:    [[TMP8:%.*]] = lshr <4 x i32> [[TMP6]], [[TMP7]]363; AVX512-NEXT:    [[TMP9:%.*]] = shl <4 x i32> [[TMP6]], [[TMP7]]364; AVX512-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i32> [[TMP8]], <4 x i32> [[TMP9]], <4 x i32> <i32 0, i32 1, i32 6, i32 7>365; AVX512-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>366; AVX512-NEXT:    [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>367; AVX512-NEXT:    [[R71:%.*]] = shufflevector <8 x i32> [[TMP11]], <8 x i32> [[TMP12]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>368; AVX512-NEXT:    ret <8 x i32> [[R71]]369;370  %a0 = extractelement <8 x i32> %a, i32 0371  %a1 = extractelement <8 x i32> %a, i32 1372  %a2 = extractelement <8 x i32> %a, i32 2373  %a3 = extractelement <8 x i32> %a, i32 3374  %a4 = extractelement <8 x i32> %a, i32 4375  %a5 = extractelement <8 x i32> %a, i32 5376  %a6 = extractelement <8 x i32> %a, i32 6377  %a7 = extractelement <8 x i32> %a, i32 7378  %b0 = extractelement <8 x i32> %b, i32 0379  %b1 = extractelement <8 x i32> %b, i32 1380  %b2 = extractelement <8 x i32> %b, i32 2381  %b3 = extractelement <8 x i32> %b, i32 3382  %b4 = extractelement <8 x i32> %b, i32 4383  %b5 = extractelement <8 x i32> %b, i32 5384  %b6 = extractelement <8 x i32> %b, i32 6385  %b7 = extractelement <8 x i32> %b, i32 7386  %ab0 = ashr i32 %a0, %b0387  %ab1 = ashr i32 %a1, %b1388  %ab2 = lshr i32 %a2, %b2389  %ab3 = lshr i32 %a3, %b3390  %ab4 = lshr i32 %a4, %b4391  %ab5 = lshr i32 %a5, %b5392  %ab6 = shl  i32 %a6, %b6393  %ab7 = shl  i32 %a7, %b7394  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 0395  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 1396  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 2397  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 3398  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 4399  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 5400  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 6401  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 7402  ret <8 x i32> %r7403}404 405define <8 x i32> @add_v8i32_undefs(<8 x i32> %a) {406; CHECK-LABEL: @add_v8i32_undefs(407; CHECK-NEXT:    [[TMP1:%.*]] = add <8 x i32> [[A:%.*]], <i32 undef, i32 4, i32 8, i32 16, i32 undef, i32 4, i32 8, i32 16>408; CHECK-NEXT:    ret <8 x i32> [[TMP1]]409;410  %a0 = extractelement <8 x i32> %a, i32 0411  %a1 = extractelement <8 x i32> %a, i32 1412  %a2 = extractelement <8 x i32> %a, i32 2413  %a3 = extractelement <8 x i32> %a, i32 3414  %a4 = extractelement <8 x i32> %a, i32 4415  %a5 = extractelement <8 x i32> %a, i32 5416  %a6 = extractelement <8 x i32> %a, i32 6417  %a7 = extractelement <8 x i32> %a, i32 7418  %ab0 = add i32 %a0, undef419  %ab1 = add i32 %a1, 4420  %ab2 = add i32 %a2, 8421  %ab3 = add i32 %a3, 16422  %ab4 = add i32 %a4, undef423  %ab5 = add i32 %a5, 4424  %ab6 = add i32 %a6, 8425  %ab7 = add i32 %a7, 16426  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 0427  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 1428  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 2429  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 3430  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 4431  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 5432  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 6433  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 7434  ret <8 x i32> %r7435}436 437define <8 x i32> @sdiv_v8i32_undefs(<8 x i32> %a) {438; SSE-LABEL: @sdiv_v8i32_undefs(439; SSE-NEXT:    [[A0:%.*]] = extractelement <8 x i32> [[A:%.*]], i32 0440; SSE-NEXT:    [[A1:%.*]] = extractelement <8 x i32> [[A]], i32 1441; SSE-NEXT:    [[A2:%.*]] = extractelement <8 x i32> [[A]], i32 2442; SSE-NEXT:    [[A3:%.*]] = extractelement <8 x i32> [[A]], i32 3443; SSE-NEXT:    [[A4:%.*]] = extractelement <8 x i32> [[A]], i32 4444; SSE-NEXT:    [[A5:%.*]] = extractelement <8 x i32> [[A]], i32 5445; SSE-NEXT:    [[A6:%.*]] = extractelement <8 x i32> [[A]], i32 6446; SSE-NEXT:    [[A7:%.*]] = extractelement <8 x i32> [[A]], i32 7447; SSE-NEXT:    [[AB0:%.*]] = sdiv i32 [[A0]], undef448; SSE-NEXT:    [[AB1:%.*]] = sdiv i32 [[A1]], 4449; SSE-NEXT:    [[AB2:%.*]] = sdiv i32 [[A2]], 8450; SSE-NEXT:    [[AB3:%.*]] = sdiv i32 [[A3]], 16451; SSE-NEXT:    [[AB4:%.*]] = sdiv i32 [[A4]], undef452; SSE-NEXT:    [[AB5:%.*]] = sdiv i32 [[A5]], 4453; SSE-NEXT:    [[AB6:%.*]] = sdiv i32 [[A6]], 8454; SSE-NEXT:    [[AB7:%.*]] = sdiv i32 [[A7]], 16455; SSE-NEXT:    [[R0:%.*]] = insertelement <8 x i32> undef, i32 [[AB0]], i32 0456; SSE-NEXT:    [[R1:%.*]] = insertelement <8 x i32> [[R0]], i32 [[AB1]], i32 1457; SSE-NEXT:    [[R2:%.*]] = insertelement <8 x i32> [[R1]], i32 [[AB2]], i32 2458; SSE-NEXT:    [[R3:%.*]] = insertelement <8 x i32> [[R2]], i32 [[AB3]], i32 3459; SSE-NEXT:    [[R4:%.*]] = insertelement <8 x i32> [[R3]], i32 [[AB4]], i32 4460; SSE-NEXT:    [[R5:%.*]] = insertelement <8 x i32> [[R4]], i32 [[AB5]], i32 5461; SSE-NEXT:    [[R6:%.*]] = insertelement <8 x i32> [[R5]], i32 [[AB6]], i32 6462; SSE-NEXT:    [[R7:%.*]] = insertelement <8 x i32> [[R6]], i32 [[AB7]], i32 7463; SSE-NEXT:    ret <8 x i32> [[R7]]464;465; SLM-LABEL: @sdiv_v8i32_undefs(466; SLM-NEXT:    [[A0:%.*]] = extractelement <8 x i32> [[A:%.*]], i32 0467; SLM-NEXT:    [[A1:%.*]] = extractelement <8 x i32> [[A]], i32 1468; SLM-NEXT:    [[A2:%.*]] = extractelement <8 x i32> [[A]], i32 2469; SLM-NEXT:    [[A3:%.*]] = extractelement <8 x i32> [[A]], i32 3470; SLM-NEXT:    [[A4:%.*]] = extractelement <8 x i32> [[A]], i32 4471; SLM-NEXT:    [[A5:%.*]] = extractelement <8 x i32> [[A]], i32 5472; SLM-NEXT:    [[A6:%.*]] = extractelement <8 x i32> [[A]], i32 6473; SLM-NEXT:    [[A7:%.*]] = extractelement <8 x i32> [[A]], i32 7474; SLM-NEXT:    [[AB0:%.*]] = sdiv i32 [[A0]], undef475; SLM-NEXT:    [[AB1:%.*]] = sdiv i32 [[A1]], 4476; SLM-NEXT:    [[AB2:%.*]] = sdiv i32 [[A2]], 8477; SLM-NEXT:    [[AB3:%.*]] = sdiv i32 [[A3]], 16478; SLM-NEXT:    [[AB4:%.*]] = sdiv i32 [[A4]], undef479; SLM-NEXT:    [[AB5:%.*]] = sdiv i32 [[A5]], 4480; SLM-NEXT:    [[AB6:%.*]] = sdiv i32 [[A6]], 8481; SLM-NEXT:    [[AB7:%.*]] = sdiv i32 [[A7]], 16482; SLM-NEXT:    [[R0:%.*]] = insertelement <8 x i32> undef, i32 [[AB0]], i32 0483; SLM-NEXT:    [[R1:%.*]] = insertelement <8 x i32> [[R0]], i32 [[AB1]], i32 1484; SLM-NEXT:    [[R2:%.*]] = insertelement <8 x i32> [[R1]], i32 [[AB2]], i32 2485; SLM-NEXT:    [[R3:%.*]] = insertelement <8 x i32> [[R2]], i32 [[AB3]], i32 3486; SLM-NEXT:    [[R4:%.*]] = insertelement <8 x i32> [[R3]], i32 [[AB4]], i32 4487; SLM-NEXT:    [[R5:%.*]] = insertelement <8 x i32> [[R4]], i32 [[AB5]], i32 5488; SLM-NEXT:    [[R6:%.*]] = insertelement <8 x i32> [[R5]], i32 [[AB6]], i32 6489; SLM-NEXT:    [[R7:%.*]] = insertelement <8 x i32> [[R6]], i32 [[AB7]], i32 7490; SLM-NEXT:    ret <8 x i32> [[R7]]491;492; AVX1-LABEL: @sdiv_v8i32_undefs(493; AVX1-NEXT:    [[A0:%.*]] = extractelement <8 x i32> [[A:%.*]], i32 0494; AVX1-NEXT:    [[A1:%.*]] = extractelement <8 x i32> [[A]], i32 1495; AVX1-NEXT:    [[A2:%.*]] = extractelement <8 x i32> [[A]], i32 2496; AVX1-NEXT:    [[A3:%.*]] = extractelement <8 x i32> [[A]], i32 3497; AVX1-NEXT:    [[A4:%.*]] = extractelement <8 x i32> [[A]], i32 4498; AVX1-NEXT:    [[A5:%.*]] = extractelement <8 x i32> [[A]], i32 5499; AVX1-NEXT:    [[A6:%.*]] = extractelement <8 x i32> [[A]], i32 6500; AVX1-NEXT:    [[A7:%.*]] = extractelement <8 x i32> [[A]], i32 7501; AVX1-NEXT:    [[AB0:%.*]] = sdiv i32 [[A0]], undef502; AVX1-NEXT:    [[AB1:%.*]] = sdiv i32 [[A1]], 4503; AVX1-NEXT:    [[AB2:%.*]] = sdiv i32 [[A2]], 8504; AVX1-NEXT:    [[AB3:%.*]] = sdiv i32 [[A3]], 16505; AVX1-NEXT:    [[AB4:%.*]] = sdiv i32 [[A4]], undef506; AVX1-NEXT:    [[AB5:%.*]] = sdiv i32 [[A5]], 4507; AVX1-NEXT:    [[AB6:%.*]] = sdiv i32 [[A6]], 8508; AVX1-NEXT:    [[AB7:%.*]] = sdiv i32 [[A7]], 16509; AVX1-NEXT:    [[R0:%.*]] = insertelement <8 x i32> undef, i32 [[AB0]], i32 0510; AVX1-NEXT:    [[R1:%.*]] = insertelement <8 x i32> [[R0]], i32 [[AB1]], i32 1511; AVX1-NEXT:    [[R2:%.*]] = insertelement <8 x i32> [[R1]], i32 [[AB2]], i32 2512; AVX1-NEXT:    [[R3:%.*]] = insertelement <8 x i32> [[R2]], i32 [[AB3]], i32 3513; AVX1-NEXT:    [[R4:%.*]] = insertelement <8 x i32> [[R3]], i32 [[AB4]], i32 4514; AVX1-NEXT:    [[R5:%.*]] = insertelement <8 x i32> [[R4]], i32 [[AB5]], i32 5515; AVX1-NEXT:    [[R6:%.*]] = insertelement <8 x i32> [[R5]], i32 [[AB6]], i32 6516; AVX1-NEXT:    [[R7:%.*]] = insertelement <8 x i32> [[R6]], i32 [[AB7]], i32 7517; AVX1-NEXT:    ret <8 x i32> [[R7]]518;519; AVX2-LABEL: @sdiv_v8i32_undefs(520; AVX2-NEXT:    [[A0:%.*]] = extractelement <8 x i32> [[A:%.*]], i32 0521; AVX2-NEXT:    [[A1:%.*]] = extractelement <8 x i32> [[A]], i32 1522; AVX2-NEXT:    [[A4:%.*]] = extractelement <8 x i32> [[A]], i32 4523; AVX2-NEXT:    [[A5:%.*]] = extractelement <8 x i32> [[A]], i32 5524; AVX2-NEXT:    [[AB0:%.*]] = sdiv i32 [[A0]], undef525; AVX2-NEXT:    [[AB1:%.*]] = sdiv i32 [[A1]], 4526; AVX2-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <2 x i32> <i32 2, i32 3>527; AVX2-NEXT:    [[TMP2:%.*]] = sdiv <2 x i32> [[TMP1]], <i32 8, i32 16>528; AVX2-NEXT:    [[AB4:%.*]] = sdiv i32 [[A4]], undef529; AVX2-NEXT:    [[AB5:%.*]] = sdiv i32 [[A5]], 4530; AVX2-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <2 x i32> <i32 6, i32 7>531; AVX2-NEXT:    [[TMP4:%.*]] = sdiv <2 x i32> [[TMP3]], <i32 8, i32 16>532; AVX2-NEXT:    [[R0:%.*]] = insertelement <8 x i32> undef, i32 [[AB0]], i32 0533; AVX2-NEXT:    [[R1:%.*]] = insertelement <8 x i32> [[R0]], i32 [[AB1]], i32 1534; AVX2-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i32> [[TMP2]], <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>535; AVX2-NEXT:    [[R32:%.*]] = shufflevector <8 x i32> [[R1]], <8 x i32> [[TMP5]], <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>536; AVX2-NEXT:    [[R4:%.*]] = insertelement <8 x i32> [[R32]], i32 [[AB4]], i32 4537; AVX2-NEXT:    [[R5:%.*]] = insertelement <8 x i32> [[R4]], i32 [[AB5]], i32 5538; AVX2-NEXT:    [[TMP6:%.*]] = shufflevector <2 x i32> [[TMP4]], <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>539; AVX2-NEXT:    [[R71:%.*]] = shufflevector <8 x i32> [[R5]], <8 x i32> [[TMP6]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>540; AVX2-NEXT:    ret <8 x i32> [[R71]]541;542; AVX512-LABEL: @sdiv_v8i32_undefs(543; AVX512-NEXT:    [[A0:%.*]] = extractelement <8 x i32> [[A:%.*]], i32 0544; AVX512-NEXT:    [[A1:%.*]] = extractelement <8 x i32> [[A]], i32 1545; AVX512-NEXT:    [[A4:%.*]] = extractelement <8 x i32> [[A]], i32 4546; AVX512-NEXT:    [[A5:%.*]] = extractelement <8 x i32> [[A]], i32 5547; AVX512-NEXT:    [[AB0:%.*]] = sdiv i32 [[A0]], undef548; AVX512-NEXT:    [[AB1:%.*]] = sdiv i32 [[A1]], 4549; AVX512-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <2 x i32> <i32 2, i32 3>550; AVX512-NEXT:    [[TMP2:%.*]] = sdiv <2 x i32> [[TMP1]], <i32 8, i32 16>551; AVX512-NEXT:    [[AB4:%.*]] = sdiv i32 [[A4]], undef552; AVX512-NEXT:    [[AB5:%.*]] = sdiv i32 [[A5]], 4553; AVX512-NEXT:    [[TMP3:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <2 x i32> <i32 6, i32 7>554; AVX512-NEXT:    [[TMP4:%.*]] = sdiv <2 x i32> [[TMP3]], <i32 8, i32 16>555; AVX512-NEXT:    [[R0:%.*]] = insertelement <8 x i32> undef, i32 [[AB0]], i32 0556; AVX512-NEXT:    [[R1:%.*]] = insertelement <8 x i32> [[R0]], i32 [[AB1]], i32 1557; AVX512-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i32> [[TMP2]], <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>558; AVX512-NEXT:    [[R32:%.*]] = shufflevector <8 x i32> [[R1]], <8 x i32> [[TMP5]], <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>559; AVX512-NEXT:    [[R4:%.*]] = insertelement <8 x i32> [[R32]], i32 [[AB4]], i32 4560; AVX512-NEXT:    [[R5:%.*]] = insertelement <8 x i32> [[R4]], i32 [[AB5]], i32 5561; AVX512-NEXT:    [[TMP6:%.*]] = shufflevector <2 x i32> [[TMP4]], <2 x i32> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>562; AVX512-NEXT:    [[R71:%.*]] = shufflevector <8 x i32> [[R5]], <8 x i32> [[TMP6]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>563; AVX512-NEXT:    ret <8 x i32> [[R71]]564;565  %a0 = extractelement <8 x i32> %a, i32 0566  %a1 = extractelement <8 x i32> %a, i32 1567  %a2 = extractelement <8 x i32> %a, i32 2568  %a3 = extractelement <8 x i32> %a, i32 3569  %a4 = extractelement <8 x i32> %a, i32 4570  %a5 = extractelement <8 x i32> %a, i32 5571  %a6 = extractelement <8 x i32> %a, i32 6572  %a7 = extractelement <8 x i32> %a, i32 7573  %ab0 = sdiv i32 %a0, undef574  %ab1 = sdiv i32 %a1, 4575  %ab2 = sdiv i32 %a2, 8576  %ab3 = sdiv i32 %a3, 16577  %ab4 = sdiv i32 %a4, undef578  %ab5 = sdiv i32 %a5, 4579  %ab6 = sdiv i32 %a6, 8580  %ab7 = sdiv i32 %a7, 16581  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 0582  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 1583  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 2584  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 3585  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 4586  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 5587  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 6588  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 7589  ret <8 x i32> %r7590}591 592define <8 x i32> @add_sub_v8i32_splat(<8 x i32> %a, i32 %b) {593; SSE-LABEL: @add_sub_v8i32_splat(594; SSE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>595; SSE-NEXT:    [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[B:%.*]], i32 0596; SSE-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer597; SSE-NEXT:    [[TMP4:%.*]] = add <4 x i32> [[TMP1]], [[TMP3]]598; SSE-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>599; SSE-NEXT:    [[TMP6:%.*]] = sub <4 x i32> [[TMP3]], [[TMP5]]600; SSE-NEXT:    [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>601; SSE-NEXT:    [[TMP9:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>602; SSE-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> [[TMP9]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>603; SSE-NEXT:    ret <8 x i32> [[TMP7]]604;605; SLM-LABEL: @add_sub_v8i32_splat(606; SLM-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>607; SLM-NEXT:    [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[B:%.*]], i32 0608; SLM-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer609; SLM-NEXT:    [[TMP4:%.*]] = add <4 x i32> [[TMP1]], [[TMP3]]610; SLM-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>611; SLM-NEXT:    [[TMP6:%.*]] = sub <4 x i32> [[TMP3]], [[TMP5]]612; SLM-NEXT:    [[TMP8:%.*]] = shufflevector <4 x i32> [[TMP4]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>613; SLM-NEXT:    [[TMP9:%.*]] = shufflevector <4 x i32> [[TMP6]], <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>614; SLM-NEXT:    [[TMP7:%.*]] = shufflevector <8 x i32> [[TMP8]], <8 x i32> [[TMP9]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>615; SLM-NEXT:    ret <8 x i32> [[TMP7]]616;617; AVX1-LABEL: @add_sub_v8i32_splat(618; AVX1-NEXT:    [[TMP1:%.*]] = insertelement <8 x i32> poison, i32 [[B:%.*]], i32 0619; AVX1-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> poison, <8 x i32> zeroinitializer620; AVX1-NEXT:    [[TMP3:%.*]] = add <8 x i32> [[TMP2]], [[A:%.*]]621; AVX1-NEXT:    [[TMP4:%.*]] = sub <8 x i32> [[TMP2]], [[A]]622; AVX1-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP3]], <8 x i32> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>623; AVX1-NEXT:    ret <8 x i32> [[TMP5]]624;625; AVX2-LABEL: @add_sub_v8i32_splat(626; AVX2-NEXT:    [[TMP1:%.*]] = insertelement <8 x i32> poison, i32 [[B:%.*]], i32 0627; AVX2-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> poison, <8 x i32> zeroinitializer628; AVX2-NEXT:    [[TMP3:%.*]] = add <8 x i32> [[TMP2]], [[A:%.*]]629; AVX2-NEXT:    [[TMP4:%.*]] = sub <8 x i32> [[TMP2]], [[A]]630; AVX2-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP3]], <8 x i32> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>631; AVX2-NEXT:    ret <8 x i32> [[TMP5]]632;633; AVX512-LABEL: @add_sub_v8i32_splat(634; AVX512-NEXT:    [[TMP1:%.*]] = insertelement <8 x i32> poison, i32 [[B:%.*]], i32 0635; AVX512-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> poison, <8 x i32> zeroinitializer636; AVX512-NEXT:    [[TMP3:%.*]] = add <8 x i32> [[TMP2]], [[A:%.*]]637; AVX512-NEXT:    [[TMP4:%.*]] = sub <8 x i32> [[TMP2]], [[A]]638; AVX512-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i32> [[TMP3]], <8 x i32> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>639; AVX512-NEXT:    ret <8 x i32> [[TMP5]]640;641  %a0 = extractelement <8 x i32> %a, i32 0642  %a1 = extractelement <8 x i32> %a, i32 1643  %a2 = extractelement <8 x i32> %a, i32 2644  %a3 = extractelement <8 x i32> %a, i32 3645  %a4 = extractelement <8 x i32> %a, i32 4646  %a5 = extractelement <8 x i32> %a, i32 5647  %a6 = extractelement <8 x i32> %a, i32 6648  %a7 = extractelement <8 x i32> %a, i32 7649  %ab0 = add i32 %a0, %b650  %ab1 = add i32 %b, %a1651  %ab2 = add i32 %a2, %b652  %ab3 = add i32 %b, %a3653  %ab4 = sub i32 %b, %a4654  %ab5 = sub i32 %b, %a5655  %ab6 = sub i32 %b, %a6656  %ab7 = sub i32 %b, %a7657  %r0 = insertelement <8 x i32> undef, i32 %ab0, i32 0658  %r1 = insertelement <8 x i32>   %r0, i32 %ab1, i32 1659  %r2 = insertelement <8 x i32>   %r1, i32 %ab2, i32 2660  %r3 = insertelement <8 x i32>   %r2, i32 %ab3, i32 3661  %r4 = insertelement <8 x i32>   %r3, i32 %ab4, i32 4662  %r5 = insertelement <8 x i32>   %r4, i32 %ab5, i32 5663  %r6 = insertelement <8 x i32>   %r5, i32 %ab6, i32 6664  %r7 = insertelement <8 x i32>   %r6, i32 %ab7, i32 7665  ret <8 x i32> %r7666}667