brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.2 KiB · 3a16051 Raw
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