495 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S -data-layout="E" | FileCheck %s --check-prefixes=ALL3; RUN: opt < %s -passes=instcombine -S -data-layout="e" | FileCheck %s --check-prefixes=ALL4 5declare void @use(i8)6declare void @use64(i64)7 8define <4 x i16> @low_index_same_length_poison_basevec(i64 %x) {9; ALL-LABEL: @low_index_same_length_poison_basevec(10; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1611; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 012; ALL-NEXT: ret <4 x i16> [[R]]13;14 %t = trunc i64 %x to i1615 %r = insertelement <4 x i16> poison, i16 %t, i64 016 ret <4 x i16> %r17}18 19define <4 x i16> @high_index_same_length_poison_basevec(i64 %x) {20; ALL-LABEL: @high_index_same_length_poison_basevec(21; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1622; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 323; ALL-NEXT: ret <4 x i16> [[R]]24;25 %t = trunc i64 %x to i1626 %r = insertelement <4 x i16> poison, i16 %t, i64 327 ret <4 x i16> %r28}29 30define <4 x i16> @wrong_index_same_length_poison_basevec(i64 %x) {31; ALL-LABEL: @wrong_index_same_length_poison_basevec(32; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1633; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 134; ALL-NEXT: ret <4 x i16> [[R]]35;36 %t = trunc i64 %x to i1637 %r = insertelement <4 x i16> poison, i16 %t, i64 138 ret <4 x i16> %r39}40 41define <8 x i16> @low_index_longer_length_poison_basevec(i64 %x) {42; ALL-LABEL: @low_index_longer_length_poison_basevec(43; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1644; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> poison, i16 [[T]], i64 045; ALL-NEXT: ret <8 x i16> [[R]]46;47 %t = trunc i64 %x to i1648 %r = insertelement <8 x i16> poison, i16 %t, i64 049 ret <8 x i16> %r50}51 52define <8 x i16> @high_index_longer_length_poison_basevec(i64 %x) {53; ALL-LABEL: @high_index_longer_length_poison_basevec(54; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1655; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> poison, i16 [[T]], i64 356; ALL-NEXT: ret <8 x i16> [[R]]57;58 %t = trunc i64 %x to i1659 %r = insertelement <8 x i16> poison, i16 %t, i64 360 ret <8 x i16> %r61}62 63define <8 x i16> @wrong_index_longer_length_poison_basevec(i64 %x) {64; ALL-LABEL: @wrong_index_longer_length_poison_basevec(65; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1666; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> poison, i16 [[T]], i64 767; ALL-NEXT: ret <8 x i16> [[R]]68;69 %t = trunc i64 %x to i1670 %r = insertelement <8 x i16> poison, i16 %t, i64 771 ret <8 x i16> %r72}73 74define <2 x i16> @low_index_shorter_length_poison_basevec(i64 %x) {75; ALL-LABEL: @low_index_shorter_length_poison_basevec(76; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i1677; ALL-NEXT: [[R:%.*]] = insertelement <2 x i16> poison, i16 [[T]], i64 078; ALL-NEXT: ret <2 x i16> [[R]]79;80 %t = trunc i64 %x to i1681 %r = insertelement <2 x i16> poison, i16 %t, i64 082 ret <2 x i16> %r83}84 85define <4 x i8> @wrong_index_shorter_length_poison_basevec(i64 %x) {86; ALL-LABEL: @wrong_index_shorter_length_poison_basevec(87; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i888; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 389; ALL-NEXT: ret <4 x i8> [[R]]90;91 %t = trunc i64 %x to i892 %r = insertelement <4 x i8> poison, i8 %t, i64 393 ret <4 x i8> %r94}95 96define <4 x i8> @wrong_width_low_index_shorter_length_poison_basevec(i65 %x) {97; ALL-LABEL: @wrong_width_low_index_shorter_length_poison_basevec(98; ALL-NEXT: [[T:%.*]] = trunc i65 [[X:%.*]] to i899; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 0100; ALL-NEXT: ret <4 x i8> [[R]]101;102 %t = trunc i65 %x to i8103 %r = insertelement <4 x i8> poison, i8 %t, i64 0104 ret <4 x i8> %r105}106 107define <4 x i8> @low_index_shorter_length_poison_basevec_extra_use(i64 %x) {108; ALL-LABEL: @low_index_shorter_length_poison_basevec_extra_use(109; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i8110; ALL-NEXT: call void @use(i8 [[T]])111; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 0112; ALL-NEXT: ret <4 x i8> [[R]]113;114 %t = trunc i64 %x to i8115 call void @use(i8 %t)116 %r = insertelement <4 x i8> poison, i8 %t, i64 0117 ret <4 x i8> %r118}119 120define <4 x i16> @lshr_same_length_poison_basevec_le(i64 %x) {121; ALL-LABEL: @lshr_same_length_poison_basevec_le(122; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 32123; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16124; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 2125; ALL-NEXT: ret <4 x i16> [[R]]126;127 %s = lshr i64 %x, 32128 %t = trunc i64 %s to i16129 %r = insertelement <4 x i16> poison, i16 %t, i64 2130 ret <4 x i16> %r131}132 133define <4 x i16> @lshr_same_length_poison_basevec_be(i64 %x) {134; ALL-LABEL: @lshr_same_length_poison_basevec_be(135; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 32136; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16137; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 1138; ALL-NEXT: ret <4 x i16> [[R]]139;140 %s = lshr i64 %x, 32141 %t = trunc i64 %s to i16142 %r = insertelement <4 x i16> poison, i16 %t, i64 1143 ret <4 x i16> %r144}145 146define <4 x i16> @lshr_same_length_poison_basevec_both_endian(i64 %x) {147; ALL-LABEL: @lshr_same_length_poison_basevec_both_endian(148; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48149; ALL-NEXT: [[T:%.*]] = trunc nuw i64 [[S]] to i16150; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 0151; ALL-NEXT: ret <4 x i16> [[R]]152;153 %s = lshr i64 %x, 48154 %t = trunc i64 %s to i16155 %r = insertelement <4 x i16> poison, i16 %t, i64 0156 ret <4 x i16> %r157}158 159define <4 x i16> @lshr_wrong_index_same_length_poison_basevec(i64 %x) {160; ALL-LABEL: @lshr_wrong_index_same_length_poison_basevec(161; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48162; ALL-NEXT: [[T:%.*]] = trunc nuw i64 [[S]] to i16163; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> poison, i16 [[T]], i64 1164; ALL-NEXT: ret <4 x i16> [[R]]165;166 %s = lshr i64 %x, 48167 %t = trunc i64 %s to i16168 %r = insertelement <4 x i16> poison, i16 %t, i64 1169 ret <4 x i16> %r170}171 172define <8 x i16> @lshr_longer_length_poison_basevec_le(i64 %x) {173; ALL-LABEL: @lshr_longer_length_poison_basevec_le(174; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48175; ALL-NEXT: [[T:%.*]] = trunc nuw i64 [[S]] to i16176; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> poison, i16 [[T]], i64 3177; ALL-NEXT: ret <8 x i16> [[R]]178;179 %s = lshr i64 %x, 48180 %t = trunc i64 %s to i16181 %r = insertelement <8 x i16> poison, i16 %t, i64 3182 ret <8 x i16> %r183}184 185define <8 x i16> @lshr_longer_length_poison_basevec_be(i64 %x) {186; ALL-LABEL: @lshr_longer_length_poison_basevec_be(187; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 32188; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16189; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> poison, i16 [[T]], i64 1190; ALL-NEXT: ret <8 x i16> [[R]]191;192 %s = lshr i64 %x, 32193 %t = trunc i64 %s to i16194 %r = insertelement <8 x i16> poison, i16 %t, i64 1195 ret <8 x i16> %r196}197 198define <8 x i16> @lshr_wrong_index_longer_length_poison_basevec(i64 %x) {199; ALL-LABEL: @lshr_wrong_index_longer_length_poison_basevec(200; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 16201; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16202; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> poison, i16 [[T]], i64 6203; ALL-NEXT: ret <8 x i16> [[R]]204;205 %s = lshr i64 %x, 16206 %t = trunc i64 %s to i16207 %r = insertelement <8 x i16> poison, i16 %t, i64 6208 ret <8 x i16> %r209}210 211define <2 x i16> @lshr_shorter_length_poison_basevec_le(i64 %x) {212; ALL-LABEL: @lshr_shorter_length_poison_basevec_le(213; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 16214; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16215; ALL-NEXT: [[R:%.*]] = insertelement <2 x i16> poison, i16 [[T]], i64 1216; ALL-NEXT: ret <2 x i16> [[R]]217;218 %s = lshr i64 %x, 16219 %t = trunc i64 %s to i16220 %r = insertelement <2 x i16> poison, i16 %t, i64 1221 ret <2 x i16> %r222}223 224define <4 x i8> @lshr_shorter_length_poison_basevec_be(i64 %x) {225; ALL-LABEL: @lshr_shorter_length_poison_basevec_be(226; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 40227; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i8228; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 2229; ALL-NEXT: ret <4 x i8> [[R]]230;231 %s = lshr i64 %x, 40232 %t = trunc i64 %s to i8233 %r = insertelement <4 x i8> poison, i8 %t, i64 2234 ret <4 x i8> %r235}236 237define <4 x i8> @lshr_wrong_index_shorter_length_poison_basevec(i64 %x) {238; ALL-LABEL: @lshr_wrong_index_shorter_length_poison_basevec(239; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 40240; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i8241; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 3242; ALL-NEXT: ret <4 x i8> [[R]]243;244 %s = lshr i64 %x, 40245 %t = trunc i64 %s to i8246 %r = insertelement <4 x i8> poison, i8 %t, i64 3247 ret <4 x i8> %r248}249 250define <4 x i8> @lshr_wrong_shift_shorter_length_poison_basevec(i64 %x) {251; ALL-LABEL: @lshr_wrong_shift_shorter_length_poison_basevec(252; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 57253; ALL-NEXT: [[T:%.*]] = trunc nuw nsw i64 [[S]] to i8254; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 0255; ALL-NEXT: ret <4 x i8> [[R]]256;257 %s = lshr i64 %x, 57258 %t = trunc i64 %s to i8259 %r = insertelement <4 x i8> poison, i8 %t, i64 0260 ret <4 x i8> %r261}262 263define <4 x i8> @lshr_shorter_length_poison_basevec_be_extra_use(i64 %x) {264; ALL-LABEL: @lshr_shorter_length_poison_basevec_be_extra_use(265; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 40266; ALL-NEXT: call void @use64(i64 [[S]])267; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i8268; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> poison, i8 [[T]], i64 2269; ALL-NEXT: ret <4 x i8> [[R]]270;271 %s = lshr i64 %x, 40272 call void @use64(i64 %s)273 %t = trunc i64 %s to i8274 %r = insertelement <4 x i8> poison, i8 %t, i64 2275 ret <4 x i8> %r276}277 278define <4 x i16> @low_index_same_length_basevec(i64 %x, <4 x i16> %v) {279; ALL-LABEL: @low_index_same_length_basevec(280; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16281; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 0282; ALL-NEXT: ret <4 x i16> [[R]]283;284 %t = trunc i64 %x to i16285 %r = insertelement <4 x i16> %v, i16 %t, i64 0286 ret <4 x i16> %r287}288 289define <4 x i16> @high_index_same_length_basevec(i64 %x, <4 x i16> %v) {290; ALL-LABEL: @high_index_same_length_basevec(291; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16292; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 3293; ALL-NEXT: ret <4 x i16> [[R]]294;295 %t = trunc i64 %x to i16296 %r = insertelement <4 x i16> %v, i16 %t, i64 3297 ret <4 x i16> %r298}299 300define <4 x i16> @wrong_index_same_length_basevec(i64 %x, <4 x i16> %v) {301; ALL-LABEL: @wrong_index_same_length_basevec(302; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16303; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 1304; ALL-NEXT: ret <4 x i16> [[R]]305;306 %t = trunc i64 %x to i16307 %r = insertelement <4 x i16> %v, i16 %t, i64 1308 ret <4 x i16> %r309}310 311define <8 x i16> @low_index_longer_length_basevec(i64 %x, <8 x i16> %v) {312; ALL-LABEL: @low_index_longer_length_basevec(313; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16314; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> [[V:%.*]], i16 [[T]], i64 0315; ALL-NEXT: ret <8 x i16> [[R]]316;317 %t = trunc i64 %x to i16318 %r = insertelement <8 x i16> %v, i16 %t, i64 0319 ret <8 x i16> %r320}321 322define <8 x i16> @high_index_longer_length_basevec(i64 %x, <8 x i16> %v) {323; ALL-LABEL: @high_index_longer_length_basevec(324; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16325; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> [[V:%.*]], i16 [[T]], i64 3326; ALL-NEXT: ret <8 x i16> [[R]]327;328 %t = trunc i64 %x to i16329 %r = insertelement <8 x i16> %v, i16 %t, i64 3330 ret <8 x i16> %r331}332 333define <8 x i16> @wrong_index_longer_length_basevec(i64 %x, <8 x i16> %v) {334; ALL-LABEL: @wrong_index_longer_length_basevec(335; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16336; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> [[V:%.*]], i16 [[T]], i64 7337; ALL-NEXT: ret <8 x i16> [[R]]338;339 %t = trunc i64 %x to i16340 %r = insertelement <8 x i16> %v, i16 %t, i64 7341 ret <8 x i16> %r342}343 344define <2 x i16> @low_index_shorter_length_basevec(i64 %x, <2 x i16> %v) {345; ALL-LABEL: @low_index_shorter_length_basevec(346; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i16347; ALL-NEXT: [[R:%.*]] = insertelement <2 x i16> [[V:%.*]], i16 [[T]], i64 0348; ALL-NEXT: ret <2 x i16> [[R]]349;350 %t = trunc i64 %x to i16351 %r = insertelement <2 x i16> %v, i16 %t, i64 0352 ret <2 x i16> %r353}354 355define <4 x i8> @wrong_index_shorter_length_basevec(i64 %x, <4 x i8> %v) {356; ALL-LABEL: @wrong_index_shorter_length_basevec(357; ALL-NEXT: [[T:%.*]] = trunc i64 [[X:%.*]] to i8358; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> [[V:%.*]], i8 [[T]], i64 3359; ALL-NEXT: ret <4 x i8> [[R]]360;361 %t = trunc i64 %x to i8362 %r = insertelement <4 x i8> %v, i8 %t, i64 3363 ret <4 x i8> %r364}365 366define <4 x i16> @lshr_same_length_basevec_le(i64 %x, <4 x i16> %v) {367; ALL-LABEL: @lshr_same_length_basevec_le(368; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 32369; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16370; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 2371; ALL-NEXT: ret <4 x i16> [[R]]372;373 %s = lshr i64 %x, 32374 %t = trunc i64 %s to i16375 %r = insertelement <4 x i16> %v, i16 %t, i64 2376 ret <4 x i16> %r377}378 379define <4 x i16> @lshr_same_length_basevec_be(i64 %x, <4 x i16> %v) {380; ALL-LABEL: @lshr_same_length_basevec_be(381; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 32382; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16383; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 1384; ALL-NEXT: ret <4 x i16> [[R]]385;386 %s = lshr i64 %x, 32387 %t = trunc i64 %s to i16388 %r = insertelement <4 x i16> %v, i16 %t, i64 1389 ret <4 x i16> %r390}391 392define <4 x i16> @lshr_same_length_basevec_both_endian(i64 %x, <4 x i16> %v) {393; ALL-LABEL: @lshr_same_length_basevec_both_endian(394; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48395; ALL-NEXT: [[T:%.*]] = trunc nuw i64 [[S]] to i16396; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 3397; ALL-NEXT: ret <4 x i16> [[R]]398;399 %s = lshr i64 %x, 48400 %t = trunc i64 %s to i16401 %r = insertelement <4 x i16> %v, i16 %t, i64 3402 ret <4 x i16> %r403}404 405define <4 x i16> @lshr_wrong_index_same_length_basevec(i64 %x, <4 x i16> %v) {406; ALL-LABEL: @lshr_wrong_index_same_length_basevec(407; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48408; ALL-NEXT: [[T:%.*]] = trunc nuw i64 [[S]] to i16409; ALL-NEXT: [[R:%.*]] = insertelement <4 x i16> [[V:%.*]], i16 [[T]], i64 1410; ALL-NEXT: ret <4 x i16> [[R]]411;412 %s = lshr i64 %x, 48413 %t = trunc i64 %s to i16414 %r = insertelement <4 x i16> %v, i16 %t, i64 1415 ret <4 x i16> %r416}417 418define <8 x i16> @lshr_longer_length_basevec_le(i64 %x, <8 x i16> %v) {419; ALL-LABEL: @lshr_longer_length_basevec_le(420; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48421; ALL-NEXT: [[T:%.*]] = trunc nuw i64 [[S]] to i16422; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> [[V:%.*]], i16 [[T]], i64 3423; ALL-NEXT: ret <8 x i16> [[R]]424;425 %s = lshr i64 %x, 48426 %t = trunc i64 %s to i16427 %r = insertelement <8 x i16> %v, i16 %t, i64 3428 ret <8 x i16> %r429}430 431define <8 x i16> @lshr_longer_length_basevec_be(i64 %x, <8 x i16> %v) {432; ALL-LABEL: @lshr_longer_length_basevec_be(433; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 32434; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16435; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> [[V:%.*]], i16 [[T]], i64 1436; ALL-NEXT: ret <8 x i16> [[R]]437;438 %s = lshr i64 %x, 32439 %t = trunc i64 %s to i16440 %r = insertelement <8 x i16> %v, i16 %t, i64 1441 ret <8 x i16> %r442}443 444define <8 x i16> @lshr_wrong_index_longer_length_basevec(i64 %x, <8 x i16> %v) {445; ALL-LABEL: @lshr_wrong_index_longer_length_basevec(446; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 16447; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16448; ALL-NEXT: [[R:%.*]] = insertelement <8 x i16> [[V:%.*]], i16 [[T]], i64 6449; ALL-NEXT: ret <8 x i16> [[R]]450;451 %s = lshr i64 %x, 16452 %t = trunc i64 %s to i16453 %r = insertelement <8 x i16> %v, i16 %t, i64 6454 ret <8 x i16> %r455}456 457define <2 x i16> @lshr_shorter_length_basevec_le(i64 %x, <2 x i16> %v) {458; ALL-LABEL: @lshr_shorter_length_basevec_le(459; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 16460; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i16461; ALL-NEXT: [[R:%.*]] = insertelement <2 x i16> [[V:%.*]], i16 [[T]], i64 1462; ALL-NEXT: ret <2 x i16> [[R]]463;464 %s = lshr i64 %x, 16465 %t = trunc i64 %s to i16466 %r = insertelement <2 x i16> %v, i16 %t, i64 1467 ret <2 x i16> %r468}469 470define <4 x i8> @lshr_shorter_length_basevec_be(i64 %x, <4 x i8> %v) {471; ALL-LABEL: @lshr_shorter_length_basevec_be(472; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 48473; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i8474; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> [[V:%.*]], i8 [[T]], i64 1475; ALL-NEXT: ret <4 x i8> [[R]]476;477 %s = lshr i64 %x, 48478 %t = trunc i64 %s to i8479 %r = insertelement <4 x i8> %v, i8 %t, i64 1480 ret <4 x i8> %r481}482 483define <4 x i8> @lshr_wrong_index_shorter_length_basevec(i64 %x, <4 x i8> %v) {484; ALL-LABEL: @lshr_wrong_index_shorter_length_basevec(485; ALL-NEXT: [[S:%.*]] = lshr i64 [[X:%.*]], 40486; ALL-NEXT: [[T:%.*]] = trunc i64 [[S]] to i8487; ALL-NEXT: [[R:%.*]] = insertelement <4 x i8> [[V:%.*]], i8 [[T]], i64 3488; ALL-NEXT: ret <4 x i8> [[R]]489;490 %s = lshr i64 %x, 40491 %t = trunc i64 %s to i8492 %r = insertelement <4 x i8> %v, i8 %t, i64 3493 ret <4 x i8> %r494}495