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