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