brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.9 KiB · 744a509 Raw
440 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX5; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX6; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX7; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -mattr=+avx512bw -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX8 9;10; vXi811;12 13define <2 x i64> @loadext_2i8_to_2i64(ptr %p0) {14; SSE-LABEL: @loadext_2i8_to_2i64(15; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i8>, ptr [[P0:%.*]], align 116; SSE-NEXT:    [[TMP2:%.*]] = sext <2 x i8> [[TMP1]] to <2 x i64>17; SSE-NEXT:    ret <2 x i64> [[TMP2]]18;19; AVX-LABEL: @loadext_2i8_to_2i64(20; AVX-NEXT:    [[TMP2:%.*]] = load <2 x i8>, ptr [[P0:%.*]], align 121; AVX-NEXT:    [[TMP3:%.*]] = sext <2 x i8> [[TMP2]] to <2 x i64>22; AVX-NEXT:    ret <2 x i64> [[TMP3]]23;24  %p1 = getelementptr inbounds i8, ptr %p0, i64 125  %i0 = load i8, ptr %p0, align 126  %i1 = load i8, ptr %p1, align 127  %x0 = sext i8 %i0 to i6428  %x1 = sext i8 %i1 to i6429  %v0 = insertelement <2 x i64> undef, i64 %x0, i32 030  %v1 = insertelement <2 x i64>   %v0, i64 %x1, i32 131  ret <2 x i64> %v132}33 34define <4 x i32> @loadext_4i8_to_4i32(ptr %p0) {35; SSE-LABEL: @loadext_4i8_to_4i32(36; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 137; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i32>38; SSE-NEXT:    ret <4 x i32> [[TMP3]]39;40; AVX-LABEL: @loadext_4i8_to_4i32(41; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 142; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i32>43; AVX-NEXT:    ret <4 x i32> [[TMP3]]44;45  %p1 = getelementptr inbounds i8, ptr %p0, i64 146  %p2 = getelementptr inbounds i8, ptr %p0, i64 247  %p3 = getelementptr inbounds i8, ptr %p0, i64 348  %i0 = load i8, ptr %p0, align 149  %i1 = load i8, ptr %p1, align 150  %i2 = load i8, ptr %p2, align 151  %i3 = load i8, ptr %p3, align 152  %x0 = sext i8 %i0 to i3253  %x1 = sext i8 %i1 to i3254  %x2 = sext i8 %i2 to i3255  %x3 = sext i8 %i3 to i3256  %v0 = insertelement <4 x i32> undef, i32 %x0, i32 057  %v1 = insertelement <4 x i32>   %v0, i32 %x1, i32 158  %v2 = insertelement <4 x i32>   %v1, i32 %x2, i32 259  %v3 = insertelement <4 x i32>   %v2, i32 %x3, i32 360  ret <4 x i32> %v361}62 63define <4 x i64> @loadext_4i8_to_4i64(ptr %p0) {64; SSE-LABEL: @loadext_4i8_to_4i64(65; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 166; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i64>67; SSE-NEXT:    ret <4 x i64> [[TMP3]]68;69; AVX-LABEL: @loadext_4i8_to_4i64(70; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 171; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i64>72; AVX-NEXT:    ret <4 x i64> [[TMP3]]73;74  %p1 = getelementptr inbounds i8, ptr %p0, i64 175  %p2 = getelementptr inbounds i8, ptr %p0, i64 276  %p3 = getelementptr inbounds i8, ptr %p0, i64 377  %i0 = load i8, ptr %p0, align 178  %i1 = load i8, ptr %p1, align 179  %i2 = load i8, ptr %p2, align 180  %i3 = load i8, ptr %p3, align 181  %x0 = sext i8 %i0 to i6482  %x1 = sext i8 %i1 to i6483  %x2 = sext i8 %i2 to i6484  %x3 = sext i8 %i3 to i6485  %v0 = insertelement <4 x i64> undef, i64 %x0, i32 086  %v1 = insertelement <4 x i64>   %v0, i64 %x1, i32 187  %v2 = insertelement <4 x i64>   %v1, i64 %x2, i32 288  %v3 = insertelement <4 x i64>   %v2, i64 %x3, i32 389  ret <4 x i64> %v390}91 92define <8 x i16> @loadext_8i8_to_8i16(ptr %p0) {93; SSE-LABEL: @loadext_8i8_to_8i16(94; SSE-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 195; SSE-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i16>96; SSE-NEXT:    ret <8 x i16> [[TMP3]]97;98; AVX-LABEL: @loadext_8i8_to_8i16(99; AVX-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1100; AVX-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i16>101; AVX-NEXT:    ret <8 x i16> [[TMP3]]102;103  %p1 = getelementptr inbounds i8, ptr %p0, i64 1104  %p2 = getelementptr inbounds i8, ptr %p0, i64 2105  %p3 = getelementptr inbounds i8, ptr %p0, i64 3106  %p4 = getelementptr inbounds i8, ptr %p0, i64 4107  %p5 = getelementptr inbounds i8, ptr %p0, i64 5108  %p6 = getelementptr inbounds i8, ptr %p0, i64 6109  %p7 = getelementptr inbounds i8, ptr %p0, i64 7110  %i0 = load i8, ptr %p0, align 1111  %i1 = load i8, ptr %p1, align 1112  %i2 = load i8, ptr %p2, align 1113  %i3 = load i8, ptr %p3, align 1114  %i4 = load i8, ptr %p4, align 1115  %i5 = load i8, ptr %p5, align 1116  %i6 = load i8, ptr %p6, align 1117  %i7 = load i8, ptr %p7, align 1118  %x0 = sext i8 %i0 to i16119  %x1 = sext i8 %i1 to i16120  %x2 = sext i8 %i2 to i16121  %x3 = sext i8 %i3 to i16122  %x4 = sext i8 %i4 to i16123  %x5 = sext i8 %i5 to i16124  %x6 = sext i8 %i6 to i16125  %x7 = sext i8 %i7 to i16126  %v0 = insertelement <8 x i16> undef, i16 %x0, i32 0127  %v1 = insertelement <8 x i16>   %v0, i16 %x1, i32 1128  %v2 = insertelement <8 x i16>   %v1, i16 %x2, i32 2129  %v3 = insertelement <8 x i16>   %v2, i16 %x3, i32 3130  %v4 = insertelement <8 x i16>   %v3, i16 %x4, i32 4131  %v5 = insertelement <8 x i16>   %v4, i16 %x5, i32 5132  %v6 = insertelement <8 x i16>   %v5, i16 %x6, i32 6133  %v7 = insertelement <8 x i16>   %v6, i16 %x7, i32 7134  ret <8 x i16> %v7135}136 137define <8 x i32> @loadext_8i8_to_8i32(ptr %p0) {138; SSE-LABEL: @loadext_8i8_to_8i32(139; SSE-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1140; SSE-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i32>141; SSE-NEXT:    ret <8 x i32> [[TMP3]]142;143; AVX-LABEL: @loadext_8i8_to_8i32(144; AVX-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1145; AVX-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i32>146; AVX-NEXT:    ret <8 x i32> [[TMP3]]147;148  %p1 = getelementptr inbounds i8, ptr %p0, i64 1149  %p2 = getelementptr inbounds i8, ptr %p0, i64 2150  %p3 = getelementptr inbounds i8, ptr %p0, i64 3151  %p4 = getelementptr inbounds i8, ptr %p0, i64 4152  %p5 = getelementptr inbounds i8, ptr %p0, i64 5153  %p6 = getelementptr inbounds i8, ptr %p0, i64 6154  %p7 = getelementptr inbounds i8, ptr %p0, i64 7155  %i0 = load i8, ptr %p0, align 1156  %i1 = load i8, ptr %p1, align 1157  %i2 = load i8, ptr %p2, align 1158  %i3 = load i8, ptr %p3, align 1159  %i4 = load i8, ptr %p4, align 1160  %i5 = load i8, ptr %p5, align 1161  %i6 = load i8, ptr %p6, align 1162  %i7 = load i8, ptr %p7, align 1163  %x0 = sext i8 %i0 to i32164  %x1 = sext i8 %i1 to i32165  %x2 = sext i8 %i2 to i32166  %x3 = sext i8 %i3 to i32167  %x4 = sext i8 %i4 to i32168  %x5 = sext i8 %i5 to i32169  %x6 = sext i8 %i6 to i32170  %x7 = sext i8 %i7 to i32171  %v0 = insertelement <8 x i32> undef, i32 %x0, i32 0172  %v1 = insertelement <8 x i32>   %v0, i32 %x1, i32 1173  %v2 = insertelement <8 x i32>   %v1, i32 %x2, i32 2174  %v3 = insertelement <8 x i32>   %v2, i32 %x3, i32 3175  %v4 = insertelement <8 x i32>   %v3, i32 %x4, i32 4176  %v5 = insertelement <8 x i32>   %v4, i32 %x5, i32 5177  %v6 = insertelement <8 x i32>   %v5, i32 %x6, i32 6178  %v7 = insertelement <8 x i32>   %v6, i32 %x7, i32 7179  ret <8 x i32> %v7180}181 182define <16 x i16> @loadext_16i8_to_16i16(ptr %p0) {183; SSE-LABEL: @loadext_16i8_to_16i16(184; SSE-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[P0:%.*]], align 1185; SSE-NEXT:    [[TMP3:%.*]] = sext <16 x i8> [[TMP2]] to <16 x i16>186; SSE-NEXT:    ret <16 x i16> [[TMP3]]187;188; AVX-LABEL: @loadext_16i8_to_16i16(189; AVX-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[P0:%.*]], align 1190; AVX-NEXT:    [[TMP3:%.*]] = sext <16 x i8> [[TMP2]] to <16 x i16>191; AVX-NEXT:    ret <16 x i16> [[TMP3]]192;193  %p1  = getelementptr inbounds i8, ptr %p0, i64 1194  %p2  = getelementptr inbounds i8, ptr %p0, i64 2195  %p3  = getelementptr inbounds i8, ptr %p0, i64 3196  %p4  = getelementptr inbounds i8, ptr %p0, i64 4197  %p5  = getelementptr inbounds i8, ptr %p0, i64 5198  %p6  = getelementptr inbounds i8, ptr %p0, i64 6199  %p7  = getelementptr inbounds i8, ptr %p0, i64 7200  %p8  = getelementptr inbounds i8, ptr %p0, i64 8201  %p9  = getelementptr inbounds i8, ptr %p0, i64 9202  %p10 = getelementptr inbounds i8, ptr %p0, i64 10203  %p11 = getelementptr inbounds i8, ptr %p0, i64 11204  %p12 = getelementptr inbounds i8, ptr %p0, i64 12205  %p13 = getelementptr inbounds i8, ptr %p0, i64 13206  %p14 = getelementptr inbounds i8, ptr %p0, i64 14207  %p15 = getelementptr inbounds i8, ptr %p0, i64 15208  %i0  = load i8, ptr %p0,  align 1209  %i1  = load i8, ptr %p1,  align 1210  %i2  = load i8, ptr %p2,  align 1211  %i3  = load i8, ptr %p3,  align 1212  %i4  = load i8, ptr %p4,  align 1213  %i5  = load i8, ptr %p5,  align 1214  %i6  = load i8, ptr %p6,  align 1215  %i7  = load i8, ptr %p7,  align 1216  %i8  = load i8, ptr %p8,  align 1217  %i9  = load i8, ptr %p9,  align 1218  %i10 = load i8, ptr %p10, align 1219  %i11 = load i8, ptr %p11, align 1220  %i12 = load i8, ptr %p12, align 1221  %i13 = load i8, ptr %p13, align 1222  %i14 = load i8, ptr %p14, align 1223  %i15 = load i8, ptr %p15, align 1224  %x0  = sext i8 %i0  to i16225  %x1  = sext i8 %i1  to i16226  %x2  = sext i8 %i2  to i16227  %x3  = sext i8 %i3  to i16228  %x4  = sext i8 %i4  to i16229  %x5  = sext i8 %i5  to i16230  %x6  = sext i8 %i6  to i16231  %x7  = sext i8 %i7  to i16232  %x8  = sext i8 %i8  to i16233  %x9  = sext i8 %i9  to i16234  %x10 = sext i8 %i10 to i16235  %x11 = sext i8 %i11 to i16236  %x12 = sext i8 %i12 to i16237  %x13 = sext i8 %i13 to i16238  %x14 = sext i8 %i14 to i16239  %x15 = sext i8 %i15 to i16240  %v0  = insertelement <16 x i16> undef, i16 %x0,  i32 0241  %v1  = insertelement <16 x i16>  %v0,  i16 %x1,  i32 1242  %v2  = insertelement <16 x i16>  %v1,  i16 %x2,  i32 2243  %v3  = insertelement <16 x i16>  %v2,  i16 %x3,  i32 3244  %v4  = insertelement <16 x i16>  %v3,  i16 %x4,  i32 4245  %v5  = insertelement <16 x i16>  %v4,  i16 %x5,  i32 5246  %v6  = insertelement <16 x i16>  %v5,  i16 %x6,  i32 6247  %v7  = insertelement <16 x i16>  %v6,  i16 %x7,  i32 7248  %v8  = insertelement <16 x i16>  %v7,  i16 %x8,  i32 8249  %v9  = insertelement <16 x i16>  %v8,  i16 %x9,  i32 9250  %v10 = insertelement <16 x i16>  %v9,  i16 %x10, i32 10251  %v11 = insertelement <16 x i16>  %v10, i16 %x11, i32 11252  %v12 = insertelement <16 x i16>  %v11, i16 %x12, i32 12253  %v13 = insertelement <16 x i16>  %v12, i16 %x13, i32 13254  %v14 = insertelement <16 x i16>  %v13, i16 %x14, i32 14255  %v15 = insertelement <16 x i16>  %v14, i16 %x15, i32 15256  ret <16 x i16> %v15257}258 259;260; vXi16261;262 263define <2 x i64> @loadext_2i16_to_2i64(ptr %p0) {264; SSE-LABEL: @loadext_2i16_to_2i64(265; SSE-NEXT:    [[TMP2:%.*]] = load <2 x i16>, ptr [[P0:%.*]], align 1266; SSE-NEXT:    [[TMP3:%.*]] = sext <2 x i16> [[TMP2]] to <2 x i64>267; SSE-NEXT:    ret <2 x i64> [[TMP3]]268;269; AVX-LABEL: @loadext_2i16_to_2i64(270; AVX-NEXT:    [[TMP2:%.*]] = load <2 x i16>, ptr [[P0:%.*]], align 1271; AVX-NEXT:    [[TMP3:%.*]] = sext <2 x i16> [[TMP2]] to <2 x i64>272; AVX-NEXT:    ret <2 x i64> [[TMP3]]273;274  %p1 = getelementptr inbounds i16, ptr %p0, i64 1275  %i0 = load i16, ptr %p0, align 1276  %i1 = load i16, ptr %p1, align 1277  %x0 = sext i16 %i0 to i64278  %x1 = sext i16 %i1 to i64279  %v0 = insertelement <2 x i64> undef, i64 %x0, i32 0280  %v1 = insertelement <2 x i64>   %v0, i64 %x1, i32 1281  ret <2 x i64> %v1282}283 284define <4 x i32> @loadext_4i16_to_4i32(ptr %p0) {285; SSE-LABEL: @loadext_4i16_to_4i32(286; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1287; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i32>288; SSE-NEXT:    ret <4 x i32> [[TMP3]]289;290; AVX-LABEL: @loadext_4i16_to_4i32(291; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1292; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i32>293; AVX-NEXT:    ret <4 x i32> [[TMP3]]294;295  %p1 = getelementptr inbounds i16, ptr %p0, i64 1296  %p2 = getelementptr inbounds i16, ptr %p0, i64 2297  %p3 = getelementptr inbounds i16, ptr %p0, i64 3298  %i0 = load i16, ptr %p0, align 1299  %i1 = load i16, ptr %p1, align 1300  %i2 = load i16, ptr %p2, align 1301  %i3 = load i16, ptr %p3, align 1302  %x0 = sext i16 %i0 to i32303  %x1 = sext i16 %i1 to i32304  %x2 = sext i16 %i2 to i32305  %x3 = sext i16 %i3 to i32306  %v0 = insertelement <4 x i32> undef, i32 %x0, i32 0307  %v1 = insertelement <4 x i32>   %v0, i32 %x1, i32 1308  %v2 = insertelement <4 x i32>   %v1, i32 %x2, i32 2309  %v3 = insertelement <4 x i32>   %v2, i32 %x3, i32 3310  ret <4 x i32> %v3311}312 313define <4 x i64> @loadext_4i16_to_4i64(ptr %p0) {314; SSE-LABEL: @loadext_4i16_to_4i64(315; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1316; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i64>317; SSE-NEXT:    ret <4 x i64> [[TMP3]]318;319; AVX-LABEL: @loadext_4i16_to_4i64(320; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1321; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i64>322; AVX-NEXT:    ret <4 x i64> [[TMP3]]323;324  %p1 = getelementptr inbounds i16, ptr %p0, i64 1325  %p2 = getelementptr inbounds i16, ptr %p0, i64 2326  %p3 = getelementptr inbounds i16, ptr %p0, i64 3327  %i0 = load i16, ptr %p0, align 1328  %i1 = load i16, ptr %p1, align 1329  %i2 = load i16, ptr %p2, align 1330  %i3 = load i16, ptr %p3, align 1331  %x0 = sext i16 %i0 to i64332  %x1 = sext i16 %i1 to i64333  %x2 = sext i16 %i2 to i64334  %x3 = sext i16 %i3 to i64335  %v0 = insertelement <4 x i64> undef, i64 %x0, i32 0336  %v1 = insertelement <4 x i64>   %v0, i64 %x1, i32 1337  %v2 = insertelement <4 x i64>   %v1, i64 %x2, i32 2338  %v3 = insertelement <4 x i64>   %v2, i64 %x3, i32 3339  ret <4 x i64> %v3340}341 342define <8 x i32> @loadext_8i16_to_8i32(ptr %p0) {343; SSE-LABEL: @loadext_8i16_to_8i32(344; SSE-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[P0:%.*]], align 1345; SSE-NEXT:    [[TMP3:%.*]] = sext <8 x i16> [[TMP2]] to <8 x i32>346; SSE-NEXT:    ret <8 x i32> [[TMP3]]347;348; AVX-LABEL: @loadext_8i16_to_8i32(349; AVX-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[P0:%.*]], align 1350; AVX-NEXT:    [[TMP3:%.*]] = sext <8 x i16> [[TMP2]] to <8 x i32>351; AVX-NEXT:    ret <8 x i32> [[TMP3]]352;353  %p1 = getelementptr inbounds i16, ptr %p0, i64 1354  %p2 = getelementptr inbounds i16, ptr %p0, i64 2355  %p3 = getelementptr inbounds i16, ptr %p0, i64 3356  %p4 = getelementptr inbounds i16, ptr %p0, i64 4357  %p5 = getelementptr inbounds i16, ptr %p0, i64 5358  %p6 = getelementptr inbounds i16, ptr %p0, i64 6359  %p7 = getelementptr inbounds i16, ptr %p0, i64 7360  %i0 = load i16, ptr %p0, align 1361  %i1 = load i16, ptr %p1, align 1362  %i2 = load i16, ptr %p2, align 1363  %i3 = load i16, ptr %p3, align 1364  %i4 = load i16, ptr %p4, align 1365  %i5 = load i16, ptr %p5, align 1366  %i6 = load i16, ptr %p6, align 1367  %i7 = load i16, ptr %p7, align 1368  %x0 = sext i16 %i0 to i32369  %x1 = sext i16 %i1 to i32370  %x2 = sext i16 %i2 to i32371  %x3 = sext i16 %i3 to i32372  %x4 = sext i16 %i4 to i32373  %x5 = sext i16 %i5 to i32374  %x6 = sext i16 %i6 to i32375  %x7 = sext i16 %i7 to i32376  %v0 = insertelement <8 x i32> undef, i32 %x0, i32 0377  %v1 = insertelement <8 x i32>   %v0, i32 %x1, i32 1378  %v2 = insertelement <8 x i32>   %v1, i32 %x2, i32 2379  %v3 = insertelement <8 x i32>   %v2, i32 %x3, i32 3380  %v4 = insertelement <8 x i32>   %v3, i32 %x4, i32 4381  %v5 = insertelement <8 x i32>   %v4, i32 %x5, i32 5382  %v6 = insertelement <8 x i32>   %v5, i32 %x6, i32 6383  %v7 = insertelement <8 x i32>   %v6, i32 %x7, i32 7384  ret <8 x i32> %v7385}386 387;388; vXi32389;390 391define <2 x i64> @loadext_2i32_to_2i64(ptr %p0) {392; SSE-LABEL: @loadext_2i32_to_2i64(393; SSE-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[P0:%.*]], align 1394; SSE-NEXT:    [[TMP3:%.*]] = sext <2 x i32> [[TMP2]] to <2 x i64>395; SSE-NEXT:    ret <2 x i64> [[TMP3]]396;397; AVX-LABEL: @loadext_2i32_to_2i64(398; AVX-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[P0:%.*]], align 1399; AVX-NEXT:    [[TMP3:%.*]] = sext <2 x i32> [[TMP2]] to <2 x i64>400; AVX-NEXT:    ret <2 x i64> [[TMP3]]401;402  %p1 = getelementptr inbounds i32, ptr %p0, i64 1403  %i0 = load i32, ptr %p0, align 1404  %i1 = load i32, ptr %p1, align 1405  %x0 = sext i32 %i0 to i64406  %x1 = sext i32 %i1 to i64407  %v0 = insertelement <2 x i64> undef, i64 %x0, i32 0408  %v1 = insertelement <2 x i64>   %v0, i64 %x1, i32 1409  ret <2 x i64> %v1410}411 412define <4 x i64> @loadext_4i32_to_4i64(ptr %p0) {413; SSE-LABEL: @loadext_4i32_to_4i64(414; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[P0:%.*]], align 1415; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i32> [[TMP2]] to <4 x i64>416; SSE-NEXT:    ret <4 x i64> [[TMP3]]417;418; AVX-LABEL: @loadext_4i32_to_4i64(419; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[P0:%.*]], align 1420; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i32> [[TMP2]] to <4 x i64>421; AVX-NEXT:    ret <4 x i64> [[TMP3]]422;423  %p1 = getelementptr inbounds i32, ptr %p0, i64 1424  %p2 = getelementptr inbounds i32, ptr %p0, i64 2425  %p3 = getelementptr inbounds i32, ptr %p0, i64 3426  %i0 = load i32, ptr %p0, align 1427  %i1 = load i32, ptr %p1, align 1428  %i2 = load i32, ptr %p2, align 1429  %i3 = load i32, ptr %p3, align 1430  %x0 = sext i32 %i0 to i64431  %x1 = sext i32 %i1 to i64432  %x2 = sext i32 %i2 to i64433  %x3 = sext i32 %i3 to i64434  %v0 = insertelement <4 x i64> undef, i64 %x0, i32 0435  %v1 = insertelement <4 x i64>   %v0, i64 %x1, i32 1436  %v2 = insertelement <4 x i64>   %v1, i64 %x2, i32 2437  %v3 = insertelement <4 x i64>   %v2, i64 %x3, i32 3438  ret <4 x i64> %v3439}440