brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.6 KiB · e9cf1de Raw
661 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -mtriple=aarch64 -passes=slp-vectorizer -mattr=-sve -S < %s | FileCheck %s --check-prefixes=CHECK,NO-SVE3; RUN: opt -mtriple=aarch64 -passes=slp-vectorizer -mattr=+sve -S < %s | FileCheck %s --check-prefixes=CHECK,SVE4 5define <2 x i8> @slp_v2i8_Op1_Op2_unknown(<2 x i8> %a, <2 x i8> %b)6; NO-SVE-LABEL: define <2 x i8> @slp_v2i8_Op1_Op2_unknown(7; NO-SVE-SAME: <2 x i8> [[A:%.*]], <2 x i8> [[B:%.*]]) #[[ATTR0:[0-9]+]] {8; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <2 x i8> [[A]], i32 09; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <2 x i8> [[A]], i32 110; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <2 x i8> [[B]], i32 011; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <2 x i8> [[B]], i32 112; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i8 [[A0]], [[B0]]13; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i8 [[A1]], [[B1]]14; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <2 x i8> poison, i8 [[TMP1]], i32 015; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <2 x i8> [[R0]], i8 [[TMP2]], i32 116; NO-SVE-NEXT:    ret <2 x i8> [[R1]]17;18; SVE-LABEL: define <2 x i8> @slp_v2i8_Op1_Op2_unknown(19; SVE-SAME: <2 x i8> [[A:%.*]], <2 x i8> [[B:%.*]]) #[[ATTR0:[0-9]+]] {20; SVE-NEXT:    [[TMP1:%.*]] = sdiv <2 x i8> [[A]], [[B]]21; SVE-NEXT:    ret <2 x i8> [[TMP1]]22;23{24  %a0 = extractelement <2 x i8> %a, i32 025  %a1 = extractelement <2 x i8> %a, i32 126  %b0 = extractelement <2 x i8> %b, i32 027  %b1 = extractelement <2 x i8> %b, i32 128  %1 = sdiv i8 %a0, %b029  %2 = sdiv i8 %a1, %b130  %r0 = insertelement <2 x i8> poison, i8 %1, i32 031  %r1 = insertelement <2 x i8> %r0, i8 %2, i32 132  ret <2 x i8> %r133}34 35define <2 x i16> @slp_v2i16_Op1_Op2_unknown(<2 x i16> %a, <2 x i16> %b)36; NO-SVE-LABEL: define <2 x i16> @slp_v2i16_Op1_Op2_unknown(37; NO-SVE-SAME: <2 x i16> [[A:%.*]], <2 x i16> [[B:%.*]]) #[[ATTR0]] {38; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <2 x i16> [[A]], i32 039; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <2 x i16> [[A]], i32 140; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <2 x i16> [[B]], i32 041; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <2 x i16> [[B]], i32 142; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i16 [[A0]], [[B0]]43; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i16 [[A1]], [[B1]]44; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <2 x i16> poison, i16 [[TMP1]], i32 045; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <2 x i16> [[R0]], i16 [[TMP2]], i32 146; NO-SVE-NEXT:    ret <2 x i16> [[R1]]47;48; SVE-LABEL: define <2 x i16> @slp_v2i16_Op1_Op2_unknown(49; SVE-SAME: <2 x i16> [[A:%.*]], <2 x i16> [[B:%.*]]) #[[ATTR0]] {50; SVE-NEXT:    [[TMP1:%.*]] = sdiv <2 x i16> [[A]], [[B]]51; SVE-NEXT:    ret <2 x i16> [[TMP1]]52;53{54  %a0 = extractelement <2 x i16> %a, i32 055  %a1 = extractelement <2 x i16> %a, i32 156  %b0 = extractelement <2 x i16> %b, i32 057  %b1 = extractelement <2 x i16> %b, i32 158  %1 = sdiv i16 %a0, %b059  %2 = sdiv i16 %a1, %b160  %r0 = insertelement <2 x i16> poison, i16 %1, i32 061  %r1 = insertelement <2 x i16> %r0, i16 %2, i32 162  ret <2 x i16> %r163}64 65define <2 x i32> @slp_v2i32_Op1_Op2_unknown(<2 x i32> %a, <2 x i32> %b)66; NO-SVE-LABEL: define <2 x i32> @slp_v2i32_Op1_Op2_unknown(67; NO-SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]]) #[[ATTR0]] {68; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <2 x i32> [[A]], i32 069; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <2 x i32> [[A]], i32 170; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <2 x i32> [[B]], i32 071; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <2 x i32> [[B]], i32 172; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i32 [[A0]], [[B0]]73; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i32 [[A1]], [[B1]]74; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <2 x i32> poison, i32 [[TMP1]], i32 075; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <2 x i32> [[R0]], i32 [[TMP2]], i32 176; NO-SVE-NEXT:    ret <2 x i32> [[R1]]77;78; SVE-LABEL: define <2 x i32> @slp_v2i32_Op1_Op2_unknown(79; SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]]) #[[ATTR0]] {80; SVE-NEXT:    [[TMP1:%.*]] = sdiv <2 x i32> [[A]], [[B]]81; SVE-NEXT:    ret <2 x i32> [[TMP1]]82;83{84  %a0 = extractelement <2 x i32> %a, i32 085  %a1 = extractelement <2 x i32> %a, i32 186  %b0 = extractelement <2 x i32> %b, i32 087  %b1 = extractelement <2 x i32> %b, i32 188  %1 = sdiv i32 %a0, %b089  %2 = sdiv i32 %a1, %b190  %r0 = insertelement <2 x i32> poison, i32 %1, i32 091  %r1 = insertelement <2 x i32> %r0, i32 %2, i32 192  ret <2 x i32> %r193}94 95define <2 x i64> @slp_v2i64_Op1_Op2_unknown(<2 x i64> %a, <2 x i64> %b)96; NO-SVE-LABEL: define <2 x i64> @slp_v2i64_Op1_Op2_unknown(97; NO-SVE-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]]) #[[ATTR0]] {98; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <2 x i64> [[A]], i32 099; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <2 x i64> [[A]], i32 1100; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <2 x i64> [[B]], i32 0101; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <2 x i64> [[B]], i32 1102; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i64 [[A0]], [[B0]]103; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i64 [[A1]], [[B1]]104; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <2 x i64> poison, i64 [[TMP1]], i32 0105; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <2 x i64> [[R0]], i64 [[TMP2]], i32 1106; NO-SVE-NEXT:    ret <2 x i64> [[R1]]107;108; SVE-LABEL: define <2 x i64> @slp_v2i64_Op1_Op2_unknown(109; SVE-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]]) #[[ATTR0]] {110; SVE-NEXT:    [[TMP1:%.*]] = sdiv <2 x i64> [[A]], [[B]]111; SVE-NEXT:    ret <2 x i64> [[TMP1]]112;113{114  %a0 = extractelement <2 x i64> %a, i32 0115  %a1 = extractelement <2 x i64> %a, i32 1116  %b0 = extractelement <2 x i64> %b, i32 0117  %b1 = extractelement <2 x i64> %b, i32 1118  %1 = sdiv i64 %a0, %b0119  %2 = sdiv i64 %a1, %b1120  %r0 = insertelement <2 x i64> poison, i64 %1, i32 0121  %r1 = insertelement <2 x i64> %r0, i64 %2, i32 1122  ret <2 x i64> %r1123}124 125define <4 x i8> @slp_v4i8_Op1_Op2_unknown(<4 x i8> %a, <4 x i8> %b)126; NO-SVE-LABEL: define <4 x i8> @slp_v4i8_Op1_Op2_unknown(127; NO-SVE-SAME: <4 x i8> [[A:%.*]], <4 x i8> [[B:%.*]]) #[[ATTR0]] {128; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <4 x i8> [[A]], i32 0129; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <4 x i8> [[A]], i32 1130; NO-SVE-NEXT:    [[A2:%.*]] = extractelement <4 x i8> [[A]], i32 2131; NO-SVE-NEXT:    [[A3:%.*]] = extractelement <4 x i8> [[A]], i32 3132; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <4 x i8> [[B]], i32 0133; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <4 x i8> [[B]], i32 1134; NO-SVE-NEXT:    [[B2:%.*]] = extractelement <4 x i8> [[B]], i32 2135; NO-SVE-NEXT:    [[B3:%.*]] = extractelement <4 x i8> [[B]], i32 3136; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i8 [[A0]], [[B0]]137; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i8 [[A1]], [[B1]]138; NO-SVE-NEXT:    [[TMP3:%.*]] = sdiv i8 [[A2]], [[B2]]139; NO-SVE-NEXT:    [[TMP4:%.*]] = sdiv i8 [[A3]], [[B3]]140; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <4 x i8> poison, i8 [[TMP1]], i32 0141; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <4 x i8> [[R0]], i8 [[TMP2]], i32 1142; NO-SVE-NEXT:    [[R2:%.*]] = insertelement <4 x i8> [[R1]], i8 [[TMP3]], i32 2143; NO-SVE-NEXT:    [[R3:%.*]] = insertelement <4 x i8> [[R2]], i8 [[TMP4]], i32 3144; NO-SVE-NEXT:    ret <4 x i8> [[R3]]145;146; SVE-LABEL: define <4 x i8> @slp_v4i8_Op1_Op2_unknown(147; SVE-SAME: <4 x i8> [[A:%.*]], <4 x i8> [[B:%.*]]) #[[ATTR0]] {148; SVE-NEXT:    [[TMP1:%.*]] = sdiv <4 x i8> [[A]], [[B]]149; SVE-NEXT:    ret <4 x i8> [[TMP1]]150;151{152  %a0 = extractelement <4 x i8> %a, i32 0153  %a1 = extractelement <4 x i8> %a, i32 1154  %a2 = extractelement <4 x i8> %a, i32 2155  %a3 = extractelement <4 x i8> %a, i32 3156  %b0 = extractelement <4 x i8> %b, i32 0157  %b1 = extractelement <4 x i8> %b, i32 1158  %b2 = extractelement <4 x i8> %b, i32 2159  %b3 = extractelement <4 x i8> %b, i32 3160  %1 = sdiv i8 %a0, %b0161  %2 = sdiv i8 %a1, %b1162  %3 = sdiv i8 %a2, %b2163  %4 = sdiv i8 %a3, %b3164  %r0 = insertelement <4 x i8> poison, i8 %1, i32 0165  %r1 = insertelement <4 x i8> %r0, i8 %2, i32 1166  %r2 = insertelement <4 x i8> %r1, i8 %3, i32 2167  %r3 = insertelement <4 x i8> %r2, i8 %4, i32 3168  ret <4 x i8> %r3169}170 171define <4 x i16> @slp_v4i16_Op1_Op2_unknown(<4 x i16> %a, <4 x i16> %b)172; NO-SVE-LABEL: define <4 x i16> @slp_v4i16_Op1_Op2_unknown(173; NO-SVE-SAME: <4 x i16> [[A:%.*]], <4 x i16> [[B:%.*]]) #[[ATTR0]] {174; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <4 x i16> [[A]], i32 0175; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <4 x i16> [[A]], i32 1176; NO-SVE-NEXT:    [[A2:%.*]] = extractelement <4 x i16> [[A]], i32 2177; NO-SVE-NEXT:    [[A3:%.*]] = extractelement <4 x i16> [[A]], i32 3178; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <4 x i16> [[B]], i32 0179; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <4 x i16> [[B]], i32 1180; NO-SVE-NEXT:    [[B2:%.*]] = extractelement <4 x i16> [[B]], i32 2181; NO-SVE-NEXT:    [[B3:%.*]] = extractelement <4 x i16> [[B]], i32 3182; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i16 [[A0]], [[B0]]183; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i16 [[A1]], [[B1]]184; NO-SVE-NEXT:    [[TMP3:%.*]] = sdiv i16 [[A2]], [[B2]]185; NO-SVE-NEXT:    [[TMP4:%.*]] = sdiv i16 [[A3]], [[B3]]186; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <4 x i16> poison, i16 [[TMP1]], i32 0187; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <4 x i16> [[R0]], i16 [[TMP2]], i32 1188; NO-SVE-NEXT:    [[R2:%.*]] = insertelement <4 x i16> [[R1]], i16 [[TMP3]], i32 2189; NO-SVE-NEXT:    [[R3:%.*]] = insertelement <4 x i16> [[R2]], i16 [[TMP4]], i32 3190; NO-SVE-NEXT:    ret <4 x i16> [[R3]]191;192; SVE-LABEL: define <4 x i16> @slp_v4i16_Op1_Op2_unknown(193; SVE-SAME: <4 x i16> [[A:%.*]], <4 x i16> [[B:%.*]]) #[[ATTR0]] {194; SVE-NEXT:    [[TMP1:%.*]] = sdiv <4 x i16> [[A]], [[B]]195; SVE-NEXT:    ret <4 x i16> [[TMP1]]196;197{198  %a0 = extractelement <4 x i16> %a, i32 0199  %a1 = extractelement <4 x i16> %a, i32 1200  %a2 = extractelement <4 x i16> %a, i32 2201  %a3 = extractelement <4 x i16> %a, i32 3202  %b0 = extractelement <4 x i16> %b, i32 0203  %b1 = extractelement <4 x i16> %b, i32 1204  %b2 = extractelement <4 x i16> %b, i32 2205  %b3 = extractelement <4 x i16> %b, i32 3206  %1 = sdiv i16 %a0, %b0207  %2 = sdiv i16 %a1, %b1208  %3 = sdiv i16 %a2, %b2209  %4 = sdiv i16 %a3, %b3210  %r0 = insertelement <4 x i16> poison, i16 %1, i32 0211  %r1 = insertelement <4 x i16> %r0, i16 %2, i32 1212  %r2 = insertelement <4 x i16> %r1, i16 %3, i32 2213  %r3 = insertelement <4 x i16> %r2, i16 %4, i32 3214  ret <4 x i16> %r3215}216 217define <4 x i32> @slp_v4i32_Op1_Op2_unknown(<4 x i32> %a, <4 x i32> %b)218; NO-SVE-LABEL: define <4 x i32> @slp_v4i32_Op1_Op2_unknown(219; NO-SVE-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) #[[ATTR0]] {220; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <4 x i32> [[A]], i32 0221; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <4 x i32> [[A]], i32 1222; NO-SVE-NEXT:    [[A2:%.*]] = extractelement <4 x i32> [[A]], i32 2223; NO-SVE-NEXT:    [[A3:%.*]] = extractelement <4 x i32> [[A]], i32 3224; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <4 x i32> [[B]], i32 0225; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <4 x i32> [[B]], i32 1226; NO-SVE-NEXT:    [[B2:%.*]] = extractelement <4 x i32> [[B]], i32 2227; NO-SVE-NEXT:    [[B3:%.*]] = extractelement <4 x i32> [[B]], i32 3228; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i32 [[A0]], [[B0]]229; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i32 [[A1]], [[B1]]230; NO-SVE-NEXT:    [[TMP3:%.*]] = sdiv i32 [[A2]], [[B2]]231; NO-SVE-NEXT:    [[TMP4:%.*]] = sdiv i32 [[A3]], [[B3]]232; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <4 x i32> poison, i32 [[TMP1]], i32 0233; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <4 x i32> [[R0]], i32 [[TMP2]], i32 1234; NO-SVE-NEXT:    [[R2:%.*]] = insertelement <4 x i32> [[R1]], i32 [[TMP3]], i32 2235; NO-SVE-NEXT:    [[R3:%.*]] = insertelement <4 x i32> [[R2]], i32 [[TMP4]], i32 3236; NO-SVE-NEXT:    ret <4 x i32> [[R3]]237;238; SVE-LABEL: define <4 x i32> @slp_v4i32_Op1_Op2_unknown(239; SVE-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) #[[ATTR0]] {240; SVE-NEXT:    [[TMP1:%.*]] = sdiv <4 x i32> [[A]], [[B]]241; SVE-NEXT:    ret <4 x i32> [[TMP1]]242;243{244  %a0 = extractelement <4 x i32> %a, i32 0245  %a1 = extractelement <4 x i32> %a, i32 1246  %a2 = extractelement <4 x i32> %a, i32 2247  %a3 = extractelement <4 x i32> %a, i32 3248  %b0 = extractelement <4 x i32> %b, i32 0249  %b1 = extractelement <4 x i32> %b, i32 1250  %b2 = extractelement <4 x i32> %b, i32 2251  %b3 = extractelement <4 x i32> %b, i32 3252  %1 = sdiv i32 %a0, %b0253  %2 = sdiv i32 %a1, %b1254  %3 = sdiv i32 %a2, %b2255  %4 = sdiv i32 %a3, %b3256  %r0 = insertelement <4 x i32> poison, i32 %1, i32 0257  %r1 = insertelement <4 x i32> %r0, i32 %2, i32 1258  %r2 = insertelement <4 x i32> %r1, i32 %3, i32 2259  %r3 = insertelement <4 x i32> %r2, i32 %4, i32 3260  ret <4 x i32> %r3261}262 263define <8 x i8> @slp_v8i8_Op1_Op2_unknown(<8 x i8> %a, <8 x i8> %b)264; NO-SVE-LABEL: define <8 x i8> @slp_v8i8_Op1_Op2_unknown(265; NO-SVE-SAME: <8 x i8> [[A:%.*]], <8 x i8> [[B:%.*]]) #[[ATTR0]] {266; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <8 x i8> [[A]], i32 0267; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <8 x i8> [[A]], i32 1268; NO-SVE-NEXT:    [[A2:%.*]] = extractelement <8 x i8> [[A]], i32 2269; NO-SVE-NEXT:    [[A3:%.*]] = extractelement <8 x i8> [[A]], i32 3270; NO-SVE-NEXT:    [[A4:%.*]] = extractelement <8 x i8> [[A]], i32 4271; NO-SVE-NEXT:    [[A5:%.*]] = extractelement <8 x i8> [[A]], i32 5272; NO-SVE-NEXT:    [[A6:%.*]] = extractelement <8 x i8> [[A]], i32 6273; NO-SVE-NEXT:    [[A7:%.*]] = extractelement <8 x i8> [[A]], i32 7274; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <8 x i8> [[B]], i32 0275; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <8 x i8> [[B]], i32 1276; NO-SVE-NEXT:    [[B2:%.*]] = extractelement <8 x i8> [[B]], i32 2277; NO-SVE-NEXT:    [[B3:%.*]] = extractelement <8 x i8> [[B]], i32 3278; NO-SVE-NEXT:    [[B4:%.*]] = extractelement <8 x i8> [[B]], i32 4279; NO-SVE-NEXT:    [[B5:%.*]] = extractelement <8 x i8> [[B]], i32 5280; NO-SVE-NEXT:    [[B6:%.*]] = extractelement <8 x i8> [[B]], i32 6281; NO-SVE-NEXT:    [[B7:%.*]] = extractelement <8 x i8> [[B]], i32 7282; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i8 [[A0]], [[B0]]283; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i8 [[A1]], [[B1]]284; NO-SVE-NEXT:    [[TMP3:%.*]] = sdiv i8 [[A2]], [[B2]]285; NO-SVE-NEXT:    [[TMP4:%.*]] = sdiv i8 [[A3]], [[B3]]286; NO-SVE-NEXT:    [[TMP5:%.*]] = sdiv i8 [[A4]], [[B4]]287; NO-SVE-NEXT:    [[TMP6:%.*]] = sdiv i8 [[A5]], [[B5]]288; NO-SVE-NEXT:    [[TMP7:%.*]] = sdiv i8 [[A6]], [[B6]]289; NO-SVE-NEXT:    [[TMP8:%.*]] = sdiv i8 [[A7]], [[B7]]290; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <8 x i8> poison, i8 [[TMP1]], i32 0291; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <8 x i8> [[R0]], i8 [[TMP2]], i32 1292; NO-SVE-NEXT:    [[R2:%.*]] = insertelement <8 x i8> [[R1]], i8 [[TMP3]], i32 2293; NO-SVE-NEXT:    [[R3:%.*]] = insertelement <8 x i8> [[R2]], i8 [[TMP4]], i32 3294; NO-SVE-NEXT:    [[R4:%.*]] = insertelement <8 x i8> [[R3]], i8 [[TMP5]], i32 4295; NO-SVE-NEXT:    [[R5:%.*]] = insertelement <8 x i8> [[R4]], i8 [[TMP6]], i32 5296; NO-SVE-NEXT:    [[R6:%.*]] = insertelement <8 x i8> [[R5]], i8 [[TMP7]], i32 6297; NO-SVE-NEXT:    [[R7:%.*]] = insertelement <8 x i8> [[R6]], i8 [[TMP8]], i32 7298; NO-SVE-NEXT:    ret <8 x i8> [[R3]]299;300; SVE-LABEL: define <8 x i8> @slp_v8i8_Op1_Op2_unknown(301; SVE-SAME: <8 x i8> [[A:%.*]], <8 x i8> [[B:%.*]]) #[[ATTR0]] {302; SVE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>303; SVE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i8> [[B]], <8 x i8> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>304; SVE-NEXT:    [[TMP3:%.*]] = sdiv <4 x i8> [[TMP1]], [[TMP2]]305; SVE-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>306; SVE-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i8> [[B]], <8 x i8> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>307; SVE-NEXT:    [[TMP6:%.*]] = sdiv <4 x i8> [[TMP4]], [[TMP5]]308; SVE-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>309; SVE-NEXT:    [[TMP8:%.*]] = shufflevector <4 x i8> [[TMP6]], <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>310; SVE-NEXT:    [[R71:%.*]] = shufflevector <8 x i8> [[TMP7]], <8 x i8> [[TMP8]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>311; SVE-NEXT:    ret <8 x i8> [[TMP7]]312;313{314  %a0 = extractelement <8 x i8> %a, i32 0315  %a1 = extractelement <8 x i8> %a, i32 1316  %a2 = extractelement <8 x i8> %a, i32 2317  %a3 = extractelement <8 x i8> %a, i32 3318  %a4 = extractelement <8 x i8> %a, i32 4319  %a5 = extractelement <8 x i8> %a, i32 5320  %a6 = extractelement <8 x i8> %a, i32 6321  %a7 = extractelement <8 x i8> %a, i32 7322  %b0 = extractelement <8 x i8> %b, i32 0323  %b1 = extractelement <8 x i8> %b, i32 1324  %b2 = extractelement <8 x i8> %b, i32 2325  %b3 = extractelement <8 x i8> %b, i32 3326  %b4 = extractelement <8 x i8> %b, i32 4327  %b5 = extractelement <8 x i8> %b, i32 5328  %b6 = extractelement <8 x i8> %b, i32 6329  %b7 = extractelement <8 x i8> %b, i32 7330  %1 = sdiv i8 %a0, %b0331  %2 = sdiv i8 %a1, %b1332  %3 = sdiv i8 %a2, %b2333  %4 = sdiv i8 %a3, %b3334  %5 = sdiv i8 %a4, %b4335  %6 = sdiv i8 %a5, %b5336  %7 = sdiv i8 %a6, %b6337  %8 = sdiv i8 %a7, %b7338  %r0 = insertelement <8 x i8> poison, i8 %1, i32 0339  %r1 = insertelement <8 x i8> %r0, i8 %2, i32 1340  %r2 = insertelement <8 x i8> %r1, i8 %3, i32 2341  %r3 = insertelement <8 x i8> %r2, i8 %4, i32 3342  %r4 = insertelement <8 x i8> %r3, i8 %5, i32 4343  %r5 = insertelement <8 x i8> %r4, i8 %6, i32 5344  %r6 = insertelement <8 x i8> %r5, i8 %7, i32 6345  %r7 = insertelement <8 x i8> %r6, i8 %8, i32 7346  ret <8 x i8> %r3347}348 349define <8 x i16> @slp_v8i16_Op1_Op2_unknown(<8 x i16> %a, <8 x i16> %b)350; NO-SVE-LABEL: define <8 x i16> @slp_v8i16_Op1_Op2_unknown(351; NO-SVE-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]]) #[[ATTR0]] {352; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <8 x i16> [[A]], i32 0353; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <8 x i16> [[A]], i32 1354; NO-SVE-NEXT:    [[A2:%.*]] = extractelement <8 x i16> [[A]], i32 2355; NO-SVE-NEXT:    [[A3:%.*]] = extractelement <8 x i16> [[A]], i32 3356; NO-SVE-NEXT:    [[A4:%.*]] = extractelement <8 x i16> [[A]], i32 4357; NO-SVE-NEXT:    [[A5:%.*]] = extractelement <8 x i16> [[A]], i32 5358; NO-SVE-NEXT:    [[A6:%.*]] = extractelement <8 x i16> [[A]], i32 6359; NO-SVE-NEXT:    [[A7:%.*]] = extractelement <8 x i16> [[A]], i32 7360; NO-SVE-NEXT:    [[B0:%.*]] = extractelement <8 x i16> [[B]], i32 0361; NO-SVE-NEXT:    [[B1:%.*]] = extractelement <8 x i16> [[B]], i32 1362; NO-SVE-NEXT:    [[B2:%.*]] = extractelement <8 x i16> [[B]], i32 2363; NO-SVE-NEXT:    [[B3:%.*]] = extractelement <8 x i16> [[B]], i32 3364; NO-SVE-NEXT:    [[B4:%.*]] = extractelement <8 x i16> [[B]], i32 4365; NO-SVE-NEXT:    [[B5:%.*]] = extractelement <8 x i16> [[B]], i32 5366; NO-SVE-NEXT:    [[B6:%.*]] = extractelement <8 x i16> [[B]], i32 6367; NO-SVE-NEXT:    [[B7:%.*]] = extractelement <8 x i16> [[B]], i32 7368; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i16 [[A0]], [[B0]]369; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i16 [[A1]], [[B1]]370; NO-SVE-NEXT:    [[TMP3:%.*]] = sdiv i16 [[A2]], [[B2]]371; NO-SVE-NEXT:    [[TMP4:%.*]] = sdiv i16 [[A3]], [[B3]]372; NO-SVE-NEXT:    [[TMP5:%.*]] = sdiv i16 [[A4]], [[B4]]373; NO-SVE-NEXT:    [[TMP6:%.*]] = sdiv i16 [[A5]], [[B5]]374; NO-SVE-NEXT:    [[TMP7:%.*]] = sdiv i16 [[A6]], [[B6]]375; NO-SVE-NEXT:    [[TMP8:%.*]] = sdiv i16 [[A7]], [[B7]]376; NO-SVE-NEXT:    [[R0:%.*]] = insertelement <8 x i16> poison, i16 [[TMP1]], i32 0377; NO-SVE-NEXT:    [[R1:%.*]] = insertelement <8 x i16> [[R0]], i16 [[TMP2]], i32 1378; NO-SVE-NEXT:    [[R2:%.*]] = insertelement <8 x i16> [[R1]], i16 [[TMP3]], i32 2379; NO-SVE-NEXT:    [[R3:%.*]] = insertelement <8 x i16> [[R2]], i16 [[TMP4]], i32 3380; NO-SVE-NEXT:    [[R4:%.*]] = insertelement <8 x i16> [[R3]], i16 [[TMP5]], i32 4381; NO-SVE-NEXT:    [[R5:%.*]] = insertelement <8 x i16> [[R4]], i16 [[TMP6]], i32 5382; NO-SVE-NEXT:    [[R6:%.*]] = insertelement <8 x i16> [[R5]], i16 [[TMP7]], i32 6383; NO-SVE-NEXT:    [[R7:%.*]] = insertelement <8 x i16> [[R6]], i16 [[TMP8]], i32 7384; NO-SVE-NEXT:    ret <8 x i16> [[R3]]385;386; SVE-LABEL: define <8 x i16> @slp_v8i16_Op1_Op2_unknown(387; SVE-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]]) #[[ATTR0]] {388; SVE-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>389; SVE-NEXT:    [[TMP2:%.*]] = shufflevector <8 x i16> [[B]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>390; SVE-NEXT:    [[TMP3:%.*]] = sdiv <4 x i16> [[TMP1]], [[TMP2]]391; SVE-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>392; SVE-NEXT:    [[TMP5:%.*]] = shufflevector <8 x i16> [[B]], <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>393; SVE-NEXT:    [[TMP6:%.*]] = sdiv <4 x i16> [[TMP4]], [[TMP5]]394; SVE-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i16> [[TMP3]], <4 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>395; SVE-NEXT:    [[TMP8:%.*]] = shufflevector <4 x i16> [[TMP6]], <4 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>396; SVE-NEXT:    [[R71:%.*]] = shufflevector <8 x i16> [[TMP7]], <8 x i16> [[TMP8]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>397; SVE-NEXT:    ret <8 x i16> [[TMP7]]398;399{400  %a0 = extractelement <8 x i16> %a, i32 0401  %a1 = extractelement <8 x i16> %a, i32 1402  %a2 = extractelement <8 x i16> %a, i32 2403  %a3 = extractelement <8 x i16> %a, i32 3404  %a4 = extractelement <8 x i16> %a, i32 4405  %a5 = extractelement <8 x i16> %a, i32 5406  %a6 = extractelement <8 x i16> %a, i32 6407  %a7 = extractelement <8 x i16> %a, i32 7408  %b0 = extractelement <8 x i16> %b, i32 0409  %b1 = extractelement <8 x i16> %b, i32 1410  %b2 = extractelement <8 x i16> %b, i32 2411  %b3 = extractelement <8 x i16> %b, i32 3412  %b4 = extractelement <8 x i16> %b, i32 4413  %b5 = extractelement <8 x i16> %b, i32 5414  %b6 = extractelement <8 x i16> %b, i32 6415  %b7 = extractelement <8 x i16> %b, i32 7416  %1 = sdiv i16 %a0, %b0417  %2 = sdiv i16 %a1, %b1418  %3 = sdiv i16 %a2, %b2419  %4 = sdiv i16 %a3, %b3420  %5 = sdiv i16 %a4, %b4421  %6 = sdiv i16 %a5, %b5422  %7 = sdiv i16 %a6, %b6423  %8 = sdiv i16 %a7, %b7424  %r0 = insertelement <8 x i16> poison, i16 %1, i32 0425  %r1 = insertelement <8 x i16> %r0, i16 %2, i32 1426  %r2 = insertelement <8 x i16> %r1, i16 %3, i32 2427  %r3 = insertelement <8 x i16> %r2, i16 %4, i32 3428  %r4 = insertelement <8 x i16> %r3, i16 %5, i32 4429  %r5 = insertelement <8 x i16> %r4, i16 %6, i32 5430  %r6 = insertelement <8 x i16> %r5, i16 %7, i32 6431  %r7 = insertelement <8 x i16> %r6, i16 %8, i32 7432  ret <8 x i16> %r3433}434 435define <4 x i32> @slp_v4i32_Op1_unknown_Op2_const(<4 x i32> %a)436; CHECK-LABEL: define <4 x i32> @slp_v4i32_Op1_unknown_Op2_const(437; CHECK-SAME: <4 x i32> [[A:%.*]]) #[[ATTR0:[0-9]+]] {438; CHECK-NEXT:    [[TMP1:%.*]] = sdiv <4 x i32> [[A]], <i32 1, i32 3, i32 5, i32 7>439; CHECK-NEXT:    ret <4 x i32> [[TMP1]]440;441{442  %a0 = extractelement <4 x i32> %a, i32 0443  %a1 = extractelement <4 x i32> %a, i32 1444  %a2 = extractelement <4 x i32> %a, i32 2445  %a3 = extractelement <4 x i32> %a, i32 3446  %1 = sdiv i32 %a0, 1447  %2 = sdiv i32 %a1, 3448  %3 = sdiv i32 %a2, 5449  %4 = sdiv i32 %a3, 7450  %r0 = insertelement <4 x i32> poison, i32 %1, i32 0451  %r1 = insertelement <4 x i32> %r0, i32 %2, i32 1452  %r2 = insertelement <4 x i32> %r1, i32 %3, i32 2453  %r3 = insertelement <4 x i32> %r2, i32 %4, i32 3454  ret <4 x i32> %r3455}456 457define <4 x i32> @slp_v4i32_Op1_unknown_Op2_uniform_const(<4 x i32> %a)458; CHECK-LABEL: define <4 x i32> @slp_v4i32_Op1_unknown_Op2_uniform_const(459; CHECK-SAME: <4 x i32> [[A:%.*]]) #[[ATTR0]] {460; CHECK-NEXT:    [[TMP1:%.*]] = sdiv <4 x i32> [[A]], splat (i32 5)461; CHECK-NEXT:    ret <4 x i32> [[TMP1]]462;463{464  %a0 = extractelement <4 x i32> %a, i32 0465  %a1 = extractelement <4 x i32> %a, i32 1466  %a2 = extractelement <4 x i32> %a, i32 2467  %a3 = extractelement <4 x i32> %a, i32 3468  %1 = sdiv i32 %a0, 5469  %2 = sdiv i32 %a1, 5470  %3 = sdiv i32 %a2, 5471  %4 = sdiv i32 %a3, 5472  %r0 = insertelement <4 x i32> poison, i32 %1, i32 0473  %r1 = insertelement <4 x i32> %r0, i32 %2, i32 1474  %r2 = insertelement <4 x i32> %r1, i32 %3, i32 2475  %r3 = insertelement <4 x i32> %r2, i32 %4, i32 3476  ret <4 x i32> %r3477}478 479define <4 x i32> @slp_v4i32_Op1_unknown_Op2_uniform_const_pow2(<4 x i32> %a)480; CHECK-LABEL: define <4 x i32> @slp_v4i32_Op1_unknown_Op2_uniform_const_pow2(481; CHECK-SAME: <4 x i32> [[A:%.*]]) #[[ATTR0]] {482; CHECK-NEXT:    [[TMP1:%.*]] = sdiv <4 x i32> [[A]], splat (i32 4)483; CHECK-NEXT:    ret <4 x i32> [[TMP1]]484;485{486  %a0 = extractelement <4 x i32> %a, i32 0487  %a1 = extractelement <4 x i32> %a, i32 1488  %a2 = extractelement <4 x i32> %a, i32 2489  %a3 = extractelement <4 x i32> %a, i32 3490  %1 = sdiv i32 %a0, 4491  %2 = sdiv i32 %a1, 4492  %3 = sdiv i32 %a2, 4493  %4 = sdiv i32 %a3, 4494  %r0 = insertelement <4 x i32> poison, i32 %1, i32 0495  %r1 = insertelement <4 x i32> %r0, i32 %2, i32 1496  %r2 = insertelement <4 x i32> %r1, i32 %3, i32 2497  %r3 = insertelement <4 x i32> %r2, i32 %4, i32 3498  ret <4 x i32> %r3499}500 501define <4 x i32> @slp_v4i32_Op1_unknown_Op2_const_pow2(<4 x i32> %a)502; CHECK-LABEL: define <4 x i32> @slp_v4i32_Op1_unknown_Op2_const_pow2(503; CHECK-SAME: <4 x i32> [[A:%.*]]) #[[ATTR0]] {504; CHECK-NEXT:    [[TMP1:%.*]] = sdiv <4 x i32> [[A]], <i32 1, i32 2, i32 4, i32 8>505; CHECK-NEXT:    ret <4 x i32> [[TMP1]]506;507{508  %a0 = extractelement <4 x i32> %a, i32 0509  %a1 = extractelement <4 x i32> %a, i32 1510  %a2 = extractelement <4 x i32> %a, i32 2511  %a3 = extractelement <4 x i32> %a, i32 3512  %1 = sdiv i32 %a0, 1513  %2 = sdiv i32 %a1, 2514  %3 = sdiv i32 %a2, 4515  %4 = sdiv i32 %a3, 8516  %r0 = insertelement <4 x i32> poison, i32 %1, i32 0517  %r1 = insertelement <4 x i32> %r0, i32 %2, i32 1518  %r2 = insertelement <4 x i32> %r1, i32 %3, i32 2519  %r3 = insertelement <4 x i32> %r2, i32 %4, i32 3520  ret <4 x i32> %r3521}522 523define <2 x i32> @sdiv_v2i32_unknown_divisor(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)524; NO-SVE-LABEL: define <2 x i32> @sdiv_v2i32_unknown_divisor(525; NO-SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {526; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <2 x i32> [[A]], i64 0527; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <2 x i32> [[A]], i64 1528; NO-SVE-NEXT:    [[X0:%.*]] = extractelement <2 x i32> [[X]], i64 0529; NO-SVE-NEXT:    [[X1:%.*]] = extractelement <2 x i32> [[X]], i64 1530; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i32 [[A0]], [[X0]]531; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i32 [[A1]], [[X1]]532; NO-SVE-NEXT:    [[TMP3:%.*]] = add i32 [[TMP1]], [[X0]]533; NO-SVE-NEXT:    [[TMP4:%.*]] = add i32 [[TMP2]], [[X1]]534; NO-SVE-NEXT:    [[Y0:%.*]] = extractelement <2 x i32> [[Y]], i64 0535; NO-SVE-NEXT:    [[Y1:%.*]] = extractelement <2 x i32> [[Y]], i64 1536; NO-SVE-NEXT:    [[TMP5:%.*]] = sub i32 [[TMP3]], [[Y0]]537; NO-SVE-NEXT:    [[TMP6:%.*]] = sub i32 [[TMP4]], [[Y1]]538; NO-SVE-NEXT:    [[Z0:%.*]] = extractelement <2 x i32> [[Z]], i64 0539; NO-SVE-NEXT:    [[Z1:%.*]] = extractelement <2 x i32> [[Z]], i64 1540; NO-SVE-NEXT:    [[TMP7:%.*]] = mul i32 [[TMP5]], [[Z0]]541; NO-SVE-NEXT:    [[TMP8:%.*]] = mul i32 [[TMP6]], [[Z1]]542; NO-SVE-NEXT:    [[RES0:%.*]] = insertelement <2 x i32> poison, i32 [[TMP7]], i32 0543; NO-SVE-NEXT:    [[RES1:%.*]] = insertelement <2 x i32> [[RES0]], i32 [[TMP8]], i32 1544; NO-SVE-NEXT:    ret <2 x i32> [[RES1]]545;546; SVE-LABEL: define <2 x i32> @sdiv_v2i32_unknown_divisor(547; SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {548; SVE-NEXT:    [[TMP2:%.*]] = sdiv <2 x i32> [[A]], [[X]]549; SVE-NEXT:    [[TMP3:%.*]] = add <2 x i32> [[TMP2]], [[X]]550; SVE-NEXT:    [[TMP4:%.*]] = sub <2 x i32> [[TMP3]], [[Y]]551; SVE-NEXT:    [[TMP5:%.*]] = mul <2 x i32> [[TMP4]], [[Z]]552; SVE-NEXT:    ret <2 x i32> [[TMP5]]553;554{555  %a0 = extractelement <2 x i32> %a, i64 0556  %a1 = extractelement <2 x i32> %a, i64 1557  %x0 = extractelement <2 x i32> %x, i64 0558  %x1 = extractelement <2 x i32> %x, i64 1559  %1 = sdiv i32 %a0, %x0560  %2 = sdiv i32 %a1, %x1561  %3 = add i32 %1, %x0562  %4 = add i32 %2, %x1563  %y0 = extractelement <2 x i32> %y, i64 0564  %y1 = extractelement <2 x i32> %y, i64 1565  %5 = sub i32 %3, %y0566  %6 = sub i32 %4, %y1567  %z0 = extractelement <2 x i32> %z, i64 0568  %z1 = extractelement <2 x i32> %z, i64 1569  %7 = mul i32 %5, %z0570  %8 = mul i32 %6, %z1571  %res0 = insertelement <2 x i32> poison, i32 %7, i32 0572  %res1 = insertelement <2 x i32> %res0, i32 %8, i32 1573  ret <2 x i32> %res1574}575 576; computes (a/const + x - y) * z577define <2 x i32> @sdiv_v2i32_const_divisor(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)578; CHECK-LABEL: define <2 x i32> @sdiv_v2i32_const_divisor(579; CHECK-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {580; CHECK-NEXT:    [[TMP1:%.*]] = sdiv <2 x i32> [[A]], <i32 2, i32 4>581; CHECK-NEXT:    [[TMP2:%.*]] = add <2 x i32> [[TMP1]], [[X]]582; CHECK-NEXT:    [[TMP3:%.*]] = sub <2 x i32> [[TMP2]], [[Y]]583; CHECK-NEXT:    [[TMP4:%.*]] = mul <2 x i32> [[TMP3]], [[Z]]584; CHECK-NEXT:    ret <2 x i32> [[TMP4]]585;586{587  %a0 = extractelement <2 x i32> %a, i64 0588  %a1 = extractelement <2 x i32> %a, i64 1589  %1 = sdiv i32 %a0, 2590  %2 = sdiv i32 %a1, 4591  %x0 = extractelement <2 x i32> %x, i64 0592  %x1 = extractelement <2 x i32> %x, i64 1593  %3 = add i32 %1, %x0594  %4 = add i32 %2, %x1595  %y0 = extractelement <2 x i32> %y, i64 0596  %y1 = extractelement <2 x i32> %y, i64 1597  %5 = sub i32 %3, %y0598  %6 = sub i32 %4, %y1599  %z0 = extractelement <2 x i32> %z, i64 0600  %z1 = extractelement <2 x i32> %z, i64 1601  %7 = mul i32 %5, %z0602  %8 = mul i32 %6, %z1603  %res0 = insertelement <2 x i32> poison, i32 %7, i32 0604  %res1 = insertelement <2 x i32> %res0, i32 %8, i32 1605  ret <2 x i32> %res1606}607 608define <2 x i32> @sdiv_v2i32_Op1_unknown_Op2_const(<2 x i32> %a, <2 x i32> %x, <2 x i32> %y, <2 x i32> %z)609; NO-SVE-LABEL: define <2 x i32> @sdiv_v2i32_Op1_unknown_Op2_const(610; NO-SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {611; NO-SVE-NEXT:    [[A0:%.*]] = extractelement <2 x i32> [[A]], i64 0612; NO-SVE-NEXT:    [[A1:%.*]] = extractelement <2 x i32> [[A]], i64 1613; NO-SVE-NEXT:    [[TMP1:%.*]] = sdiv i32 [[A0]], [[A0]]614; NO-SVE-NEXT:    [[TMP2:%.*]] = sdiv i32 [[A1]], 4615; NO-SVE-NEXT:    [[X0:%.*]] = extractelement <2 x i32> [[X]], i64 0616; NO-SVE-NEXT:    [[X1:%.*]] = extractelement <2 x i32> [[X]], i64 1617; NO-SVE-NEXT:    [[TMP3:%.*]] = add i32 [[TMP1]], [[X0]]618; NO-SVE-NEXT:    [[TMP4:%.*]] = add i32 [[TMP2]], [[X1]]619; NO-SVE-NEXT:    [[Y0:%.*]] = extractelement <2 x i32> [[Y]], i64 0620; NO-SVE-NEXT:    [[Y1:%.*]] = extractelement <2 x i32> [[Y]], i64 1621; NO-SVE-NEXT:    [[TMP5:%.*]] = sub i32 [[TMP3]], [[Y0]]622; NO-SVE-NEXT:    [[TMP6:%.*]] = sub i32 [[TMP4]], [[Y1]]623; NO-SVE-NEXT:    [[Z0:%.*]] = extractelement <2 x i32> [[Z]], i64 0624; NO-SVE-NEXT:    [[Z1:%.*]] = extractelement <2 x i32> [[Z]], i64 1625; NO-SVE-NEXT:    [[TMP7:%.*]] = mul i32 [[TMP5]], [[Z0]]626; NO-SVE-NEXT:    [[TMP8:%.*]] = mul i32 [[TMP6]], [[Z1]]627; NO-SVE-NEXT:    [[RES0:%.*]] = insertelement <2 x i32> poison, i32 [[TMP7]], i32 0628; NO-SVE-NEXT:    [[RES1:%.*]] = insertelement <2 x i32> [[RES0]], i32 [[TMP8]], i32 1629; NO-SVE-NEXT:    ret <2 x i32> [[RES1]]630;631; SVE-LABEL: define <2 x i32> @sdiv_v2i32_Op1_unknown_Op2_const(632; SVE-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[X:%.*]], <2 x i32> [[Y:%.*]], <2 x i32> [[Z:%.*]]) #[[ATTR0]] {633; SVE-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i32> [[A]], <2 x i32> <i32 poison, i32 4>, <2 x i32> <i32 0, i32 3>634; SVE-NEXT:    [[TMP2:%.*]] = sdiv <2 x i32> [[A]], [[TMP1]]635; SVE-NEXT:    [[TMP3:%.*]] = add <2 x i32> [[TMP2]], [[X]]636; SVE-NEXT:    [[TMP4:%.*]] = sub <2 x i32> [[TMP3]], [[Y]]637; SVE-NEXT:    [[TMP5:%.*]] = mul <2 x i32> [[TMP4]], [[Z]]638; SVE-NEXT:    ret <2 x i32> [[TMP5]]639;640{641  %a0 = extractelement <2 x i32> %a, i64 0642  %a1 = extractelement <2 x i32> %a, i64 1643  %1 = sdiv i32 %a0, %a0644  %2 = sdiv i32 %a1, 4645  %x0 = extractelement <2 x i32> %x, i64 0646  %x1 = extractelement <2 x i32> %x, i64 1647  %3 = add i32 %1, %x0648  %4 = add i32 %2, %x1649  %y0 = extractelement <2 x i32> %y, i64 0650  %y1 = extractelement <2 x i32> %y, i64 1651  %5 = sub i32 %3, %y0652  %6 = sub i32 %4, %y1653  %z0 = extractelement <2 x i32> %z, i64 0654  %z1 = extractelement <2 x i32> %z, i64 1655  %7 = mul i32 %5, %z0656  %8 = mul i32 %6, %z1657  %res0 = insertelement <2 x i32> poison, i32 %7, i32 0658  %res1 = insertelement <2 x i32> %res0, i32 %8, i32 1659  ret <2 x i32> %res1660}661