brintos

brintos / llvm-project-archived public Read only

0
0
Text · 54.2 KiB · 98d193a Raw
1884 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512BW8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512VL9 10define <4 x float> @test_v4f32(ptr %src) {11; SSE2-LABEL: test_v4f32:12; SSE2:       # %bb.0:13; SSE2-NEXT:    movaps (%rdi), %xmm014; SSE2-NEXT:    retq15;16; SSE41-LABEL: test_v4f32:17; SSE41:       # %bb.0:18; SSE41-NEXT:    movntdqa (%rdi), %xmm019; SSE41-NEXT:    retq20;21; AVX-LABEL: test_v4f32:22; AVX:       # %bb.0:23; AVX-NEXT:    vmovntdqa (%rdi), %xmm024; AVX-NEXT:    retq25;26; AVX512-LABEL: test_v4f32:27; AVX512:       # %bb.0:28; AVX512-NEXT:    vmovntdqa (%rdi), %xmm029; AVX512-NEXT:    retq30  %1 = load <4 x float>, ptr %src, align 16, !nontemporal !131  ret <4 x float> %132}33 34define <4 x i32> @test_v4i32(ptr %src) {35; SSE2-LABEL: test_v4i32:36; SSE2:       # %bb.0:37; SSE2-NEXT:    movaps (%rdi), %xmm038; SSE2-NEXT:    retq39;40; SSE41-LABEL: test_v4i32:41; SSE41:       # %bb.0:42; SSE41-NEXT:    movntdqa (%rdi), %xmm043; SSE41-NEXT:    retq44;45; AVX-LABEL: test_v4i32:46; AVX:       # %bb.0:47; AVX-NEXT:    vmovntdqa (%rdi), %xmm048; AVX-NEXT:    retq49;50; AVX512-LABEL: test_v4i32:51; AVX512:       # %bb.0:52; AVX512-NEXT:    vmovntdqa (%rdi), %xmm053; AVX512-NEXT:    retq54  %1 = load <4 x i32>, ptr %src, align 16, !nontemporal !155  ret <4 x i32> %156}57 58define <2 x double> @test_v2f64(ptr %src) {59; SSE2-LABEL: test_v2f64:60; SSE2:       # %bb.0:61; SSE2-NEXT:    movaps (%rdi), %xmm062; SSE2-NEXT:    retq63;64; SSE41-LABEL: test_v2f64:65; SSE41:       # %bb.0:66; SSE41-NEXT:    movntdqa (%rdi), %xmm067; SSE41-NEXT:    retq68;69; AVX-LABEL: test_v2f64:70; AVX:       # %bb.0:71; AVX-NEXT:    vmovntdqa (%rdi), %xmm072; AVX-NEXT:    retq73;74; AVX512-LABEL: test_v2f64:75; AVX512:       # %bb.0:76; AVX512-NEXT:    vmovntdqa (%rdi), %xmm077; AVX512-NEXT:    retq78  %1 = load <2 x double>, ptr %src, align 16, !nontemporal !179  ret <2 x double> %180}81 82define <2 x i64> @test_v2i64(ptr %src) {83; SSE2-LABEL: test_v2i64:84; SSE2:       # %bb.0:85; SSE2-NEXT:    movaps (%rdi), %xmm086; SSE2-NEXT:    retq87;88; SSE41-LABEL: test_v2i64:89; SSE41:       # %bb.0:90; SSE41-NEXT:    movntdqa (%rdi), %xmm091; SSE41-NEXT:    retq92;93; AVX-LABEL: test_v2i64:94; AVX:       # %bb.0:95; AVX-NEXT:    vmovntdqa (%rdi), %xmm096; AVX-NEXT:    retq97;98; AVX512-LABEL: test_v2i64:99; AVX512:       # %bb.0:100; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0101; AVX512-NEXT:    retq102  %1 = load <2 x i64>, ptr %src, align 16, !nontemporal !1103  ret <2 x i64> %1104}105 106define <8 x i16> @test_v8i16(ptr %src) {107; SSE2-LABEL: test_v8i16:108; SSE2:       # %bb.0:109; SSE2-NEXT:    movaps (%rdi), %xmm0110; SSE2-NEXT:    retq111;112; SSE41-LABEL: test_v8i16:113; SSE41:       # %bb.0:114; SSE41-NEXT:    movntdqa (%rdi), %xmm0115; SSE41-NEXT:    retq116;117; AVX-LABEL: test_v8i16:118; AVX:       # %bb.0:119; AVX-NEXT:    vmovntdqa (%rdi), %xmm0120; AVX-NEXT:    retq121;122; AVX512-LABEL: test_v8i16:123; AVX512:       # %bb.0:124; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0125; AVX512-NEXT:    retq126  %1 = load <8 x i16>, ptr %src, align 16, !nontemporal !1127  ret <8 x i16> %1128}129 130define <16 x i8> @test_v16i8(ptr %src) {131; SSE2-LABEL: test_v16i8:132; SSE2:       # %bb.0:133; SSE2-NEXT:    movaps (%rdi), %xmm0134; SSE2-NEXT:    retq135;136; SSE41-LABEL: test_v16i8:137; SSE41:       # %bb.0:138; SSE41-NEXT:    movntdqa (%rdi), %xmm0139; SSE41-NEXT:    retq140;141; AVX-LABEL: test_v16i8:142; AVX:       # %bb.0:143; AVX-NEXT:    vmovntdqa (%rdi), %xmm0144; AVX-NEXT:    retq145;146; AVX512-LABEL: test_v16i8:147; AVX512:       # %bb.0:148; AVX512-NEXT:    vmovntdqa (%rdi), %xmm0149; AVX512-NEXT:    retq150  %1 = load <16 x i8>, ptr %src, align 16, !nontemporal !1151  ret <16 x i8> %1152}153 154; And now YMM versions.155 156define <8 x float> @test_v8f32(ptr %src) {157; SSE2-LABEL: test_v8f32:158; SSE2:       # %bb.0:159; SSE2-NEXT:    movaps (%rdi), %xmm0160; SSE2-NEXT:    movaps 16(%rdi), %xmm1161; SSE2-NEXT:    retq162;163; SSE41-LABEL: test_v8f32:164; SSE41:       # %bb.0:165; SSE41-NEXT:    movntdqa (%rdi), %xmm0166; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1167; SSE41-NEXT:    retq168;169; AVX1-LABEL: test_v8f32:170; AVX1:       # %bb.0:171; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0172; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1173; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0174; AVX1-NEXT:    retq175;176; AVX2-LABEL: test_v8f32:177; AVX2:       # %bb.0:178; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0179; AVX2-NEXT:    retq180;181; AVX512-LABEL: test_v8f32:182; AVX512:       # %bb.0:183; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0184; AVX512-NEXT:    retq185  %1 = load <8 x float>, ptr %src, align 32, !nontemporal !1186  ret <8 x float> %1187}188 189define <8 x i32> @test_v8i32(ptr %src) {190; SSE2-LABEL: test_v8i32:191; SSE2:       # %bb.0:192; SSE2-NEXT:    movaps (%rdi), %xmm0193; SSE2-NEXT:    movaps 16(%rdi), %xmm1194; SSE2-NEXT:    retq195;196; SSE41-LABEL: test_v8i32:197; SSE41:       # %bb.0:198; SSE41-NEXT:    movntdqa (%rdi), %xmm0199; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1200; SSE41-NEXT:    retq201;202; AVX1-LABEL: test_v8i32:203; AVX1:       # %bb.0:204; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0205; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1206; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0207; AVX1-NEXT:    retq208;209; AVX2-LABEL: test_v8i32:210; AVX2:       # %bb.0:211; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0212; AVX2-NEXT:    retq213;214; AVX512-LABEL: test_v8i32:215; AVX512:       # %bb.0:216; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0217; AVX512-NEXT:    retq218  %1 = load <8 x i32>, ptr %src, align 32, !nontemporal !1219  ret <8 x i32> %1220}221 222define <4 x double> @test_v4f64(ptr %src) {223; SSE2-LABEL: test_v4f64:224; SSE2:       # %bb.0:225; SSE2-NEXT:    movaps (%rdi), %xmm0226; SSE2-NEXT:    movaps 16(%rdi), %xmm1227; SSE2-NEXT:    retq228;229; SSE41-LABEL: test_v4f64:230; SSE41:       # %bb.0:231; SSE41-NEXT:    movntdqa (%rdi), %xmm0232; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1233; SSE41-NEXT:    retq234;235; AVX1-LABEL: test_v4f64:236; AVX1:       # %bb.0:237; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0238; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1239; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0240; AVX1-NEXT:    retq241;242; AVX2-LABEL: test_v4f64:243; AVX2:       # %bb.0:244; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0245; AVX2-NEXT:    retq246;247; AVX512-LABEL: test_v4f64:248; AVX512:       # %bb.0:249; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0250; AVX512-NEXT:    retq251  %1 = load <4 x double>, ptr %src, align 32, !nontemporal !1252  ret <4 x double> %1253}254 255define <4 x i64> @test_v4i64(ptr %src) {256; SSE2-LABEL: test_v4i64:257; SSE2:       # %bb.0:258; SSE2-NEXT:    movaps (%rdi), %xmm0259; SSE2-NEXT:    movaps 16(%rdi), %xmm1260; SSE2-NEXT:    retq261;262; SSE41-LABEL: test_v4i64:263; SSE41:       # %bb.0:264; SSE41-NEXT:    movntdqa (%rdi), %xmm0265; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1266; SSE41-NEXT:    retq267;268; AVX1-LABEL: test_v4i64:269; AVX1:       # %bb.0:270; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0271; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1272; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0273; AVX1-NEXT:    retq274;275; AVX2-LABEL: test_v4i64:276; AVX2:       # %bb.0:277; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0278; AVX2-NEXT:    retq279;280; AVX512-LABEL: test_v4i64:281; AVX512:       # %bb.0:282; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0283; AVX512-NEXT:    retq284  %1 = load <4 x i64>, ptr %src, align 32, !nontemporal !1285  ret <4 x i64> %1286}287 288define <16 x i16> @test_v16i16(ptr %src) {289; SSE2-LABEL: test_v16i16:290; SSE2:       # %bb.0:291; SSE2-NEXT:    movaps (%rdi), %xmm0292; SSE2-NEXT:    movaps 16(%rdi), %xmm1293; SSE2-NEXT:    retq294;295; SSE41-LABEL: test_v16i16:296; SSE41:       # %bb.0:297; SSE41-NEXT:    movntdqa (%rdi), %xmm0298; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1299; SSE41-NEXT:    retq300;301; AVX1-LABEL: test_v16i16:302; AVX1:       # %bb.0:303; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0304; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1305; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0306; AVX1-NEXT:    retq307;308; AVX2-LABEL: test_v16i16:309; AVX2:       # %bb.0:310; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0311; AVX2-NEXT:    retq312;313; AVX512-LABEL: test_v16i16:314; AVX512:       # %bb.0:315; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0316; AVX512-NEXT:    retq317  %1 = load <16 x i16>, ptr %src, align 32, !nontemporal !1318  ret <16 x i16> %1319}320 321define <32 x i8> @test_v32i8(ptr %src) {322; SSE2-LABEL: test_v32i8:323; SSE2:       # %bb.0:324; SSE2-NEXT:    movaps (%rdi), %xmm0325; SSE2-NEXT:    movaps 16(%rdi), %xmm1326; SSE2-NEXT:    retq327;328; SSE41-LABEL: test_v32i8:329; SSE41:       # %bb.0:330; SSE41-NEXT:    movntdqa (%rdi), %xmm0331; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1332; SSE41-NEXT:    retq333;334; AVX1-LABEL: test_v32i8:335; AVX1:       # %bb.0:336; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0337; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1338; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0339; AVX1-NEXT:    retq340;341; AVX2-LABEL: test_v32i8:342; AVX2:       # %bb.0:343; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0344; AVX2-NEXT:    retq345;346; AVX512-LABEL: test_v32i8:347; AVX512:       # %bb.0:348; AVX512-NEXT:    vmovntdqa (%rdi), %ymm0349; AVX512-NEXT:    retq350  %1 = load <32 x i8>, ptr %src, align 32, !nontemporal !1351  ret <32 x i8> %1352}353 354; And now ZMM versions.355 356define <16 x float> @test_v16f32(ptr %src) {357; SSE2-LABEL: test_v16f32:358; SSE2:       # %bb.0:359; SSE2-NEXT:    movaps (%rdi), %xmm0360; SSE2-NEXT:    movaps 16(%rdi), %xmm1361; SSE2-NEXT:    movaps 32(%rdi), %xmm2362; SSE2-NEXT:    movaps 48(%rdi), %xmm3363; SSE2-NEXT:    retq364;365; SSE41-LABEL: test_v16f32:366; SSE41:       # %bb.0:367; SSE41-NEXT:    movntdqa (%rdi), %xmm0368; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1369; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2370; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3371; SSE41-NEXT:    retq372;373; AVX1-LABEL: test_v16f32:374; AVX1:       # %bb.0:375; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0376; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1377; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0378; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1379; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2380; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1381; AVX1-NEXT:    retq382;383; AVX2-LABEL: test_v16f32:384; AVX2:       # %bb.0:385; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0386; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1387; AVX2-NEXT:    retq388;389; AVX512-LABEL: test_v16f32:390; AVX512:       # %bb.0:391; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0392; AVX512-NEXT:    retq393  %1 = load <16 x float>, ptr %src, align 64, !nontemporal !1394  ret <16 x float> %1395}396 397define <16 x i32> @test_v16i32(ptr %src) {398; SSE2-LABEL: test_v16i32:399; SSE2:       # %bb.0:400; SSE2-NEXT:    movaps (%rdi), %xmm0401; SSE2-NEXT:    movaps 16(%rdi), %xmm1402; SSE2-NEXT:    movaps 32(%rdi), %xmm2403; SSE2-NEXT:    movaps 48(%rdi), %xmm3404; SSE2-NEXT:    retq405;406; SSE41-LABEL: test_v16i32:407; SSE41:       # %bb.0:408; SSE41-NEXT:    movntdqa (%rdi), %xmm0409; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1410; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2411; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3412; SSE41-NEXT:    retq413;414; AVX1-LABEL: test_v16i32:415; AVX1:       # %bb.0:416; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0417; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1418; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0419; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1420; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2421; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1422; AVX1-NEXT:    retq423;424; AVX2-LABEL: test_v16i32:425; AVX2:       # %bb.0:426; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0427; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1428; AVX2-NEXT:    retq429;430; AVX512-LABEL: test_v16i32:431; AVX512:       # %bb.0:432; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0433; AVX512-NEXT:    retq434  %1 = load <16 x i32>, ptr %src, align 64, !nontemporal !1435  ret <16 x i32> %1436}437 438define <8 x double> @test_v8f64(ptr %src) {439; SSE2-LABEL: test_v8f64:440; SSE2:       # %bb.0:441; SSE2-NEXT:    movaps (%rdi), %xmm0442; SSE2-NEXT:    movaps 16(%rdi), %xmm1443; SSE2-NEXT:    movaps 32(%rdi), %xmm2444; SSE2-NEXT:    movaps 48(%rdi), %xmm3445; SSE2-NEXT:    retq446;447; SSE41-LABEL: test_v8f64:448; SSE41:       # %bb.0:449; SSE41-NEXT:    movntdqa (%rdi), %xmm0450; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1451; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2452; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3453; SSE41-NEXT:    retq454;455; AVX1-LABEL: test_v8f64:456; AVX1:       # %bb.0:457; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0458; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1459; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0460; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1461; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2462; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1463; AVX1-NEXT:    retq464;465; AVX2-LABEL: test_v8f64:466; AVX2:       # %bb.0:467; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0468; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1469; AVX2-NEXT:    retq470;471; AVX512-LABEL: test_v8f64:472; AVX512:       # %bb.0:473; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0474; AVX512-NEXT:    retq475  %1 = load <8 x double>, ptr %src, align 64, !nontemporal !1476  ret <8 x double> %1477}478 479define <8 x i64> @test_v8i64(ptr %src) {480; SSE2-LABEL: test_v8i64:481; SSE2:       # %bb.0:482; SSE2-NEXT:    movaps (%rdi), %xmm0483; SSE2-NEXT:    movaps 16(%rdi), %xmm1484; SSE2-NEXT:    movaps 32(%rdi), %xmm2485; SSE2-NEXT:    movaps 48(%rdi), %xmm3486; SSE2-NEXT:    retq487;488; SSE41-LABEL: test_v8i64:489; SSE41:       # %bb.0:490; SSE41-NEXT:    movntdqa (%rdi), %xmm0491; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1492; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2493; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3494; SSE41-NEXT:    retq495;496; AVX1-LABEL: test_v8i64:497; AVX1:       # %bb.0:498; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0499; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1500; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0501; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1502; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2503; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1504; AVX1-NEXT:    retq505;506; AVX2-LABEL: test_v8i64:507; AVX2:       # %bb.0:508; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0509; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1510; AVX2-NEXT:    retq511;512; AVX512-LABEL: test_v8i64:513; AVX512:       # %bb.0:514; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0515; AVX512-NEXT:    retq516  %1 = load <8 x i64>, ptr %src, align 64, !nontemporal !1517  ret <8 x i64> %1518}519 520define <32 x i16> @test_v32i16(ptr %src) {521; SSE2-LABEL: test_v32i16:522; SSE2:       # %bb.0:523; SSE2-NEXT:    movaps (%rdi), %xmm0524; SSE2-NEXT:    movaps 16(%rdi), %xmm1525; SSE2-NEXT:    movaps 32(%rdi), %xmm2526; SSE2-NEXT:    movaps 48(%rdi), %xmm3527; SSE2-NEXT:    retq528;529; SSE41-LABEL: test_v32i16:530; SSE41:       # %bb.0:531; SSE41-NEXT:    movntdqa (%rdi), %xmm0532; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1533; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2534; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3535; SSE41-NEXT:    retq536;537; AVX1-LABEL: test_v32i16:538; AVX1:       # %bb.0:539; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0540; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1541; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0542; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1543; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2544; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1545; AVX1-NEXT:    retq546;547; AVX2-LABEL: test_v32i16:548; AVX2:       # %bb.0:549; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0550; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1551; AVX2-NEXT:    retq552;553; AVX512-LABEL: test_v32i16:554; AVX512:       # %bb.0:555; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0556; AVX512-NEXT:    retq557  %1 = load <32 x i16>, ptr %src, align 64, !nontemporal !1558  ret <32 x i16> %1559}560 561define <64 x i8> @test_v64i8(ptr %src) {562; SSE2-LABEL: test_v64i8:563; SSE2:       # %bb.0:564; SSE2-NEXT:    movaps (%rdi), %xmm0565; SSE2-NEXT:    movaps 16(%rdi), %xmm1566; SSE2-NEXT:    movaps 32(%rdi), %xmm2567; SSE2-NEXT:    movaps 48(%rdi), %xmm3568; SSE2-NEXT:    retq569;570; SSE41-LABEL: test_v64i8:571; SSE41:       # %bb.0:572; SSE41-NEXT:    movntdqa (%rdi), %xmm0573; SSE41-NEXT:    movntdqa 16(%rdi), %xmm1574; SSE41-NEXT:    movntdqa 32(%rdi), %xmm2575; SSE41-NEXT:    movntdqa 48(%rdi), %xmm3576; SSE41-NEXT:    retq577;578; AVX1-LABEL: test_v64i8:579; AVX1:       # %bb.0:580; AVX1-NEXT:    vmovntdqa (%rdi), %xmm0581; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1582; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0583; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm1584; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm2585; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1586; AVX1-NEXT:    retq587;588; AVX2-LABEL: test_v64i8:589; AVX2:       # %bb.0:590; AVX2-NEXT:    vmovntdqa (%rdi), %ymm0591; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm1592; AVX2-NEXT:    retq593;594; AVX512-LABEL: test_v64i8:595; AVX512:       # %bb.0:596; AVX512-NEXT:    vmovntdqa (%rdi), %zmm0597; AVX512-NEXT:    retq598  %1 = load <64 x i8>, ptr %src, align 64, !nontemporal !1599  ret <64 x i8> %1600}601 602 603; Check cases where the load would be folded.604 605define <4 x float> @test_arg_v4f32(<4 x float> %arg, ptr %src) {606; SSE2-LABEL: test_arg_v4f32:607; SSE2:       # %bb.0:608; SSE2-NEXT:    addps (%rdi), %xmm0609; SSE2-NEXT:    retq610;611; SSE41-LABEL: test_arg_v4f32:612; SSE41:       # %bb.0:613; SSE41-NEXT:    movntdqa (%rdi), %xmm1614; SSE41-NEXT:    addps %xmm1, %xmm0615; SSE41-NEXT:    retq616;617; AVX-LABEL: test_arg_v4f32:618; AVX:       # %bb.0:619; AVX-NEXT:    vmovntdqa (%rdi), %xmm1620; AVX-NEXT:    vaddps %xmm1, %xmm0, %xmm0621; AVX-NEXT:    retq622;623; AVX512-LABEL: test_arg_v4f32:624; AVX512:       # %bb.0:625; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1626; AVX512-NEXT:    vaddps %xmm1, %xmm0, %xmm0627; AVX512-NEXT:    retq628  %1 = load <4 x float>, ptr %src, align 16, !nontemporal !1629  %2 = fadd <4 x float> %arg, %1630  ret <4 x float> %2631}632 633define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, ptr %src) {634; SSE2-LABEL: test_arg_v4i32:635; SSE2:       # %bb.0:636; SSE2-NEXT:    paddd (%rdi), %xmm0637; SSE2-NEXT:    retq638;639; SSE41-LABEL: test_arg_v4i32:640; SSE41:       # %bb.0:641; SSE41-NEXT:    movntdqa (%rdi), %xmm1642; SSE41-NEXT:    paddd %xmm1, %xmm0643; SSE41-NEXT:    retq644;645; AVX-LABEL: test_arg_v4i32:646; AVX:       # %bb.0:647; AVX-NEXT:    vmovntdqa (%rdi), %xmm1648; AVX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0649; AVX-NEXT:    retq650;651; AVX512-LABEL: test_arg_v4i32:652; AVX512:       # %bb.0:653; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1654; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0655; AVX512-NEXT:    retq656  %1 = load <4 x i32>, ptr %src, align 16, !nontemporal !1657  %2 = add <4 x i32> %arg, %1658  ret <4 x i32> %2659}660 661define <2 x double> @test_arg_v2f64(<2 x double> %arg, ptr %src) {662; SSE2-LABEL: test_arg_v2f64:663; SSE2:       # %bb.0:664; SSE2-NEXT:    addpd (%rdi), %xmm0665; SSE2-NEXT:    retq666;667; SSE41-LABEL: test_arg_v2f64:668; SSE41:       # %bb.0:669; SSE41-NEXT:    movntdqa (%rdi), %xmm1670; SSE41-NEXT:    addpd %xmm1, %xmm0671; SSE41-NEXT:    retq672;673; AVX-LABEL: test_arg_v2f64:674; AVX:       # %bb.0:675; AVX-NEXT:    vmovntdqa (%rdi), %xmm1676; AVX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0677; AVX-NEXT:    retq678;679; AVX512-LABEL: test_arg_v2f64:680; AVX512:       # %bb.0:681; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1682; AVX512-NEXT:    vaddpd %xmm1, %xmm0, %xmm0683; AVX512-NEXT:    retq684  %1 = load <2 x double>, ptr %src, align 16, !nontemporal !1685  %2 = fadd <2 x double> %arg, %1686  ret <2 x double> %2687}688 689define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, ptr %src) {690; SSE2-LABEL: test_arg_v2i64:691; SSE2:       # %bb.0:692; SSE2-NEXT:    paddq (%rdi), %xmm0693; SSE2-NEXT:    retq694;695; SSE41-LABEL: test_arg_v2i64:696; SSE41:       # %bb.0:697; SSE41-NEXT:    movntdqa (%rdi), %xmm1698; SSE41-NEXT:    paddq %xmm1, %xmm0699; SSE41-NEXT:    retq700;701; AVX-LABEL: test_arg_v2i64:702; AVX:       # %bb.0:703; AVX-NEXT:    vmovntdqa (%rdi), %xmm1704; AVX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0705; AVX-NEXT:    retq706;707; AVX512-LABEL: test_arg_v2i64:708; AVX512:       # %bb.0:709; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1710; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0711; AVX512-NEXT:    retq712  %1 = load <2 x i64>, ptr %src, align 16, !nontemporal !1713  %2 = add <2 x i64> %arg, %1714  ret <2 x i64> %2715}716 717define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, ptr %src) {718; SSE2-LABEL: test_arg_v8i16:719; SSE2:       # %bb.0:720; SSE2-NEXT:    paddw (%rdi), %xmm0721; SSE2-NEXT:    retq722;723; SSE41-LABEL: test_arg_v8i16:724; SSE41:       # %bb.0:725; SSE41-NEXT:    movntdqa (%rdi), %xmm1726; SSE41-NEXT:    paddw %xmm1, %xmm0727; SSE41-NEXT:    retq728;729; AVX-LABEL: test_arg_v8i16:730; AVX:       # %bb.0:731; AVX-NEXT:    vmovntdqa (%rdi), %xmm1732; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0733; AVX-NEXT:    retq734;735; AVX512-LABEL: test_arg_v8i16:736; AVX512:       # %bb.0:737; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1738; AVX512-NEXT:    vpaddw %xmm1, %xmm0, %xmm0739; AVX512-NEXT:    retq740  %1 = load <8 x i16>, ptr %src, align 16, !nontemporal !1741  %2 = add <8 x i16> %arg, %1742  ret <8 x i16> %2743}744 745define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, ptr %src) {746; SSE2-LABEL: test_arg_v16i8:747; SSE2:       # %bb.0:748; SSE2-NEXT:    paddb (%rdi), %xmm0749; SSE2-NEXT:    retq750;751; SSE41-LABEL: test_arg_v16i8:752; SSE41:       # %bb.0:753; SSE41-NEXT:    movntdqa (%rdi), %xmm1754; SSE41-NEXT:    paddb %xmm1, %xmm0755; SSE41-NEXT:    retq756;757; AVX-LABEL: test_arg_v16i8:758; AVX:       # %bb.0:759; AVX-NEXT:    vmovntdqa (%rdi), %xmm1760; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0761; AVX-NEXT:    retq762;763; AVX512-LABEL: test_arg_v16i8:764; AVX512:       # %bb.0:765; AVX512-NEXT:    vmovntdqa (%rdi), %xmm1766; AVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm0767; AVX512-NEXT:    retq768  %1 = load <16 x i8>, ptr %src, align 16, !nontemporal !1769  %2 = add <16 x i8> %arg, %1770  ret <16 x i8> %2771}772 773; And now YMM versions.774 775define <8 x float> @test_arg_v8f32(<8 x float> %arg, ptr %src) {776; SSE2-LABEL: test_arg_v8f32:777; SSE2:       # %bb.0:778; SSE2-NEXT:    addps (%rdi), %xmm0779; SSE2-NEXT:    addps 16(%rdi), %xmm1780; SSE2-NEXT:    retq781;782; SSE41-LABEL: test_arg_v8f32:783; SSE41:       # %bb.0:784; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2785; SSE41-NEXT:    movntdqa (%rdi), %xmm3786; SSE41-NEXT:    addps %xmm3, %xmm0787; SSE41-NEXT:    addps %xmm2, %xmm1788; SSE41-NEXT:    retq789;790; AVX1-LABEL: test_arg_v8f32:791; AVX1:       # %bb.0:792; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1793; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2794; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1795; AVX1-NEXT:    vaddps %ymm1, %ymm0, %ymm0796; AVX1-NEXT:    retq797;798; AVX2-LABEL: test_arg_v8f32:799; AVX2:       # %bb.0:800; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1801; AVX2-NEXT:    vaddps %ymm1, %ymm0, %ymm0802; AVX2-NEXT:    retq803;804; AVX512-LABEL: test_arg_v8f32:805; AVX512:       # %bb.0:806; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1807; AVX512-NEXT:    vaddps %ymm1, %ymm0, %ymm0808; AVX512-NEXT:    retq809  %1 = load <8 x float>, ptr %src, align 32, !nontemporal !1810  %2 = fadd <8 x float> %arg, %1811  ret <8 x float> %2812}813 814define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, ptr %src) {815; SSE2-LABEL: test_arg_v8i32:816; SSE2:       # %bb.0:817; SSE2-NEXT:    paddd (%rdi), %xmm0818; SSE2-NEXT:    paddd 16(%rdi), %xmm1819; SSE2-NEXT:    retq820;821; SSE41-LABEL: test_arg_v8i32:822; SSE41:       # %bb.0:823; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2824; SSE41-NEXT:    movntdqa (%rdi), %xmm3825; SSE41-NEXT:    paddd %xmm3, %xmm0826; SSE41-NEXT:    paddd %xmm2, %xmm1827; SSE41-NEXT:    retq828;829; AVX1-LABEL: test_arg_v8i32:830; AVX1:       # %bb.0:831; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1832; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2833; AVX1-NEXT:    vpaddd %xmm1, %xmm2, %xmm1834; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2835; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0836; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0837; AVX1-NEXT:    retq838;839; AVX2-LABEL: test_arg_v8i32:840; AVX2:       # %bb.0:841; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1842; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0843; AVX2-NEXT:    retq844;845; AVX512-LABEL: test_arg_v8i32:846; AVX512:       # %bb.0:847; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1848; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0849; AVX512-NEXT:    retq850  %1 = load <8 x i32>, ptr %src, align 32, !nontemporal !1851  %2 = add <8 x i32> %arg, %1852  ret <8 x i32> %2853}854 855define <4 x double> @test_arg_v4f64(<4 x double> %arg, ptr %src) {856; SSE2-LABEL: test_arg_v4f64:857; SSE2:       # %bb.0:858; SSE2-NEXT:    addpd (%rdi), %xmm0859; SSE2-NEXT:    addpd 16(%rdi), %xmm1860; SSE2-NEXT:    retq861;862; SSE41-LABEL: test_arg_v4f64:863; SSE41:       # %bb.0:864; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2865; SSE41-NEXT:    movntdqa (%rdi), %xmm3866; SSE41-NEXT:    addpd %xmm3, %xmm0867; SSE41-NEXT:    addpd %xmm2, %xmm1868; SSE41-NEXT:    retq869;870; AVX1-LABEL: test_arg_v4f64:871; AVX1:       # %bb.0:872; AVX1-NEXT:    vmovntdqa (%rdi), %xmm1873; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm2874; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1875; AVX1-NEXT:    vaddpd %ymm1, %ymm0, %ymm0876; AVX1-NEXT:    retq877;878; AVX2-LABEL: test_arg_v4f64:879; AVX2:       # %bb.0:880; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1881; AVX2-NEXT:    vaddpd %ymm1, %ymm0, %ymm0882; AVX2-NEXT:    retq883;884; AVX512-LABEL: test_arg_v4f64:885; AVX512:       # %bb.0:886; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1887; AVX512-NEXT:    vaddpd %ymm1, %ymm0, %ymm0888; AVX512-NEXT:    retq889  %1 = load <4 x double>, ptr %src, align 32, !nontemporal !1890  %2 = fadd <4 x double> %arg, %1891  ret <4 x double> %2892}893 894define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, ptr %src) {895; SSE2-LABEL: test_arg_v4i64:896; SSE2:       # %bb.0:897; SSE2-NEXT:    paddq (%rdi), %xmm0898; SSE2-NEXT:    paddq 16(%rdi), %xmm1899; SSE2-NEXT:    retq900;901; SSE41-LABEL: test_arg_v4i64:902; SSE41:       # %bb.0:903; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2904; SSE41-NEXT:    movntdqa (%rdi), %xmm3905; SSE41-NEXT:    paddq %xmm3, %xmm0906; SSE41-NEXT:    paddq %xmm2, %xmm1907; SSE41-NEXT:    retq908;909; AVX1-LABEL: test_arg_v4i64:910; AVX1:       # %bb.0:911; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1912; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2913; AVX1-NEXT:    vpaddq %xmm1, %xmm2, %xmm1914; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2915; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0916; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0917; AVX1-NEXT:    retq918;919; AVX2-LABEL: test_arg_v4i64:920; AVX2:       # %bb.0:921; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1922; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0923; AVX2-NEXT:    retq924;925; AVX512-LABEL: test_arg_v4i64:926; AVX512:       # %bb.0:927; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1928; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm0929; AVX512-NEXT:    retq930  %1 = load <4 x i64>, ptr %src, align 32, !nontemporal !1931  %2 = add <4 x i64> %arg, %1932  ret <4 x i64> %2933}934 935define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, ptr %src) {936; SSE2-LABEL: test_arg_v16i16:937; SSE2:       # %bb.0:938; SSE2-NEXT:    paddw (%rdi), %xmm0939; SSE2-NEXT:    paddw 16(%rdi), %xmm1940; SSE2-NEXT:    retq941;942; SSE41-LABEL: test_arg_v16i16:943; SSE41:       # %bb.0:944; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2945; SSE41-NEXT:    movntdqa (%rdi), %xmm3946; SSE41-NEXT:    paddw %xmm3, %xmm0947; SSE41-NEXT:    paddw %xmm2, %xmm1948; SSE41-NEXT:    retq949;950; AVX1-LABEL: test_arg_v16i16:951; AVX1:       # %bb.0:952; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1953; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2954; AVX1-NEXT:    vpaddw %xmm1, %xmm2, %xmm1955; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2956; AVX1-NEXT:    vpaddw %xmm2, %xmm0, %xmm0957; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0958; AVX1-NEXT:    retq959;960; AVX2-LABEL: test_arg_v16i16:961; AVX2:       # %bb.0:962; AVX2-NEXT:    vmovntdqa (%rdi), %ymm1963; AVX2-NEXT:    vpaddw %ymm1, %ymm0, %ymm0964; AVX2-NEXT:    retq965;966; AVX512-LABEL: test_arg_v16i16:967; AVX512:       # %bb.0:968; AVX512-NEXT:    vmovntdqa (%rdi), %ymm1969; AVX512-NEXT:    vpaddw %ymm1, %ymm0, %ymm0970; AVX512-NEXT:    retq971  %1 = load <16 x i16>, ptr %src, align 32, !nontemporal !1972  %2 = add <16 x i16> %arg, %1973  ret <16 x i16> %2974}975 976define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, ptr %src) {977; SSE2-LABEL: test_arg_v32i8:978; SSE2:       # %bb.0:979; SSE2-NEXT:    paddb (%rdi), %xmm0980; SSE2-NEXT:    paddb 16(%rdi), %xmm1981; SSE2-NEXT:    retq982;983; SSE41-LABEL: test_arg_v32i8:984; SSE41:       # %bb.0:985; SSE41-NEXT:    movntdqa 16(%rdi), %xmm2986; SSE41-NEXT:    movntdqa (%rdi), %xmm3987; SSE41-NEXT:    paddb %xmm3, %xmm0988; SSE41-NEXT:    paddb %xmm2, %xmm1989; SSE41-NEXT:    retq990;991; AVX1-LABEL: test_arg_v32i8:992; AVX1:       # %bb.0:993; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm1994; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2995; AVX1-NEXT:    vpaddb %xmm1, %xmm2, %xmm1996; AVX1-NEXT:    vmovntdqa (%rdi), %xmm2997; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0998; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0999; AVX1-NEXT:    retq1000;1001; AVX2-LABEL: test_arg_v32i8:1002; AVX2:       # %bb.0:1003; AVX2-NEXT:    vmovntdqa (%rdi), %ymm11004; AVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm01005; AVX2-NEXT:    retq1006;1007; AVX512-LABEL: test_arg_v32i8:1008; AVX512:       # %bb.0:1009; AVX512-NEXT:    vmovntdqa (%rdi), %ymm11010; AVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm01011; AVX512-NEXT:    retq1012  %1 = load <32 x i8>, ptr %src, align 32, !nontemporal !11013  %2 = add <32 x i8> %arg, %11014  ret <32 x i8> %21015}1016 1017; And now ZMM versions.1018 1019define <16 x float> @test_arg_v16f32(<16 x float> %arg, ptr %src) {1020; SSE2-LABEL: test_arg_v16f32:1021; SSE2:       # %bb.0:1022; SSE2-NEXT:    addps (%rdi), %xmm01023; SSE2-NEXT:    addps 16(%rdi), %xmm11024; SSE2-NEXT:    addps 32(%rdi), %xmm21025; SSE2-NEXT:    addps 48(%rdi), %xmm31026; SSE2-NEXT:    retq1027;1028; SSE41-LABEL: test_arg_v16f32:1029; SSE41:       # %bb.0:1030; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41031; SSE41-NEXT:    movntdqa 32(%rdi), %xmm51032; SSE41-NEXT:    movntdqa 16(%rdi), %xmm61033; SSE41-NEXT:    movntdqa (%rdi), %xmm71034; SSE41-NEXT:    addps %xmm7, %xmm01035; SSE41-NEXT:    addps %xmm6, %xmm11036; SSE41-NEXT:    addps %xmm5, %xmm21037; SSE41-NEXT:    addps %xmm4, %xmm31038; SSE41-NEXT:    retq1039;1040; AVX1-LABEL: test_arg_v16f32:1041; AVX1:       # %bb.0:1042; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm21043; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm31044; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm21045; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31046; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm41047; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31048; AVX1-NEXT:    vaddps %ymm3, %ymm0, %ymm01049; AVX1-NEXT:    vaddps %ymm2, %ymm1, %ymm11050; AVX1-NEXT:    retq1051;1052; AVX2-LABEL: test_arg_v16f32:1053; AVX2:       # %bb.0:1054; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm21055; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31056; AVX2-NEXT:    vaddps %ymm3, %ymm0, %ymm01057; AVX2-NEXT:    vaddps %ymm2, %ymm1, %ymm11058; AVX2-NEXT:    retq1059;1060; AVX512-LABEL: test_arg_v16f32:1061; AVX512:       # %bb.0:1062; AVX512-NEXT:    vmovntdqa (%rdi), %zmm11063; AVX512-NEXT:    vaddps %zmm1, %zmm0, %zmm01064; AVX512-NEXT:    retq1065  %1 = load <16 x float>, ptr %src, align 64, !nontemporal !11066  %2 = fadd <16 x float> %arg, %11067  ret <16 x float> %21068}1069 1070define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, ptr %src) {1071; SSE2-LABEL: test_arg_v16i32:1072; SSE2:       # %bb.0:1073; SSE2-NEXT:    paddd (%rdi), %xmm01074; SSE2-NEXT:    paddd 16(%rdi), %xmm11075; SSE2-NEXT:    paddd 32(%rdi), %xmm21076; SSE2-NEXT:    paddd 48(%rdi), %xmm31077; SSE2-NEXT:    retq1078;1079; SSE41-LABEL: test_arg_v16i32:1080; SSE41:       # %bb.0:1081; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41082; SSE41-NEXT:    movntdqa 32(%rdi), %xmm51083; SSE41-NEXT:    movntdqa 16(%rdi), %xmm61084; SSE41-NEXT:    movntdqa (%rdi), %xmm71085; SSE41-NEXT:    paddd %xmm7, %xmm01086; SSE41-NEXT:    paddd %xmm6, %xmm11087; SSE41-NEXT:    paddd %xmm5, %xmm21088; SSE41-NEXT:    paddd %xmm4, %xmm31089; SSE41-NEXT:    retq1090;1091; AVX1-LABEL: test_arg_v16i32:1092; AVX1:       # %bb.0:1093; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm21094; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31095; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm21096; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31097; AVX1-NEXT:    vpaddd %xmm3, %xmm0, %xmm01098; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01099; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm21100; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31101; AVX1-NEXT:    vpaddd %xmm2, %xmm3, %xmm21102; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm31103; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm11104; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11105; AVX1-NEXT:    retq1106;1107; AVX2-LABEL: test_arg_v16i32:1108; AVX2:       # %bb.0:1109; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm21110; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31111; AVX2-NEXT:    vpaddd %ymm3, %ymm0, %ymm01112; AVX2-NEXT:    vpaddd %ymm2, %ymm1, %ymm11113; AVX2-NEXT:    retq1114;1115; AVX512-LABEL: test_arg_v16i32:1116; AVX512:       # %bb.0:1117; AVX512-NEXT:    vmovntdqa (%rdi), %zmm11118; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm01119; AVX512-NEXT:    retq1120  %1 = load <16 x i32>, ptr %src, align 64, !nontemporal !11121  %2 = add <16 x i32> %arg, %11122  ret <16 x i32> %21123}1124 1125define <8 x double> @test_arg_v8f64(<8 x double> %arg, ptr %src) {1126; SSE2-LABEL: test_arg_v8f64:1127; SSE2:       # %bb.0:1128; SSE2-NEXT:    addpd (%rdi), %xmm01129; SSE2-NEXT:    addpd 16(%rdi), %xmm11130; SSE2-NEXT:    addpd 32(%rdi), %xmm21131; SSE2-NEXT:    addpd 48(%rdi), %xmm31132; SSE2-NEXT:    retq1133;1134; SSE41-LABEL: test_arg_v8f64:1135; SSE41:       # %bb.0:1136; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41137; SSE41-NEXT:    movntdqa 32(%rdi), %xmm51138; SSE41-NEXT:    movntdqa 16(%rdi), %xmm61139; SSE41-NEXT:    movntdqa (%rdi), %xmm71140; SSE41-NEXT:    addpd %xmm7, %xmm01141; SSE41-NEXT:    addpd %xmm6, %xmm11142; SSE41-NEXT:    addpd %xmm5, %xmm21143; SSE41-NEXT:    addpd %xmm4, %xmm31144; SSE41-NEXT:    retq1145;1146; AVX1-LABEL: test_arg_v8f64:1147; AVX1:       # %bb.0:1148; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm21149; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm31150; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm21151; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31152; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm41153; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31154; AVX1-NEXT:    vaddpd %ymm3, %ymm0, %ymm01155; AVX1-NEXT:    vaddpd %ymm2, %ymm1, %ymm11156; AVX1-NEXT:    retq1157;1158; AVX2-LABEL: test_arg_v8f64:1159; AVX2:       # %bb.0:1160; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm21161; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31162; AVX2-NEXT:    vaddpd %ymm3, %ymm0, %ymm01163; AVX2-NEXT:    vaddpd %ymm2, %ymm1, %ymm11164; AVX2-NEXT:    retq1165;1166; AVX512-LABEL: test_arg_v8f64:1167; AVX512:       # %bb.0:1168; AVX512-NEXT:    vmovntdqa (%rdi), %zmm11169; AVX512-NEXT:    vaddpd %zmm1, %zmm0, %zmm01170; AVX512-NEXT:    retq1171  %1 = load <8 x double>, ptr %src, align 64, !nontemporal !11172  %2 = fadd <8 x double> %arg, %11173  ret <8 x double> %21174}1175 1176define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, ptr %src) {1177; SSE2-LABEL: test_arg_v8i64:1178; SSE2:       # %bb.0:1179; SSE2-NEXT:    paddq (%rdi), %xmm01180; SSE2-NEXT:    paddq 16(%rdi), %xmm11181; SSE2-NEXT:    paddq 32(%rdi), %xmm21182; SSE2-NEXT:    paddq 48(%rdi), %xmm31183; SSE2-NEXT:    retq1184;1185; SSE41-LABEL: test_arg_v8i64:1186; SSE41:       # %bb.0:1187; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41188; SSE41-NEXT:    movntdqa 32(%rdi), %xmm51189; SSE41-NEXT:    movntdqa 16(%rdi), %xmm61190; SSE41-NEXT:    movntdqa (%rdi), %xmm71191; SSE41-NEXT:    paddq %xmm7, %xmm01192; SSE41-NEXT:    paddq %xmm6, %xmm11193; SSE41-NEXT:    paddq %xmm5, %xmm21194; SSE41-NEXT:    paddq %xmm4, %xmm31195; SSE41-NEXT:    retq1196;1197; AVX1-LABEL: test_arg_v8i64:1198; AVX1:       # %bb.0:1199; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm21200; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31201; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm21202; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31203; AVX1-NEXT:    vpaddq %xmm3, %xmm0, %xmm01204; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01205; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm21206; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31207; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm21208; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm31209; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm11210; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11211; AVX1-NEXT:    retq1212;1213; AVX2-LABEL: test_arg_v8i64:1214; AVX2:       # %bb.0:1215; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm21216; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31217; AVX2-NEXT:    vpaddq %ymm3, %ymm0, %ymm01218; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm11219; AVX2-NEXT:    retq1220;1221; AVX512-LABEL: test_arg_v8i64:1222; AVX512:       # %bb.0:1223; AVX512-NEXT:    vmovntdqa (%rdi), %zmm11224; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm01225; AVX512-NEXT:    retq1226  %1 = load <8 x i64>, ptr %src, align 64, !nontemporal !11227  %2 = add <8 x i64> %arg, %11228  ret <8 x i64> %21229}1230 1231define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, ptr %src) {1232; SSE2-LABEL: test_arg_v32i16:1233; SSE2:       # %bb.0:1234; SSE2-NEXT:    paddw (%rdi), %xmm01235; SSE2-NEXT:    paddw 16(%rdi), %xmm11236; SSE2-NEXT:    paddw 32(%rdi), %xmm21237; SSE2-NEXT:    paddw 48(%rdi), %xmm31238; SSE2-NEXT:    retq1239;1240; SSE41-LABEL: test_arg_v32i16:1241; SSE41:       # %bb.0:1242; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41243; SSE41-NEXT:    movntdqa 32(%rdi), %xmm51244; SSE41-NEXT:    movntdqa 16(%rdi), %xmm61245; SSE41-NEXT:    movntdqa (%rdi), %xmm71246; SSE41-NEXT:    paddw %xmm7, %xmm01247; SSE41-NEXT:    paddw %xmm6, %xmm11248; SSE41-NEXT:    paddw %xmm5, %xmm21249; SSE41-NEXT:    paddw %xmm4, %xmm31250; SSE41-NEXT:    retq1251;1252; AVX1-LABEL: test_arg_v32i16:1253; AVX1:       # %bb.0:1254; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm21255; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31256; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm21257; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31258; AVX1-NEXT:    vpaddw %xmm3, %xmm0, %xmm01259; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01260; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm21261; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31262; AVX1-NEXT:    vpaddw %xmm2, %xmm3, %xmm21263; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm31264; AVX1-NEXT:    vpaddw %xmm3, %xmm1, %xmm11265; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11266; AVX1-NEXT:    retq1267;1268; AVX2-LABEL: test_arg_v32i16:1269; AVX2:       # %bb.0:1270; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm21271; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31272; AVX2-NEXT:    vpaddw %ymm3, %ymm0, %ymm01273; AVX2-NEXT:    vpaddw %ymm2, %ymm1, %ymm11274; AVX2-NEXT:    retq1275;1276; AVX512F-LABEL: test_arg_v32i16:1277; AVX512F:       # %bb.0:1278; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm11279; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm21280; AVX512F-NEXT:    vpaddw %ymm1, %ymm2, %ymm11281; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm21282; AVX512F-NEXT:    vpaddw %ymm2, %ymm0, %ymm01283; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm01284; AVX512F-NEXT:    retq1285;1286; AVX512BW-LABEL: test_arg_v32i16:1287; AVX512BW:       # %bb.0:1288; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm11289; AVX512BW-NEXT:    vpaddw %zmm1, %zmm0, %zmm01290; AVX512BW-NEXT:    retq1291;1292; AVX512VL-LABEL: test_arg_v32i16:1293; AVX512VL:       # %bb.0:1294; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm11295; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21296; AVX512VL-NEXT:    vpaddw %ymm1, %ymm2, %ymm11297; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm21298; AVX512VL-NEXT:    vpaddw %ymm2, %ymm0, %ymm01299; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm01300; AVX512VL-NEXT:    retq1301  %1 = load <32 x i16>, ptr %src, align 64, !nontemporal !11302  %2 = add <32 x i16> %arg, %11303  ret <32 x i16> %21304}1305 1306define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, ptr %src) {1307; SSE2-LABEL: test_arg_v64i8:1308; SSE2:       # %bb.0:1309; SSE2-NEXT:    paddb (%rdi), %xmm01310; SSE2-NEXT:    paddb 16(%rdi), %xmm11311; SSE2-NEXT:    paddb 32(%rdi), %xmm21312; SSE2-NEXT:    paddb 48(%rdi), %xmm31313; SSE2-NEXT:    retq1314;1315; SSE41-LABEL: test_arg_v64i8:1316; SSE41:       # %bb.0:1317; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41318; SSE41-NEXT:    movntdqa 32(%rdi), %xmm51319; SSE41-NEXT:    movntdqa 16(%rdi), %xmm61320; SSE41-NEXT:    movntdqa (%rdi), %xmm71321; SSE41-NEXT:    paddb %xmm7, %xmm01322; SSE41-NEXT:    paddb %xmm6, %xmm11323; SSE41-NEXT:    paddb %xmm5, %xmm21324; SSE41-NEXT:    paddb %xmm4, %xmm31325; SSE41-NEXT:    retq1326;1327; AVX1-LABEL: test_arg_v64i8:1328; AVX1:       # %bb.0:1329; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm21330; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm31331; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm21332; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31333; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm01334; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm01335; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm21336; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm31337; AVX1-NEXT:    vpaddb %xmm2, %xmm3, %xmm21338; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm31339; AVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm11340; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm11341; AVX1-NEXT:    retq1342;1343; AVX2-LABEL: test_arg_v64i8:1344; AVX2:       # %bb.0:1345; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm21346; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31347; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm01348; AVX2-NEXT:    vpaddb %ymm2, %ymm1, %ymm11349; AVX2-NEXT:    retq1350;1351; AVX512F-LABEL: test_arg_v64i8:1352; AVX512F:       # %bb.0:1353; AVX512F-NEXT:    vmovntdqa 32(%rdi), %ymm11354; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm21355; AVX512F-NEXT:    vpaddb %ymm1, %ymm2, %ymm11356; AVX512F-NEXT:    vmovntdqa (%rdi), %ymm21357; AVX512F-NEXT:    vpaddb %ymm2, %ymm0, %ymm01358; AVX512F-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm01359; AVX512F-NEXT:    retq1360;1361; AVX512BW-LABEL: test_arg_v64i8:1362; AVX512BW:       # %bb.0:1363; AVX512BW-NEXT:    vmovntdqa (%rdi), %zmm11364; AVX512BW-NEXT:    vpaddb %zmm1, %zmm0, %zmm01365; AVX512BW-NEXT:    retq1366;1367; AVX512VL-LABEL: test_arg_v64i8:1368; AVX512VL:       # %bb.0:1369; AVX512VL-NEXT:    vmovntdqa 32(%rdi), %ymm11370; AVX512VL-NEXT:    vextracti64x4 $1, %zmm0, %ymm21371; AVX512VL-NEXT:    vpaddb %ymm1, %ymm2, %ymm11372; AVX512VL-NEXT:    vmovntdqa (%rdi), %ymm21373; AVX512VL-NEXT:    vpaddb %ymm2, %ymm0, %ymm01374; AVX512VL-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm01375; AVX512VL-NEXT:    retq1376  %1 = load <64 x i8>, ptr %src, align 64, !nontemporal !11377  %2 = add <64 x i8> %arg, %11378  ret <64 x i8> %21379}1380 1381 1382; Unaligned non-temporal loads (not supported)1383 1384define <4 x float> @test_unaligned_v4f32(ptr %src) {1385; SSE-LABEL: test_unaligned_v4f32:1386; SSE:       # %bb.0:1387; SSE-NEXT:    movups (%rdi), %xmm01388; SSE-NEXT:    retq1389;1390; AVX-LABEL: test_unaligned_v4f32:1391; AVX:       # %bb.0:1392; AVX-NEXT:    vmovups (%rdi), %xmm01393; AVX-NEXT:    retq1394;1395; AVX512-LABEL: test_unaligned_v4f32:1396; AVX512:       # %bb.0:1397; AVX512-NEXT:    vmovups (%rdi), %xmm01398; AVX512-NEXT:    retq1399  %1 = load <4 x float>, ptr %src, align 1, !nontemporal !11400  ret <4 x float> %11401}1402 1403define <4 x i32> @test_unaligned_v4i32(ptr %src) {1404; SSE-LABEL: test_unaligned_v4i32:1405; SSE:       # %bb.0:1406; SSE-NEXT:    movups (%rdi), %xmm01407; SSE-NEXT:    retq1408;1409; AVX-LABEL: test_unaligned_v4i32:1410; AVX:       # %bb.0:1411; AVX-NEXT:    vmovups (%rdi), %xmm01412; AVX-NEXT:    retq1413;1414; AVX512-LABEL: test_unaligned_v4i32:1415; AVX512:       # %bb.0:1416; AVX512-NEXT:    vmovups (%rdi), %xmm01417; AVX512-NEXT:    retq1418  %1 = load <4 x i32>, ptr %src, align 1, !nontemporal !11419  ret <4 x i32> %11420}1421 1422define <2 x double> @test_unaligned_v2f64(ptr %src) {1423; SSE-LABEL: test_unaligned_v2f64:1424; SSE:       # %bb.0:1425; SSE-NEXT:    movups (%rdi), %xmm01426; SSE-NEXT:    retq1427;1428; AVX-LABEL: test_unaligned_v2f64:1429; AVX:       # %bb.0:1430; AVX-NEXT:    vmovups (%rdi), %xmm01431; AVX-NEXT:    retq1432;1433; AVX512-LABEL: test_unaligned_v2f64:1434; AVX512:       # %bb.0:1435; AVX512-NEXT:    vmovups (%rdi), %xmm01436; AVX512-NEXT:    retq1437  %1 = load <2 x double>, ptr %src, align 1, !nontemporal !11438  ret <2 x double> %11439}1440 1441define <2 x i64> @test_unaligned_v2i64(ptr %src) {1442; SSE-LABEL: test_unaligned_v2i64:1443; SSE:       # %bb.0:1444; SSE-NEXT:    movups (%rdi), %xmm01445; SSE-NEXT:    retq1446;1447; AVX-LABEL: test_unaligned_v2i64:1448; AVX:       # %bb.0:1449; AVX-NEXT:    vmovups (%rdi), %xmm01450; AVX-NEXT:    retq1451;1452; AVX512-LABEL: test_unaligned_v2i64:1453; AVX512:       # %bb.0:1454; AVX512-NEXT:    vmovups (%rdi), %xmm01455; AVX512-NEXT:    retq1456  %1 = load <2 x i64>, ptr %src, align 1, !nontemporal !11457  ret <2 x i64> %11458}1459 1460define <8 x i16> @test_unaligned_v8i16(ptr %src) {1461; SSE-LABEL: test_unaligned_v8i16:1462; SSE:       # %bb.0:1463; SSE-NEXT:    movups (%rdi), %xmm01464; SSE-NEXT:    retq1465;1466; AVX-LABEL: test_unaligned_v8i16:1467; AVX:       # %bb.0:1468; AVX-NEXT:    vmovups (%rdi), %xmm01469; AVX-NEXT:    retq1470;1471; AVX512-LABEL: test_unaligned_v8i16:1472; AVX512:       # %bb.0:1473; AVX512-NEXT:    vmovups (%rdi), %xmm01474; AVX512-NEXT:    retq1475  %1 = load <8 x i16>, ptr %src, align 1, !nontemporal !11476  ret <8 x i16> %11477}1478 1479define <16 x i8> @test_unaligned_v16i8(ptr %src) {1480; SSE-LABEL: test_unaligned_v16i8:1481; SSE:       # %bb.0:1482; SSE-NEXT:    movups (%rdi), %xmm01483; SSE-NEXT:    retq1484;1485; AVX-LABEL: test_unaligned_v16i8:1486; AVX:       # %bb.0:1487; AVX-NEXT:    vmovups (%rdi), %xmm01488; AVX-NEXT:    retq1489;1490; AVX512-LABEL: test_unaligned_v16i8:1491; AVX512:       # %bb.0:1492; AVX512-NEXT:    vmovups (%rdi), %xmm01493; AVX512-NEXT:    retq1494  %1 = load <16 x i8>, ptr %src, align 1, !nontemporal !11495  ret <16 x i8> %11496}1497 1498; And now YMM versions.1499 1500define <8 x float> @test_unaligned_v8f32(ptr %src) {1501; SSE-LABEL: test_unaligned_v8f32:1502; SSE:       # %bb.0:1503; SSE-NEXT:    movups (%rdi), %xmm01504; SSE-NEXT:    movups 16(%rdi), %xmm11505; SSE-NEXT:    retq1506;1507; AVX-LABEL: test_unaligned_v8f32:1508; AVX:       # %bb.0:1509; AVX-NEXT:    vmovups (%rdi), %ymm01510; AVX-NEXT:    retq1511;1512; AVX512-LABEL: test_unaligned_v8f32:1513; AVX512:       # %bb.0:1514; AVX512-NEXT:    vmovups (%rdi), %ymm01515; AVX512-NEXT:    retq1516  %1 = load <8 x float>, ptr %src, align 1, !nontemporal !11517  ret <8 x float> %11518}1519 1520define <8 x i32> @test_unaligned_v8i32(ptr %src) {1521; SSE-LABEL: test_unaligned_v8i32:1522; SSE:       # %bb.0:1523; SSE-NEXT:    movups (%rdi), %xmm01524; SSE-NEXT:    movups 16(%rdi), %xmm11525; SSE-NEXT:    retq1526;1527; AVX-LABEL: test_unaligned_v8i32:1528; AVX:       # %bb.0:1529; AVX-NEXT:    vmovups (%rdi), %ymm01530; AVX-NEXT:    retq1531;1532; AVX512-LABEL: test_unaligned_v8i32:1533; AVX512:       # %bb.0:1534; AVX512-NEXT:    vmovups (%rdi), %ymm01535; AVX512-NEXT:    retq1536  %1 = load <8 x i32>, ptr %src, align 1, !nontemporal !11537  ret <8 x i32> %11538}1539 1540define <4 x double> @test_unaligned_v4f64(ptr %src) {1541; SSE-LABEL: test_unaligned_v4f64:1542; SSE:       # %bb.0:1543; SSE-NEXT:    movups (%rdi), %xmm01544; SSE-NEXT:    movups 16(%rdi), %xmm11545; SSE-NEXT:    retq1546;1547; AVX-LABEL: test_unaligned_v4f64:1548; AVX:       # %bb.0:1549; AVX-NEXT:    vmovups (%rdi), %ymm01550; AVX-NEXT:    retq1551;1552; AVX512-LABEL: test_unaligned_v4f64:1553; AVX512:       # %bb.0:1554; AVX512-NEXT:    vmovups (%rdi), %ymm01555; AVX512-NEXT:    retq1556  %1 = load <4 x double>, ptr %src, align 1, !nontemporal !11557  ret <4 x double> %11558}1559 1560define <4 x i64> @test_unaligned_v4i64(ptr %src) {1561; SSE-LABEL: test_unaligned_v4i64:1562; SSE:       # %bb.0:1563; SSE-NEXT:    movups (%rdi), %xmm01564; SSE-NEXT:    movups 16(%rdi), %xmm11565; SSE-NEXT:    retq1566;1567; AVX-LABEL: test_unaligned_v4i64:1568; AVX:       # %bb.0:1569; AVX-NEXT:    vmovups (%rdi), %ymm01570; AVX-NEXT:    retq1571;1572; AVX512-LABEL: test_unaligned_v4i64:1573; AVX512:       # %bb.0:1574; AVX512-NEXT:    vmovups (%rdi), %ymm01575; AVX512-NEXT:    retq1576  %1 = load <4 x i64>, ptr %src, align 1, !nontemporal !11577  ret <4 x i64> %11578}1579 1580define <16 x i16> @test_unaligned_v16i16(ptr %src) {1581; SSE-LABEL: test_unaligned_v16i16:1582; SSE:       # %bb.0:1583; SSE-NEXT:    movups (%rdi), %xmm01584; SSE-NEXT:    movups 16(%rdi), %xmm11585; SSE-NEXT:    retq1586;1587; AVX-LABEL: test_unaligned_v16i16:1588; AVX:       # %bb.0:1589; AVX-NEXT:    vmovups (%rdi), %ymm01590; AVX-NEXT:    retq1591;1592; AVX512-LABEL: test_unaligned_v16i16:1593; AVX512:       # %bb.0:1594; AVX512-NEXT:    vmovups (%rdi), %ymm01595; AVX512-NEXT:    retq1596  %1 = load <16 x i16>, ptr %src, align 1, !nontemporal !11597  ret <16 x i16> %11598}1599 1600define <32 x i8> @test_unaligned_v32i8(ptr %src) {1601; SSE-LABEL: test_unaligned_v32i8:1602; SSE:       # %bb.0:1603; SSE-NEXT:    movups (%rdi), %xmm01604; SSE-NEXT:    movups 16(%rdi), %xmm11605; SSE-NEXT:    retq1606;1607; AVX-LABEL: test_unaligned_v32i8:1608; AVX:       # %bb.0:1609; AVX-NEXT:    vmovups (%rdi), %ymm01610; AVX-NEXT:    retq1611;1612; AVX512-LABEL: test_unaligned_v32i8:1613; AVX512:       # %bb.0:1614; AVX512-NEXT:    vmovups (%rdi), %ymm01615; AVX512-NEXT:    retq1616  %1 = load <32 x i8>, ptr %src, align 1, !nontemporal !11617  ret <32 x i8> %11618}1619 1620; And now ZMM versions.1621 1622define <16 x float> @test_unaligned_v16f32(ptr %src) {1623; SSE-LABEL: test_unaligned_v16f32:1624; SSE:       # %bb.0:1625; SSE-NEXT:    movups (%rdi), %xmm01626; SSE-NEXT:    movups 16(%rdi), %xmm11627; SSE-NEXT:    movups 32(%rdi), %xmm21628; SSE-NEXT:    movups 48(%rdi), %xmm31629; SSE-NEXT:    retq1630;1631; AVX-LABEL: test_unaligned_v16f32:1632; AVX:       # %bb.0:1633; AVX-NEXT:    vmovups (%rdi), %ymm01634; AVX-NEXT:    vmovups 32(%rdi), %ymm11635; AVX-NEXT:    retq1636;1637; AVX512-LABEL: test_unaligned_v16f32:1638; AVX512:       # %bb.0:1639; AVX512-NEXT:    vmovups (%rdi), %zmm01640; AVX512-NEXT:    retq1641  %1 = load <16 x float>, ptr %src, align 1, !nontemporal !11642  ret <16 x float> %11643}1644 1645define <16 x i32> @test_unaligned_v16i32(ptr %src) {1646; SSE-LABEL: test_unaligned_v16i32:1647; SSE:       # %bb.0:1648; SSE-NEXT:    movups (%rdi), %xmm01649; SSE-NEXT:    movups 16(%rdi), %xmm11650; SSE-NEXT:    movups 32(%rdi), %xmm21651; SSE-NEXT:    movups 48(%rdi), %xmm31652; SSE-NEXT:    retq1653;1654; AVX-LABEL: test_unaligned_v16i32:1655; AVX:       # %bb.0:1656; AVX-NEXT:    vmovups (%rdi), %ymm01657; AVX-NEXT:    vmovups 32(%rdi), %ymm11658; AVX-NEXT:    retq1659;1660; AVX512-LABEL: test_unaligned_v16i32:1661; AVX512:       # %bb.0:1662; AVX512-NEXT:    vmovups (%rdi), %zmm01663; AVX512-NEXT:    retq1664  %1 = load <16 x i32>, ptr %src, align 1, !nontemporal !11665  ret <16 x i32> %11666}1667 1668define <8 x double> @test_unaligned_v8f64(ptr %src) {1669; SSE-LABEL: test_unaligned_v8f64:1670; SSE:       # %bb.0:1671; SSE-NEXT:    movups (%rdi), %xmm01672; SSE-NEXT:    movups 16(%rdi), %xmm11673; SSE-NEXT:    movups 32(%rdi), %xmm21674; SSE-NEXT:    movups 48(%rdi), %xmm31675; SSE-NEXT:    retq1676;1677; AVX-LABEL: test_unaligned_v8f64:1678; AVX:       # %bb.0:1679; AVX-NEXT:    vmovups (%rdi), %ymm01680; AVX-NEXT:    vmovups 32(%rdi), %ymm11681; AVX-NEXT:    retq1682;1683; AVX512-LABEL: test_unaligned_v8f64:1684; AVX512:       # %bb.0:1685; AVX512-NEXT:    vmovups (%rdi), %zmm01686; AVX512-NEXT:    retq1687  %1 = load <8 x double>, ptr %src, align 1, !nontemporal !11688  ret <8 x double> %11689}1690 1691define <8 x i64> @test_unaligned_v8i64(ptr %src) {1692; SSE-LABEL: test_unaligned_v8i64:1693; SSE:       # %bb.0:1694; SSE-NEXT:    movups (%rdi), %xmm01695; SSE-NEXT:    movups 16(%rdi), %xmm11696; SSE-NEXT:    movups 32(%rdi), %xmm21697; SSE-NEXT:    movups 48(%rdi), %xmm31698; SSE-NEXT:    retq1699;1700; AVX-LABEL: test_unaligned_v8i64:1701; AVX:       # %bb.0:1702; AVX-NEXT:    vmovups (%rdi), %ymm01703; AVX-NEXT:    vmovups 32(%rdi), %ymm11704; AVX-NEXT:    retq1705;1706; AVX512-LABEL: test_unaligned_v8i64:1707; AVX512:       # %bb.0:1708; AVX512-NEXT:    vmovups (%rdi), %zmm01709; AVX512-NEXT:    retq1710  %1 = load <8 x i64>, ptr %src, align 1, !nontemporal !11711  ret <8 x i64> %11712}1713 1714define <32 x i16> @test_unaligned_v32i16(ptr %src) {1715; SSE-LABEL: test_unaligned_v32i16:1716; SSE:       # %bb.0:1717; SSE-NEXT:    movups (%rdi), %xmm01718; SSE-NEXT:    movups 16(%rdi), %xmm11719; SSE-NEXT:    movups 32(%rdi), %xmm21720; SSE-NEXT:    movups 48(%rdi), %xmm31721; SSE-NEXT:    retq1722;1723; AVX-LABEL: test_unaligned_v32i16:1724; AVX:       # %bb.0:1725; AVX-NEXT:    vmovups (%rdi), %ymm01726; AVX-NEXT:    vmovups 32(%rdi), %ymm11727; AVX-NEXT:    retq1728;1729; AVX512-LABEL: test_unaligned_v32i16:1730; AVX512:       # %bb.0:1731; AVX512-NEXT:    vmovups (%rdi), %zmm01732; AVX512-NEXT:    retq1733  %1 = load <32 x i16>, ptr %src, align 1, !nontemporal !11734  ret <32 x i16> %11735}1736 1737define <64 x i8> @test_unaligned_v64i8(ptr %src) {1738; SSE-LABEL: test_unaligned_v64i8:1739; SSE:       # %bb.0:1740; SSE-NEXT:    movups (%rdi), %xmm01741; SSE-NEXT:    movups 16(%rdi), %xmm11742; SSE-NEXT:    movups 32(%rdi), %xmm21743; SSE-NEXT:    movups 48(%rdi), %xmm31744; SSE-NEXT:    retq1745;1746; AVX-LABEL: test_unaligned_v64i8:1747; AVX:       # %bb.0:1748; AVX-NEXT:    vmovups (%rdi), %ymm01749; AVX-NEXT:    vmovups 32(%rdi), %ymm11750; AVX-NEXT:    retq1751;1752; AVX512-LABEL: test_unaligned_v64i8:1753; AVX512:       # %bb.0:1754; AVX512-NEXT:    vmovups (%rdi), %zmm01755; AVX512-NEXT:    retq1756  %1 = load <64 x i8>, ptr %src, align 1, !nontemporal !11757  ret <64 x i8> %11758}1759 1760define <16 x i32> @test_masked_v16i32(ptr %addr, <16 x i32> %old, <16 x i32> %mask1) {1761; SSE2-LABEL: test_masked_v16i32:1762; SSE2:       # %bb.0:1763; SSE2-NEXT:    pxor %xmm8, %xmm81764; SSE2-NEXT:    pcmpeqd %xmm8, %xmm71765; SSE2-NEXT:    pcmpeqd %xmm8, %xmm61766; SSE2-NEXT:    pcmpeqd %xmm8, %xmm51767; SSE2-NEXT:    pcmpeqd %xmm4, %xmm81768; SSE2-NEXT:    pand %xmm8, %xmm01769; SSE2-NEXT:    pandn (%rdi), %xmm81770; SSE2-NEXT:    por %xmm8, %xmm01771; SSE2-NEXT:    pand %xmm5, %xmm11772; SSE2-NEXT:    pandn 16(%rdi), %xmm51773; SSE2-NEXT:    por %xmm5, %xmm11774; SSE2-NEXT:    pand %xmm6, %xmm21775; SSE2-NEXT:    pandn 32(%rdi), %xmm61776; SSE2-NEXT:    por %xmm6, %xmm21777; SSE2-NEXT:    pand %xmm7, %xmm31778; SSE2-NEXT:    pandn 48(%rdi), %xmm71779; SSE2-NEXT:    por %xmm7, %xmm31780; SSE2-NEXT:    retq1781;1782; SSE41-LABEL: test_masked_v16i32:1783; SSE41:       # %bb.0:1784; SSE41-NEXT:    movdqa %xmm0, %xmm81785; SSE41-NEXT:    pxor %xmm0, %xmm01786; SSE41-NEXT:    pcmpeqd %xmm0, %xmm71787; SSE41-NEXT:    pcmpeqd %xmm0, %xmm61788; SSE41-NEXT:    pcmpeqd %xmm0, %xmm51789; SSE41-NEXT:    pcmpeqd %xmm4, %xmm01790; SSE41-NEXT:    movntdqa 48(%rdi), %xmm41791; SSE41-NEXT:    movntdqa 32(%rdi), %xmm91792; SSE41-NEXT:    movntdqa 16(%rdi), %xmm101793; SSE41-NEXT:    movntdqa (%rdi), %xmm111794; SSE41-NEXT:    blendvps %xmm0, %xmm8, %xmm111795; SSE41-NEXT:    movdqa %xmm5, %xmm01796; SSE41-NEXT:    blendvps %xmm0, %xmm1, %xmm101797; SSE41-NEXT:    movdqa %xmm6, %xmm01798; SSE41-NEXT:    blendvps %xmm0, %xmm2, %xmm91799; SSE41-NEXT:    movdqa %xmm7, %xmm01800; SSE41-NEXT:    blendvps %xmm0, %xmm3, %xmm41801; SSE41-NEXT:    movaps %xmm11, %xmm01802; SSE41-NEXT:    movaps %xmm10, %xmm11803; SSE41-NEXT:    movaps %xmm9, %xmm21804; SSE41-NEXT:    movaps %xmm4, %xmm31805; SSE41-NEXT:    retq1806;1807; AVX1-LABEL: test_masked_v16i32:1808; AVX1:       # %bb.0:1809; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm41810; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm51811; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm41812; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm3, %xmm31813; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31814; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm41815; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm4, %xmm41816; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm2, %xmm21817; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm2, %ymm21818; AVX1-NEXT:    vmovntdqa 32(%rdi), %xmm41819; AVX1-NEXT:    vmovntdqa 48(%rdi), %xmm51820; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm4, %ymm41821; AVX1-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm11822; AVX1-NEXT:    vmovntdqa (%rdi), %xmm31823; AVX1-NEXT:    vmovntdqa 16(%rdi), %xmm41824; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm3, %ymm31825; AVX1-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm01826; AVX1-NEXT:    retq1827;1828; AVX2-LABEL: test_masked_v16i32:1829; AVX2:       # %bb.0:1830; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm41831; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm3, %ymm31832; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm2, %ymm21833; AVX2-NEXT:    vmovntdqa 32(%rdi), %ymm41834; AVX2-NEXT:    vblendvps %ymm3, %ymm1, %ymm4, %ymm11835; AVX2-NEXT:    vmovntdqa (%rdi), %ymm31836; AVX2-NEXT:    vblendvps %ymm2, %ymm0, %ymm3, %ymm01837; AVX2-NEXT:    retq1838;1839; AVX512-LABEL: test_masked_v16i32:1840; AVX512:       # %bb.0:1841; AVX512-NEXT:    vptestmd %zmm1, %zmm1, %k11842; AVX512-NEXT:    vmovntdqa (%rdi), %zmm11843; AVX512-NEXT:    vmovdqa32 %zmm1, %zmm0 {%k1}1844; AVX512-NEXT:    retq1845  %mask = icmp ne <16 x i32> %mask1, zeroinitializer1846  %r = load <16 x i32>, ptr %addr, align 64, !nontemporal !11847  %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old1848  ret <16 x i32>%res1849}1850 1851; Reduced from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=108951852define i32 @PR39256(ptr %ptr) {1853; SSE-LABEL: PR39256:1854; SSE:       # %bb.0: # %entry1855; SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1856; SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01857; SSE-NEXT:    setb (%rax)1858; SSE-NEXT:    movl $-2147483648, %eax # imm = 0x800000001859; SSE-NEXT:    retq1860;1861; AVX-LABEL: PR39256:1862; AVX:       # %bb.0: # %entry1863; AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1864; AVX-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01865; AVX-NEXT:    setb (%rax)1866; AVX-NEXT:    movl $-2147483648, %eax # imm = 0x800000001867; AVX-NEXT:    retq1868;1869; AVX512-LABEL: PR39256:1870; AVX512:       # %bb.0: # %entry1871; AVX512-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1872; AVX512-NEXT:    vucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01873; AVX512-NEXT:    setb (%rax)1874; AVX512-NEXT:    movl $-2147483648, %eax # imm = 0x800000001875; AVX512-NEXT:    retq1876entry:1877  %l = load float, ptr %ptr, !nontemporal !11878  %C = fcmp ult float %l, 0x36A00000000000001879  store i1 %C, ptr undef1880  ret i32 -21474836481881}1882 1883!1 = !{i32 1}1884