1311 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse2 -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,SSE,SSE23; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse4a -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,SSE,SSE4A4; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+sse4.1 -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,SSE,SSE415; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX,AVX16; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx2 -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX,AVX27; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512vl -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX5128; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512f -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX5129; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+mmx,+avx512bw -fast-isel -O0 | FileCheck %s --check-prefixes=ALL,AVX51210 11;12; Scalar Stores13;14 15define void @test_nti32(ptr nocapture %ptr, i32 %X) {16; ALL-LABEL: test_nti32:17; ALL: # %bb.0: # %entry18; ALL-NEXT: movntil %esi, (%rdi)19; ALL-NEXT: retq20entry:21 store i32 %X, ptr %ptr, align 4, !nontemporal !122 ret void23}24 25define void @test_nti64(ptr nocapture %ptr, i64 %X) {26; ALL-LABEL: test_nti64:27; ALL: # %bb.0: # %entry28; ALL-NEXT: movntiq %rsi, (%rdi)29; ALL-NEXT: retq30entry:31 store i64 %X, ptr %ptr, align 8, !nontemporal !132 ret void33}34 35define void @test_ntfloat(ptr nocapture %ptr, float %X) {36; SSE2-LABEL: test_ntfloat:37; SSE2: # %bb.0: # %entry38; SSE2-NEXT: movss %xmm0, (%rdi)39; SSE2-NEXT: retq40;41; SSE4A-LABEL: test_ntfloat:42; SSE4A: # %bb.0: # %entry43; SSE4A-NEXT: movntss %xmm0, (%rdi)44; SSE4A-NEXT: retq45;46; SSE41-LABEL: test_ntfloat:47; SSE41: # %bb.0: # %entry48; SSE41-NEXT: movss %xmm0, (%rdi)49; SSE41-NEXT: retq50;51; AVX-LABEL: test_ntfloat:52; AVX: # %bb.0: # %entry53; AVX-NEXT: vmovss %xmm0, (%rdi)54; AVX-NEXT: retq55;56; AVX512-LABEL: test_ntfloat:57; AVX512: # %bb.0: # %entry58; AVX512-NEXT: vmovss %xmm0, (%rdi)59; AVX512-NEXT: retq60entry:61 store float %X, ptr %ptr, align 4, !nontemporal !162 ret void63}64 65define void @test_ntdouble(ptr nocapture %ptr, double %X) {66; SSE2-LABEL: test_ntdouble:67; SSE2: # %bb.0: # %entry68; SSE2-NEXT: movsd %xmm0, (%rdi)69; SSE2-NEXT: retq70;71; SSE4A-LABEL: test_ntdouble:72; SSE4A: # %bb.0: # %entry73; SSE4A-NEXT: movntsd %xmm0, (%rdi)74; SSE4A-NEXT: retq75;76; SSE41-LABEL: test_ntdouble:77; SSE41: # %bb.0: # %entry78; SSE41-NEXT: movsd %xmm0, (%rdi)79; SSE41-NEXT: retq80;81; AVX-LABEL: test_ntdouble:82; AVX: # %bb.0: # %entry83; AVX-NEXT: vmovsd %xmm0, (%rdi)84; AVX-NEXT: retq85;86; AVX512-LABEL: test_ntdouble:87; AVX512: # %bb.0: # %entry88; AVX512-NEXT: vmovsd %xmm0, (%rdi)89; AVX512-NEXT: retq90entry:91 store double %X, ptr %ptr, align 8, !nontemporal !192 ret void93}94 95;96; MMX Store97;98 99define void @test_mmx(ptr nocapture %a0, ptr nocapture %a1) {100; ALL-LABEL: test_mmx:101; ALL: # %bb.0: # %entry102; ALL-NEXT: movq (%rdi), %mm0103; ALL-NEXT: psrlq $3, %mm0104; ALL-NEXT: movntq %mm0, (%rsi)105; ALL-NEXT: retq106entry:107 %0 = load <1 x i64>, ptr %a0108 %1 = call <1 x i64> @llvm.x86.mmx.psrli.q(<1 x i64> %0, i32 3)109 store <1 x i64> %1, ptr %a1, align 8, !nontemporal !1110 ret void111}112declare <1 x i64> @llvm.x86.mmx.psrli.q(<1 x i64>, i32) nounwind readnone113 114;115; 128-bit Vector Stores116;117 118define void @test_nt4xfloat(ptr nocapture %ptr, <4 x float> %X) {119; SSE-LABEL: test_nt4xfloat:120; SSE: # %bb.0: # %entry121; SSE-NEXT: movntps %xmm0, (%rdi)122; SSE-NEXT: retq123;124; AVX-LABEL: test_nt4xfloat:125; AVX: # %bb.0: # %entry126; AVX-NEXT: vmovntps %xmm0, (%rdi)127; AVX-NEXT: retq128;129; AVX512-LABEL: test_nt4xfloat:130; AVX512: # %bb.0: # %entry131; AVX512-NEXT: vmovntps %xmm0, (%rdi)132; AVX512-NEXT: retq133entry:134 store <4 x float> %X, ptr %ptr, align 16, !nontemporal !1135 ret void136}137 138define void @test_nt2xdouble(ptr nocapture %ptr, <2 x double> %X) {139; SSE-LABEL: test_nt2xdouble:140; SSE: # %bb.0: # %entry141; SSE-NEXT: movntpd %xmm0, (%rdi)142; SSE-NEXT: retq143;144; AVX-LABEL: test_nt2xdouble:145; AVX: # %bb.0: # %entry146; AVX-NEXT: vmovntpd %xmm0, (%rdi)147; AVX-NEXT: retq148;149; AVX512-LABEL: test_nt2xdouble:150; AVX512: # %bb.0: # %entry151; AVX512-NEXT: vmovntpd %xmm0, (%rdi)152; AVX512-NEXT: retq153entry:154 store <2 x double> %X, ptr %ptr, align 16, !nontemporal !1155 ret void156}157 158define void @test_nt16xi8(ptr nocapture %ptr, <16 x i8> %X) {159; SSE-LABEL: test_nt16xi8:160; SSE: # %bb.0: # %entry161; SSE-NEXT: movntdq %xmm0, (%rdi)162; SSE-NEXT: retq163;164; AVX-LABEL: test_nt16xi8:165; AVX: # %bb.0: # %entry166; AVX-NEXT: vmovntdq %xmm0, (%rdi)167; AVX-NEXT: retq168;169; AVX512-LABEL: test_nt16xi8:170; AVX512: # %bb.0: # %entry171; AVX512-NEXT: vmovntdq %xmm0, (%rdi)172; AVX512-NEXT: retq173entry:174 store <16 x i8> %X, ptr %ptr, align 16, !nontemporal !1175 ret void176}177 178define void @test_nt8xi16(ptr nocapture %ptr, <8 x i16> %X) {179; SSE-LABEL: test_nt8xi16:180; SSE: # %bb.0: # %entry181; SSE-NEXT: movntdq %xmm0, (%rdi)182; SSE-NEXT: retq183;184; AVX-LABEL: test_nt8xi16:185; AVX: # %bb.0: # %entry186; AVX-NEXT: vmovntdq %xmm0, (%rdi)187; AVX-NEXT: retq188;189; AVX512-LABEL: test_nt8xi16:190; AVX512: # %bb.0: # %entry191; AVX512-NEXT: vmovntdq %xmm0, (%rdi)192; AVX512-NEXT: retq193entry:194 store <8 x i16> %X, ptr %ptr, align 16, !nontemporal !1195 ret void196}197 198define void @test_nt4xi32(ptr nocapture %ptr, <4 x i32> %X) {199; SSE-LABEL: test_nt4xi32:200; SSE: # %bb.0: # %entry201; SSE-NEXT: movntdq %xmm0, (%rdi)202; SSE-NEXT: retq203;204; AVX-LABEL: test_nt4xi32:205; AVX: # %bb.0: # %entry206; AVX-NEXT: vmovntdq %xmm0, (%rdi)207; AVX-NEXT: retq208;209; AVX512-LABEL: test_nt4xi32:210; AVX512: # %bb.0: # %entry211; AVX512-NEXT: vmovntdq %xmm0, (%rdi)212; AVX512-NEXT: retq213entry:214 store <4 x i32> %X, ptr %ptr, align 16, !nontemporal !1215 ret void216}217 218define void @test_nt2xi64(ptr nocapture %ptr, <2 x i64> %X) {219; SSE-LABEL: test_nt2xi64:220; SSE: # %bb.0: # %entry221; SSE-NEXT: movntdq %xmm0, (%rdi)222; SSE-NEXT: retq223;224; AVX-LABEL: test_nt2xi64:225; AVX: # %bb.0: # %entry226; AVX-NEXT: vmovntdq %xmm0, (%rdi)227; AVX-NEXT: retq228;229; AVX512-LABEL: test_nt2xi64:230; AVX512: # %bb.0: # %entry231; AVX512-NEXT: vmovntdq %xmm0, (%rdi)232; AVX512-NEXT: retq233entry:234 store <2 x i64> %X, ptr %ptr, align 16, !nontemporal !1235 ret void236}237 238;239; 128-bit Vector Loads240;241 242define <4 x float> @test_load_nt4xfloat(ptr nocapture %ptr) {243; SSE2-LABEL: test_load_nt4xfloat:244; SSE2: # %bb.0: # %entry245; SSE2-NEXT: movaps (%rdi), %xmm0246; SSE2-NEXT: retq247;248; SSE4A-LABEL: test_load_nt4xfloat:249; SSE4A: # %bb.0: # %entry250; SSE4A-NEXT: movaps (%rdi), %xmm0251; SSE4A-NEXT: retq252;253; SSE41-LABEL: test_load_nt4xfloat:254; SSE41: # %bb.0: # %entry255; SSE41-NEXT: movntdqa (%rdi), %xmm0256; SSE41-NEXT: retq257;258; AVX-LABEL: test_load_nt4xfloat:259; AVX: # %bb.0: # %entry260; AVX-NEXT: vmovntdqa (%rdi), %xmm0261; AVX-NEXT: retq262;263; AVX512-LABEL: test_load_nt4xfloat:264; AVX512: # %bb.0: # %entry265; AVX512-NEXT: vmovntdqa (%rdi), %xmm0266; AVX512-NEXT: retq267entry:268 %0 = load <4 x float>, ptr %ptr, align 16, !nontemporal !1269 ret <4 x float> %0270}271 272define <2 x double> @test_load_nt2xdouble(ptr nocapture %ptr) {273; SSE2-LABEL: test_load_nt2xdouble:274; SSE2: # %bb.0: # %entry275; SSE2-NEXT: movapd (%rdi), %xmm0276; SSE2-NEXT: retq277;278; SSE4A-LABEL: test_load_nt2xdouble:279; SSE4A: # %bb.0: # %entry280; SSE4A-NEXT: movapd (%rdi), %xmm0281; SSE4A-NEXT: retq282;283; SSE41-LABEL: test_load_nt2xdouble:284; SSE41: # %bb.0: # %entry285; SSE41-NEXT: movntdqa (%rdi), %xmm0286; SSE41-NEXT: retq287;288; AVX-LABEL: test_load_nt2xdouble:289; AVX: # %bb.0: # %entry290; AVX-NEXT: vmovntdqa (%rdi), %xmm0291; AVX-NEXT: retq292;293; AVX512-LABEL: test_load_nt2xdouble:294; AVX512: # %bb.0: # %entry295; AVX512-NEXT: vmovntdqa (%rdi), %xmm0296; AVX512-NEXT: retq297entry:298 %0 = load <2 x double>, ptr %ptr, align 16, !nontemporal !1299 ret <2 x double> %0300}301 302define <16 x i8> @test_load_nt16xi8(ptr nocapture %ptr) {303; SSE2-LABEL: test_load_nt16xi8:304; SSE2: # %bb.0: # %entry305; SSE2-NEXT: movdqa (%rdi), %xmm0306; SSE2-NEXT: retq307;308; SSE4A-LABEL: test_load_nt16xi8:309; SSE4A: # %bb.0: # %entry310; SSE4A-NEXT: movdqa (%rdi), %xmm0311; SSE4A-NEXT: retq312;313; SSE41-LABEL: test_load_nt16xi8:314; SSE41: # %bb.0: # %entry315; SSE41-NEXT: movntdqa (%rdi), %xmm0316; SSE41-NEXT: retq317;318; AVX-LABEL: test_load_nt16xi8:319; AVX: # %bb.0: # %entry320; AVX-NEXT: vmovntdqa (%rdi), %xmm0321; AVX-NEXT: retq322;323; AVX512-LABEL: test_load_nt16xi8:324; AVX512: # %bb.0: # %entry325; AVX512-NEXT: vmovntdqa (%rdi), %xmm0326; AVX512-NEXT: retq327entry:328 %0 = load <16 x i8>, ptr %ptr, align 16, !nontemporal !1329 ret <16 x i8> %0330}331 332define <8 x i16> @test_load_nt8xi16(ptr nocapture %ptr) {333; SSE2-LABEL: test_load_nt8xi16:334; SSE2: # %bb.0: # %entry335; SSE2-NEXT: movdqa (%rdi), %xmm0336; SSE2-NEXT: retq337;338; SSE4A-LABEL: test_load_nt8xi16:339; SSE4A: # %bb.0: # %entry340; SSE4A-NEXT: movdqa (%rdi), %xmm0341; SSE4A-NEXT: retq342;343; SSE41-LABEL: test_load_nt8xi16:344; SSE41: # %bb.0: # %entry345; SSE41-NEXT: movntdqa (%rdi), %xmm0346; SSE41-NEXT: retq347;348; AVX-LABEL: test_load_nt8xi16:349; AVX: # %bb.0: # %entry350; AVX-NEXT: vmovntdqa (%rdi), %xmm0351; AVX-NEXT: retq352;353; AVX512-LABEL: test_load_nt8xi16:354; AVX512: # %bb.0: # %entry355; AVX512-NEXT: vmovntdqa (%rdi), %xmm0356; AVX512-NEXT: retq357entry:358 %0 = load <8 x i16>, ptr %ptr, align 16, !nontemporal !1359 ret <8 x i16> %0360}361 362define <4 x i32> @test_load_nt4xi32(ptr nocapture %ptr) {363; SSE2-LABEL: test_load_nt4xi32:364; SSE2: # %bb.0: # %entry365; SSE2-NEXT: movdqa (%rdi), %xmm0366; SSE2-NEXT: retq367;368; SSE4A-LABEL: test_load_nt4xi32:369; SSE4A: # %bb.0: # %entry370; SSE4A-NEXT: movdqa (%rdi), %xmm0371; SSE4A-NEXT: retq372;373; SSE41-LABEL: test_load_nt4xi32:374; SSE41: # %bb.0: # %entry375; SSE41-NEXT: movntdqa (%rdi), %xmm0376; SSE41-NEXT: retq377;378; AVX-LABEL: test_load_nt4xi32:379; AVX: # %bb.0: # %entry380; AVX-NEXT: vmovntdqa (%rdi), %xmm0381; AVX-NEXT: retq382;383; AVX512-LABEL: test_load_nt4xi32:384; AVX512: # %bb.0: # %entry385; AVX512-NEXT: vmovntdqa (%rdi), %xmm0386; AVX512-NEXT: retq387entry:388 %0 = load <4 x i32>, ptr %ptr, align 16, !nontemporal !1389 ret <4 x i32> %0390}391 392define <2 x i64> @test_load_nt2xi64(ptr nocapture %ptr) {393; SSE2-LABEL: test_load_nt2xi64:394; SSE2: # %bb.0: # %entry395; SSE2-NEXT: movdqa (%rdi), %xmm0396; SSE2-NEXT: retq397;398; SSE4A-LABEL: test_load_nt2xi64:399; SSE4A: # %bb.0: # %entry400; SSE4A-NEXT: movdqa (%rdi), %xmm0401; SSE4A-NEXT: retq402;403; SSE41-LABEL: test_load_nt2xi64:404; SSE41: # %bb.0: # %entry405; SSE41-NEXT: movntdqa (%rdi), %xmm0406; SSE41-NEXT: retq407;408; AVX-LABEL: test_load_nt2xi64:409; AVX: # %bb.0: # %entry410; AVX-NEXT: vmovntdqa (%rdi), %xmm0411; AVX-NEXT: retq412;413; AVX512-LABEL: test_load_nt2xi64:414; AVX512: # %bb.0: # %entry415; AVX512-NEXT: vmovntdqa (%rdi), %xmm0416; AVX512-NEXT: retq417entry:418 %0 = load <2 x i64>, ptr %ptr, align 16, !nontemporal !1419 ret <2 x i64> %0420}421 422;423; 256-bit Vector Stores424;425 426define void @test_nt8xfloat(ptr nocapture %ptr, <8 x float> %X) {427; SSE-LABEL: test_nt8xfloat:428; SSE: # %bb.0: # %entry429; SSE-NEXT: movntps %xmm0, (%rdi)430; SSE-NEXT: movntps %xmm1, 16(%rdi)431; SSE-NEXT: retq432;433; AVX-LABEL: test_nt8xfloat:434; AVX: # %bb.0: # %entry435; AVX-NEXT: vmovntps %ymm0, (%rdi)436; AVX-NEXT: vzeroupper437; AVX-NEXT: retq438;439; AVX512-LABEL: test_nt8xfloat:440; AVX512: # %bb.0: # %entry441; AVX512-NEXT: vmovntps %ymm0, (%rdi)442; AVX512-NEXT: vzeroupper443; AVX512-NEXT: retq444entry:445 store <8 x float> %X, ptr %ptr, align 32, !nontemporal !1446 ret void447}448 449define void @test_nt4xdouble(ptr nocapture %ptr, <4 x double> %X) {450; SSE-LABEL: test_nt4xdouble:451; SSE: # %bb.0: # %entry452; SSE-NEXT: movntpd %xmm0, (%rdi)453; SSE-NEXT: movntpd %xmm1, 16(%rdi)454; SSE-NEXT: retq455;456; AVX-LABEL: test_nt4xdouble:457; AVX: # %bb.0: # %entry458; AVX-NEXT: vmovntpd %ymm0, (%rdi)459; AVX-NEXT: vzeroupper460; AVX-NEXT: retq461;462; AVX512-LABEL: test_nt4xdouble:463; AVX512: # %bb.0: # %entry464; AVX512-NEXT: vmovntpd %ymm0, (%rdi)465; AVX512-NEXT: vzeroupper466; AVX512-NEXT: retq467entry:468 store <4 x double> %X, ptr %ptr, align 32, !nontemporal !1469 ret void470}471 472define void @test_nt32xi8(ptr nocapture %ptr, <32 x i8> %X) {473; SSE-LABEL: test_nt32xi8:474; SSE: # %bb.0: # %entry475; SSE-NEXT: movntdq %xmm0, (%rdi)476; SSE-NEXT: movntdq %xmm1, 16(%rdi)477; SSE-NEXT: retq478;479; AVX-LABEL: test_nt32xi8:480; AVX: # %bb.0: # %entry481; AVX-NEXT: vmovntdq %ymm0, (%rdi)482; AVX-NEXT: vzeroupper483; AVX-NEXT: retq484;485; AVX512-LABEL: test_nt32xi8:486; AVX512: # %bb.0: # %entry487; AVX512-NEXT: vmovntdq %ymm0, (%rdi)488; AVX512-NEXT: vzeroupper489; AVX512-NEXT: retq490entry:491 store <32 x i8> %X, ptr %ptr, align 32, !nontemporal !1492 ret void493}494 495define void @test_nt16xi16(ptr nocapture %ptr, <16 x i16> %X) {496; SSE-LABEL: test_nt16xi16:497; SSE: # %bb.0: # %entry498; SSE-NEXT: movntdq %xmm0, (%rdi)499; SSE-NEXT: movntdq %xmm1, 16(%rdi)500; SSE-NEXT: retq501;502; AVX-LABEL: test_nt16xi16:503; AVX: # %bb.0: # %entry504; AVX-NEXT: vmovntdq %ymm0, (%rdi)505; AVX-NEXT: vzeroupper506; AVX-NEXT: retq507;508; AVX512-LABEL: test_nt16xi16:509; AVX512: # %bb.0: # %entry510; AVX512-NEXT: vmovntdq %ymm0, (%rdi)511; AVX512-NEXT: vzeroupper512; AVX512-NEXT: retq513entry:514 store <16 x i16> %X, ptr %ptr, align 32, !nontemporal !1515 ret void516}517 518define void @test_nt8xi32(ptr nocapture %ptr, <8 x i32> %X) {519; SSE-LABEL: test_nt8xi32:520; SSE: # %bb.0: # %entry521; SSE-NEXT: movntdq %xmm0, (%rdi)522; SSE-NEXT: movntdq %xmm1, 16(%rdi)523; SSE-NEXT: retq524;525; AVX-LABEL: test_nt8xi32:526; AVX: # %bb.0: # %entry527; AVX-NEXT: vmovntdq %ymm0, (%rdi)528; AVX-NEXT: vzeroupper529; AVX-NEXT: retq530;531; AVX512-LABEL: test_nt8xi32:532; AVX512: # %bb.0: # %entry533; AVX512-NEXT: vmovntdq %ymm0, (%rdi)534; AVX512-NEXT: vzeroupper535; AVX512-NEXT: retq536entry:537 store <8 x i32> %X, ptr %ptr, align 32, !nontemporal !1538 ret void539}540 541define void @test_nt4xi64(ptr nocapture %ptr, <4 x i64> %X) {542; SSE-LABEL: test_nt4xi64:543; SSE: # %bb.0: # %entry544; SSE-NEXT: movntdq %xmm0, (%rdi)545; SSE-NEXT: movntdq %xmm1, 16(%rdi)546; SSE-NEXT: retq547;548; AVX-LABEL: test_nt4xi64:549; AVX: # %bb.0: # %entry550; AVX-NEXT: vmovntdq %ymm0, (%rdi)551; AVX-NEXT: vzeroupper552; AVX-NEXT: retq553;554; AVX512-LABEL: test_nt4xi64:555; AVX512: # %bb.0: # %entry556; AVX512-NEXT: vmovntdq %ymm0, (%rdi)557; AVX512-NEXT: vzeroupper558; AVX512-NEXT: retq559entry:560 store <4 x i64> %X, ptr %ptr, align 32, !nontemporal !1561 ret void562}563 564;565; 256-bit Vector Loads566;567 568define <8 x float> @test_load_nt8xfloat(ptr nocapture %ptr) {569; SSE2-LABEL: test_load_nt8xfloat:570; SSE2: # %bb.0: # %entry571; SSE2-NEXT: movaps (%rdi), %xmm0572; SSE2-NEXT: movaps 16(%rdi), %xmm1573; SSE2-NEXT: retq574;575; SSE4A-LABEL: test_load_nt8xfloat:576; SSE4A: # %bb.0: # %entry577; SSE4A-NEXT: movaps (%rdi), %xmm0578; SSE4A-NEXT: movaps 16(%rdi), %xmm1579; SSE4A-NEXT: retq580;581; SSE41-LABEL: test_load_nt8xfloat:582; SSE41: # %bb.0: # %entry583; SSE41-NEXT: movntdqa (%rdi), %xmm0584; SSE41-NEXT: movntdqa 16(%rdi), %xmm1585; SSE41-NEXT: retq586;587; AVX1-LABEL: test_load_nt8xfloat:588; AVX1: # %bb.0: # %entry589; AVX1-NEXT: vmovntdqa (%rdi), %xmm1590; AVX1-NEXT: # implicit-def: $ymm0591; AVX1-NEXT: vmovaps %xmm1, %xmm0592; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1593; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0594; AVX1-NEXT: retq595;596; AVX2-LABEL: test_load_nt8xfloat:597; AVX2: # %bb.0: # %entry598; AVX2-NEXT: vmovntdqa (%rdi), %ymm0599; AVX2-NEXT: retq600;601; AVX512-LABEL: test_load_nt8xfloat:602; AVX512: # %bb.0: # %entry603; AVX512-NEXT: vmovntdqa (%rdi), %ymm0604; AVX512-NEXT: retq605entry:606 %0 = load <8 x float>, ptr %ptr, align 32, !nontemporal !1607 ret <8 x float> %0608}609 610define <4 x double> @test_load_nt4xdouble(ptr nocapture %ptr) {611; SSE2-LABEL: test_load_nt4xdouble:612; SSE2: # %bb.0: # %entry613; SSE2-NEXT: movapd (%rdi), %xmm0614; SSE2-NEXT: movapd 16(%rdi), %xmm1615; SSE2-NEXT: retq616;617; SSE4A-LABEL: test_load_nt4xdouble:618; SSE4A: # %bb.0: # %entry619; SSE4A-NEXT: movapd (%rdi), %xmm0620; SSE4A-NEXT: movapd 16(%rdi), %xmm1621; SSE4A-NEXT: retq622;623; SSE41-LABEL: test_load_nt4xdouble:624; SSE41: # %bb.0: # %entry625; SSE41-NEXT: movntdqa (%rdi), %xmm0626; SSE41-NEXT: movntdqa 16(%rdi), %xmm1627; SSE41-NEXT: retq628;629; AVX1-LABEL: test_load_nt4xdouble:630; AVX1: # %bb.0: # %entry631; AVX1-NEXT: vmovntdqa (%rdi), %xmm1632; AVX1-NEXT: # implicit-def: $ymm0633; AVX1-NEXT: vmovaps %xmm1, %xmm0634; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1635; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0636; AVX1-NEXT: retq637;638; AVX2-LABEL: test_load_nt4xdouble:639; AVX2: # %bb.0: # %entry640; AVX2-NEXT: vmovntdqa (%rdi), %ymm0641; AVX2-NEXT: retq642;643; AVX512-LABEL: test_load_nt4xdouble:644; AVX512: # %bb.0: # %entry645; AVX512-NEXT: vmovntdqa (%rdi), %ymm0646; AVX512-NEXT: retq647entry:648 %0 = load <4 x double>, ptr %ptr, align 32, !nontemporal !1649 ret <4 x double> %0650}651 652define <32 x i8> @test_load_nt32xi8(ptr nocapture %ptr) {653; SSE2-LABEL: test_load_nt32xi8:654; SSE2: # %bb.0: # %entry655; SSE2-NEXT: movaps (%rdi), %xmm0656; SSE2-NEXT: movaps 16(%rdi), %xmm1657; SSE2-NEXT: retq658;659; SSE4A-LABEL: test_load_nt32xi8:660; SSE4A: # %bb.0: # %entry661; SSE4A-NEXT: movaps (%rdi), %xmm0662; SSE4A-NEXT: movaps 16(%rdi), %xmm1663; SSE4A-NEXT: retq664;665; SSE41-LABEL: test_load_nt32xi8:666; SSE41: # %bb.0: # %entry667; SSE41-NEXT: movntdqa (%rdi), %xmm0668; SSE41-NEXT: movntdqa 16(%rdi), %xmm1669; SSE41-NEXT: retq670;671; AVX1-LABEL: test_load_nt32xi8:672; AVX1: # %bb.0: # %entry673; AVX1-NEXT: vmovntdqa (%rdi), %xmm1674; AVX1-NEXT: # implicit-def: $ymm0675; AVX1-NEXT: vmovaps %xmm1, %xmm0676; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1677; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0678; AVX1-NEXT: retq679;680; AVX2-LABEL: test_load_nt32xi8:681; AVX2: # %bb.0: # %entry682; AVX2-NEXT: vmovntdqa (%rdi), %ymm0683; AVX2-NEXT: retq684;685; AVX512-LABEL: test_load_nt32xi8:686; AVX512: # %bb.0: # %entry687; AVX512-NEXT: vmovntdqa (%rdi), %ymm0688; AVX512-NEXT: retq689entry:690 %0 = load <32 x i8>, ptr %ptr, align 32, !nontemporal !1691 ret <32 x i8> %0692}693 694define <16 x i16> @test_load_nt16xi16(ptr nocapture %ptr) {695; SSE2-LABEL: test_load_nt16xi16:696; SSE2: # %bb.0: # %entry697; SSE2-NEXT: movaps (%rdi), %xmm0698; SSE2-NEXT: movaps 16(%rdi), %xmm1699; SSE2-NEXT: retq700;701; SSE4A-LABEL: test_load_nt16xi16:702; SSE4A: # %bb.0: # %entry703; SSE4A-NEXT: movaps (%rdi), %xmm0704; SSE4A-NEXT: movaps 16(%rdi), %xmm1705; SSE4A-NEXT: retq706;707; SSE41-LABEL: test_load_nt16xi16:708; SSE41: # %bb.0: # %entry709; SSE41-NEXT: movntdqa (%rdi), %xmm0710; SSE41-NEXT: movntdqa 16(%rdi), %xmm1711; SSE41-NEXT: retq712;713; AVX1-LABEL: test_load_nt16xi16:714; AVX1: # %bb.0: # %entry715; AVX1-NEXT: vmovntdqa (%rdi), %xmm1716; AVX1-NEXT: # implicit-def: $ymm0717; AVX1-NEXT: vmovaps %xmm1, %xmm0718; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1719; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0720; AVX1-NEXT: retq721;722; AVX2-LABEL: test_load_nt16xi16:723; AVX2: # %bb.0: # %entry724; AVX2-NEXT: vmovntdqa (%rdi), %ymm0725; AVX2-NEXT: retq726;727; AVX512-LABEL: test_load_nt16xi16:728; AVX512: # %bb.0: # %entry729; AVX512-NEXT: vmovntdqa (%rdi), %ymm0730; AVX512-NEXT: retq731entry:732 %0 = load <16 x i16>, ptr %ptr, align 32, !nontemporal !1733 ret <16 x i16> %0734}735 736define <8 x i32> @test_load_nt8xi32(ptr nocapture %ptr) {737; SSE2-LABEL: test_load_nt8xi32:738; SSE2: # %bb.0: # %entry739; SSE2-NEXT: movaps (%rdi), %xmm0740; SSE2-NEXT: movaps 16(%rdi), %xmm1741; SSE2-NEXT: retq742;743; SSE4A-LABEL: test_load_nt8xi32:744; SSE4A: # %bb.0: # %entry745; SSE4A-NEXT: movaps (%rdi), %xmm0746; SSE4A-NEXT: movaps 16(%rdi), %xmm1747; SSE4A-NEXT: retq748;749; SSE41-LABEL: test_load_nt8xi32:750; SSE41: # %bb.0: # %entry751; SSE41-NEXT: movntdqa (%rdi), %xmm0752; SSE41-NEXT: movntdqa 16(%rdi), %xmm1753; SSE41-NEXT: retq754;755; AVX1-LABEL: test_load_nt8xi32:756; AVX1: # %bb.0: # %entry757; AVX1-NEXT: vmovntdqa (%rdi), %xmm1758; AVX1-NEXT: # implicit-def: $ymm0759; AVX1-NEXT: vmovaps %xmm1, %xmm0760; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1761; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0762; AVX1-NEXT: retq763;764; AVX2-LABEL: test_load_nt8xi32:765; AVX2: # %bb.0: # %entry766; AVX2-NEXT: vmovntdqa (%rdi), %ymm0767; AVX2-NEXT: retq768;769; AVX512-LABEL: test_load_nt8xi32:770; AVX512: # %bb.0: # %entry771; AVX512-NEXT: vmovntdqa (%rdi), %ymm0772; AVX512-NEXT: retq773entry:774 %0 = load <8 x i32>, ptr %ptr, align 32, !nontemporal !1775 ret <8 x i32> %0776}777 778define <4 x i64> @test_load_nt4xi64(ptr nocapture %ptr) {779; SSE2-LABEL: test_load_nt4xi64:780; SSE2: # %bb.0: # %entry781; SSE2-NEXT: movaps (%rdi), %xmm0782; SSE2-NEXT: movaps 16(%rdi), %xmm1783; SSE2-NEXT: retq784;785; SSE4A-LABEL: test_load_nt4xi64:786; SSE4A: # %bb.0: # %entry787; SSE4A-NEXT: movaps (%rdi), %xmm0788; SSE4A-NEXT: movaps 16(%rdi), %xmm1789; SSE4A-NEXT: retq790;791; SSE41-LABEL: test_load_nt4xi64:792; SSE41: # %bb.0: # %entry793; SSE41-NEXT: movntdqa (%rdi), %xmm0794; SSE41-NEXT: movntdqa 16(%rdi), %xmm1795; SSE41-NEXT: retq796;797; AVX1-LABEL: test_load_nt4xi64:798; AVX1: # %bb.0: # %entry799; AVX1-NEXT: vmovntdqa (%rdi), %xmm1800; AVX1-NEXT: # implicit-def: $ymm0801; AVX1-NEXT: vmovaps %xmm1, %xmm0802; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1803; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0804; AVX1-NEXT: retq805;806; AVX2-LABEL: test_load_nt4xi64:807; AVX2: # %bb.0: # %entry808; AVX2-NEXT: vmovntdqa (%rdi), %ymm0809; AVX2-NEXT: retq810;811; AVX512-LABEL: test_load_nt4xi64:812; AVX512: # %bb.0: # %entry813; AVX512-NEXT: vmovntdqa (%rdi), %ymm0814; AVX512-NEXT: retq815entry:816 %0 = load <4 x i64>, ptr %ptr, align 32, !nontemporal !1817 ret <4 x i64> %0818}819 820;821; 512-bit Vector Stores822;823 824define void @test_nt16xfloat(ptr nocapture %ptr, <16 x float> %X) {825; SSE-LABEL: test_nt16xfloat:826; SSE: # %bb.0: # %entry827; SSE-NEXT: movntps %xmm0, (%rdi)828; SSE-NEXT: movntps %xmm1, 16(%rdi)829; SSE-NEXT: movntps %xmm2, 32(%rdi)830; SSE-NEXT: movntps %xmm3, 48(%rdi)831; SSE-NEXT: retq832;833; AVX-LABEL: test_nt16xfloat:834; AVX: # %bb.0: # %entry835; AVX-NEXT: vmovntps %ymm0, (%rdi)836; AVX-NEXT: vmovntps %ymm1, 32(%rdi)837; AVX-NEXT: vzeroupper838; AVX-NEXT: retq839;840; AVX512-LABEL: test_nt16xfloat:841; AVX512: # %bb.0: # %entry842; AVX512-NEXT: vmovntps %zmm0, (%rdi)843; AVX512-NEXT: vzeroupper844; AVX512-NEXT: retq845entry:846 store <16 x float> %X, ptr %ptr, align 64, !nontemporal !1847 ret void848}849 850define void @test_nt8xdouble(ptr nocapture %ptr, <8 x double> %X) {851; SSE-LABEL: test_nt8xdouble:852; SSE: # %bb.0: # %entry853; SSE-NEXT: movntpd %xmm0, (%rdi)854; SSE-NEXT: movntpd %xmm1, 16(%rdi)855; SSE-NEXT: movntpd %xmm2, 32(%rdi)856; SSE-NEXT: movntpd %xmm3, 48(%rdi)857; SSE-NEXT: retq858;859; AVX-LABEL: test_nt8xdouble:860; AVX: # %bb.0: # %entry861; AVX-NEXT: vmovntpd %ymm0, (%rdi)862; AVX-NEXT: vmovntpd %ymm1, 32(%rdi)863; AVX-NEXT: vzeroupper864; AVX-NEXT: retq865;866; AVX512-LABEL: test_nt8xdouble:867; AVX512: # %bb.0: # %entry868; AVX512-NEXT: vmovntpd %zmm0, (%rdi)869; AVX512-NEXT: vzeroupper870; AVX512-NEXT: retq871entry:872 store <8 x double> %X, ptr %ptr, align 64, !nontemporal !1873 ret void874}875 876define void @test_nt64xi8(ptr nocapture %ptr, <64 x i8> %X) {877; SSE-LABEL: test_nt64xi8:878; SSE: # %bb.0: # %entry879; SSE-NEXT: movntdq %xmm0, (%rdi)880; SSE-NEXT: movntdq %xmm1, 16(%rdi)881; SSE-NEXT: movntdq %xmm2, 32(%rdi)882; SSE-NEXT: movntdq %xmm3, 48(%rdi)883; SSE-NEXT: retq884;885; AVX-LABEL: test_nt64xi8:886; AVX: # %bb.0: # %entry887; AVX-NEXT: vmovntdq %ymm0, (%rdi)888; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)889; AVX-NEXT: vzeroupper890; AVX-NEXT: retq891;892; AVX512-LABEL: test_nt64xi8:893; AVX512: # %bb.0: # %entry894; AVX512-NEXT: vmovntdq %zmm0, (%rdi)895; AVX512-NEXT: vzeroupper896; AVX512-NEXT: retq897 898entry:899 store <64 x i8> %X, ptr %ptr, align 64, !nontemporal !1900 ret void901}902 903define void @test_nt32xi16(ptr nocapture %ptr, <32 x i16> %X) {904; SSE-LABEL: test_nt32xi16:905; SSE: # %bb.0: # %entry906; SSE-NEXT: movntdq %xmm0, (%rdi)907; SSE-NEXT: movntdq %xmm1, 16(%rdi)908; SSE-NEXT: movntdq %xmm2, 32(%rdi)909; SSE-NEXT: movntdq %xmm3, 48(%rdi)910; SSE-NEXT: retq911;912; AVX-LABEL: test_nt32xi16:913; AVX: # %bb.0: # %entry914; AVX-NEXT: vmovntdq %ymm0, (%rdi)915; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)916; AVX-NEXT: vzeroupper917; AVX-NEXT: retq918;919; AVX512-LABEL: test_nt32xi16:920; AVX512: # %bb.0: # %entry921; AVX512-NEXT: vmovntdq %zmm0, (%rdi)922; AVX512-NEXT: vzeroupper923; AVX512-NEXT: retq924 925entry:926 store <32 x i16> %X, ptr %ptr, align 64, !nontemporal !1927 ret void928}929 930define void @test_nt16xi32(ptr nocapture %ptr, <16 x i32> %X) {931; SSE-LABEL: test_nt16xi32:932; SSE: # %bb.0: # %entry933; SSE-NEXT: movntdq %xmm0, (%rdi)934; SSE-NEXT: movntdq %xmm1, 16(%rdi)935; SSE-NEXT: movntdq %xmm2, 32(%rdi)936; SSE-NEXT: movntdq %xmm3, 48(%rdi)937; SSE-NEXT: retq938;939; AVX-LABEL: test_nt16xi32:940; AVX: # %bb.0: # %entry941; AVX-NEXT: vmovntdq %ymm0, (%rdi)942; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)943; AVX-NEXT: vzeroupper944; AVX-NEXT: retq945;946; AVX512-LABEL: test_nt16xi32:947; AVX512: # %bb.0: # %entry948; AVX512-NEXT: vmovntdq %zmm0, (%rdi)949; AVX512-NEXT: vzeroupper950; AVX512-NEXT: retq951entry:952 store <16 x i32> %X, ptr %ptr, align 64, !nontemporal !1953 ret void954}955 956define void @test_nt8xi64(ptr nocapture %ptr, <8 x i64> %X) {957; SSE-LABEL: test_nt8xi64:958; SSE: # %bb.0: # %entry959; SSE-NEXT: movntdq %xmm0, (%rdi)960; SSE-NEXT: movntdq %xmm1, 16(%rdi)961; SSE-NEXT: movntdq %xmm2, 32(%rdi)962; SSE-NEXT: movntdq %xmm3, 48(%rdi)963; SSE-NEXT: retq964;965; AVX-LABEL: test_nt8xi64:966; AVX: # %bb.0: # %entry967; AVX-NEXT: vmovntdq %ymm0, (%rdi)968; AVX-NEXT: vmovntdq %ymm1, 32(%rdi)969; AVX-NEXT: vzeroupper970; AVX-NEXT: retq971;972; AVX512-LABEL: test_nt8xi64:973; AVX512: # %bb.0: # %entry974; AVX512-NEXT: vmovntdq %zmm0, (%rdi)975; AVX512-NEXT: vzeroupper976; AVX512-NEXT: retq977entry:978 store <8 x i64> %X, ptr %ptr, align 64, !nontemporal !1979 ret void980}981 982;983; 512-bit Vector Loads984;985 986define <16 x float> @test_load_nt16xfloat(ptr nocapture %ptr) {987; SSE2-LABEL: test_load_nt16xfloat:988; SSE2: # %bb.0: # %entry989; SSE2-NEXT: movaps (%rdi), %xmm0990; SSE2-NEXT: movaps 16(%rdi), %xmm1991; SSE2-NEXT: movaps 32(%rdi), %xmm2992; SSE2-NEXT: movaps 48(%rdi), %xmm3993; SSE2-NEXT: retq994;995; SSE4A-LABEL: test_load_nt16xfloat:996; SSE4A: # %bb.0: # %entry997; SSE4A-NEXT: movaps (%rdi), %xmm0998; SSE4A-NEXT: movaps 16(%rdi), %xmm1999; SSE4A-NEXT: movaps 32(%rdi), %xmm21000; SSE4A-NEXT: movaps 48(%rdi), %xmm31001; SSE4A-NEXT: retq1002;1003; SSE41-LABEL: test_load_nt16xfloat:1004; SSE41: # %bb.0: # %entry1005; SSE41-NEXT: movntdqa (%rdi), %xmm01006; SSE41-NEXT: movntdqa 16(%rdi), %xmm11007; SSE41-NEXT: movntdqa 32(%rdi), %xmm21008; SSE41-NEXT: movntdqa 48(%rdi), %xmm31009; SSE41-NEXT: retq1010;1011; AVX1-LABEL: test_load_nt16xfloat:1012; AVX1: # %bb.0: # %entry1013; AVX1-NEXT: vmovntdqa (%rdi), %xmm11014; AVX1-NEXT: # implicit-def: $ymm01015; AVX1-NEXT: vmovaps %xmm1, %xmm01016; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm11017; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01018; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm21019; AVX1-NEXT: # implicit-def: $ymm11020; AVX1-NEXT: vmovaps %xmm2, %xmm11021; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm21022; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11023; AVX1-NEXT: retq1024;1025; AVX2-LABEL: test_load_nt16xfloat:1026; AVX2: # %bb.0: # %entry1027; AVX2-NEXT: vmovntdqa (%rdi), %ymm01028; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm11029; AVX2-NEXT: retq1030;1031; AVX512-LABEL: test_load_nt16xfloat:1032; AVX512: # %bb.0: # %entry1033; AVX512-NEXT: vmovntdqa (%rdi), %zmm01034; AVX512-NEXT: retq1035entry:1036 %0 = load <16 x float>, ptr %ptr, align 64, !nontemporal !11037 ret <16 x float> %01038}1039 1040define <8 x double> @test_load_nt8xdouble(ptr nocapture %ptr) {1041; SSE2-LABEL: test_load_nt8xdouble:1042; SSE2: # %bb.0: # %entry1043; SSE2-NEXT: movapd (%rdi), %xmm01044; SSE2-NEXT: movapd 16(%rdi), %xmm11045; SSE2-NEXT: movapd 32(%rdi), %xmm21046; SSE2-NEXT: movapd 48(%rdi), %xmm31047; SSE2-NEXT: retq1048;1049; SSE4A-LABEL: test_load_nt8xdouble:1050; SSE4A: # %bb.0: # %entry1051; SSE4A-NEXT: movapd (%rdi), %xmm01052; SSE4A-NEXT: movapd 16(%rdi), %xmm11053; SSE4A-NEXT: movapd 32(%rdi), %xmm21054; SSE4A-NEXT: movapd 48(%rdi), %xmm31055; SSE4A-NEXT: retq1056;1057; SSE41-LABEL: test_load_nt8xdouble:1058; SSE41: # %bb.0: # %entry1059; SSE41-NEXT: movntdqa (%rdi), %xmm01060; SSE41-NEXT: movntdqa 16(%rdi), %xmm11061; SSE41-NEXT: movntdqa 32(%rdi), %xmm21062; SSE41-NEXT: movntdqa 48(%rdi), %xmm31063; SSE41-NEXT: retq1064;1065; AVX1-LABEL: test_load_nt8xdouble:1066; AVX1: # %bb.0: # %entry1067; AVX1-NEXT: vmovntdqa (%rdi), %xmm11068; AVX1-NEXT: # implicit-def: $ymm01069; AVX1-NEXT: vmovaps %xmm1, %xmm01070; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm11071; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01072; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm21073; AVX1-NEXT: # implicit-def: $ymm11074; AVX1-NEXT: vmovaps %xmm2, %xmm11075; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm21076; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11077; AVX1-NEXT: retq1078;1079; AVX2-LABEL: test_load_nt8xdouble:1080; AVX2: # %bb.0: # %entry1081; AVX2-NEXT: vmovntdqa (%rdi), %ymm01082; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm11083; AVX2-NEXT: retq1084;1085; AVX512-LABEL: test_load_nt8xdouble:1086; AVX512: # %bb.0: # %entry1087; AVX512-NEXT: vmovntdqa (%rdi), %zmm01088; AVX512-NEXT: retq1089entry:1090 %0 = load <8 x double>, ptr %ptr, align 64, !nontemporal !11091 ret <8 x double> %01092}1093 1094define <64 x i8> @test_load_nt64xi8(ptr nocapture %ptr) {1095; SSE2-LABEL: test_load_nt64xi8:1096; SSE2: # %bb.0: # %entry1097; SSE2-NEXT: movaps (%rdi), %xmm01098; SSE2-NEXT: movaps 16(%rdi), %xmm11099; SSE2-NEXT: movaps 32(%rdi), %xmm21100; SSE2-NEXT: movaps 48(%rdi), %xmm31101; SSE2-NEXT: retq1102;1103; SSE4A-LABEL: test_load_nt64xi8:1104; SSE4A: # %bb.0: # %entry1105; SSE4A-NEXT: movaps (%rdi), %xmm01106; SSE4A-NEXT: movaps 16(%rdi), %xmm11107; SSE4A-NEXT: movaps 32(%rdi), %xmm21108; SSE4A-NEXT: movaps 48(%rdi), %xmm31109; SSE4A-NEXT: retq1110;1111; SSE41-LABEL: test_load_nt64xi8:1112; SSE41: # %bb.0: # %entry1113; SSE41-NEXT: movntdqa (%rdi), %xmm01114; SSE41-NEXT: movntdqa 16(%rdi), %xmm11115; SSE41-NEXT: movntdqa 32(%rdi), %xmm21116; SSE41-NEXT: movntdqa 48(%rdi), %xmm31117; SSE41-NEXT: retq1118;1119; AVX1-LABEL: test_load_nt64xi8:1120; AVX1: # %bb.0: # %entry1121; AVX1-NEXT: vmovntdqa (%rdi), %xmm11122; AVX1-NEXT: # implicit-def: $ymm01123; AVX1-NEXT: vmovaps %xmm1, %xmm01124; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm11125; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01126; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm21127; AVX1-NEXT: # implicit-def: $ymm11128; AVX1-NEXT: vmovaps %xmm2, %xmm11129; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm21130; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11131; AVX1-NEXT: retq1132;1133; AVX2-LABEL: test_load_nt64xi8:1134; AVX2: # %bb.0: # %entry1135; AVX2-NEXT: vmovntdqa (%rdi), %ymm01136; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm11137; AVX2-NEXT: retq1138;1139; AVX512-LABEL: test_load_nt64xi8:1140; AVX512: # %bb.0: # %entry1141; AVX512-NEXT: vmovntdqa (%rdi), %zmm01142; AVX512-NEXT: retq1143entry:1144 %0 = load <64 x i8>, ptr %ptr, align 64, !nontemporal !11145 ret <64 x i8> %01146}1147 1148define <32 x i16> @test_load_nt32xi16(ptr nocapture %ptr) {1149; SSE2-LABEL: test_load_nt32xi16:1150; SSE2: # %bb.0: # %entry1151; SSE2-NEXT: movaps (%rdi), %xmm01152; SSE2-NEXT: movaps 16(%rdi), %xmm11153; SSE2-NEXT: movaps 32(%rdi), %xmm21154; SSE2-NEXT: movaps 48(%rdi), %xmm31155; SSE2-NEXT: retq1156;1157; SSE4A-LABEL: test_load_nt32xi16:1158; SSE4A: # %bb.0: # %entry1159; SSE4A-NEXT: movaps (%rdi), %xmm01160; SSE4A-NEXT: movaps 16(%rdi), %xmm11161; SSE4A-NEXT: movaps 32(%rdi), %xmm21162; SSE4A-NEXT: movaps 48(%rdi), %xmm31163; SSE4A-NEXT: retq1164;1165; SSE41-LABEL: test_load_nt32xi16:1166; SSE41: # %bb.0: # %entry1167; SSE41-NEXT: movntdqa (%rdi), %xmm01168; SSE41-NEXT: movntdqa 16(%rdi), %xmm11169; SSE41-NEXT: movntdqa 32(%rdi), %xmm21170; SSE41-NEXT: movntdqa 48(%rdi), %xmm31171; SSE41-NEXT: retq1172;1173; AVX1-LABEL: test_load_nt32xi16:1174; AVX1: # %bb.0: # %entry1175; AVX1-NEXT: vmovntdqa (%rdi), %xmm11176; AVX1-NEXT: # implicit-def: $ymm01177; AVX1-NEXT: vmovaps %xmm1, %xmm01178; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm11179; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01180; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm21181; AVX1-NEXT: # implicit-def: $ymm11182; AVX1-NEXT: vmovaps %xmm2, %xmm11183; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm21184; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11185; AVX1-NEXT: retq1186;1187; AVX2-LABEL: test_load_nt32xi16:1188; AVX2: # %bb.0: # %entry1189; AVX2-NEXT: vmovntdqa (%rdi), %ymm01190; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm11191; AVX2-NEXT: retq1192;1193; AVX512-LABEL: test_load_nt32xi16:1194; AVX512: # %bb.0: # %entry1195; AVX512-NEXT: vmovntdqa (%rdi), %zmm01196; AVX512-NEXT: retq1197entry:1198 %0 = load <32 x i16>, ptr %ptr, align 64, !nontemporal !11199 ret <32 x i16> %01200}1201 1202define <16 x i32> @test_load_nt16xi32(ptr nocapture %ptr) {1203; SSE2-LABEL: test_load_nt16xi32:1204; SSE2: # %bb.0: # %entry1205; SSE2-NEXT: movaps (%rdi), %xmm01206; SSE2-NEXT: movaps 16(%rdi), %xmm11207; SSE2-NEXT: movaps 32(%rdi), %xmm21208; SSE2-NEXT: movaps 48(%rdi), %xmm31209; SSE2-NEXT: retq1210;1211; SSE4A-LABEL: test_load_nt16xi32:1212; SSE4A: # %bb.0: # %entry1213; SSE4A-NEXT: movaps (%rdi), %xmm01214; SSE4A-NEXT: movaps 16(%rdi), %xmm11215; SSE4A-NEXT: movaps 32(%rdi), %xmm21216; SSE4A-NEXT: movaps 48(%rdi), %xmm31217; SSE4A-NEXT: retq1218;1219; SSE41-LABEL: test_load_nt16xi32:1220; SSE41: # %bb.0: # %entry1221; SSE41-NEXT: movntdqa (%rdi), %xmm01222; SSE41-NEXT: movntdqa 16(%rdi), %xmm11223; SSE41-NEXT: movntdqa 32(%rdi), %xmm21224; SSE41-NEXT: movntdqa 48(%rdi), %xmm31225; SSE41-NEXT: retq1226;1227; AVX1-LABEL: test_load_nt16xi32:1228; AVX1: # %bb.0: # %entry1229; AVX1-NEXT: vmovntdqa (%rdi), %xmm11230; AVX1-NEXT: # implicit-def: $ymm01231; AVX1-NEXT: vmovaps %xmm1, %xmm01232; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm11233; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01234; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm21235; AVX1-NEXT: # implicit-def: $ymm11236; AVX1-NEXT: vmovaps %xmm2, %xmm11237; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm21238; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11239; AVX1-NEXT: retq1240;1241; AVX2-LABEL: test_load_nt16xi32:1242; AVX2: # %bb.0: # %entry1243; AVX2-NEXT: vmovntdqa (%rdi), %ymm01244; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm11245; AVX2-NEXT: retq1246;1247; AVX512-LABEL: test_load_nt16xi32:1248; AVX512: # %bb.0: # %entry1249; AVX512-NEXT: vmovntdqa (%rdi), %zmm01250; AVX512-NEXT: retq1251entry:1252 %0 = load <16 x i32>, ptr %ptr, align 64, !nontemporal !11253 ret <16 x i32> %01254}1255 1256define <8 x i64> @test_load_nt8xi64(ptr nocapture %ptr) {1257; SSE2-LABEL: test_load_nt8xi64:1258; SSE2: # %bb.0: # %entry1259; SSE2-NEXT: movaps (%rdi), %xmm01260; SSE2-NEXT: movaps 16(%rdi), %xmm11261; SSE2-NEXT: movaps 32(%rdi), %xmm21262; SSE2-NEXT: movaps 48(%rdi), %xmm31263; SSE2-NEXT: retq1264;1265; SSE4A-LABEL: test_load_nt8xi64:1266; SSE4A: # %bb.0: # %entry1267; SSE4A-NEXT: movaps (%rdi), %xmm01268; SSE4A-NEXT: movaps 16(%rdi), %xmm11269; SSE4A-NEXT: movaps 32(%rdi), %xmm21270; SSE4A-NEXT: movaps 48(%rdi), %xmm31271; SSE4A-NEXT: retq1272;1273; SSE41-LABEL: test_load_nt8xi64:1274; SSE41: # %bb.0: # %entry1275; SSE41-NEXT: movntdqa (%rdi), %xmm01276; SSE41-NEXT: movntdqa 16(%rdi), %xmm11277; SSE41-NEXT: movntdqa 32(%rdi), %xmm21278; SSE41-NEXT: movntdqa 48(%rdi), %xmm31279; SSE41-NEXT: retq1280;1281; AVX1-LABEL: test_load_nt8xi64:1282; AVX1: # %bb.0: # %entry1283; AVX1-NEXT: vmovntdqa (%rdi), %xmm11284; AVX1-NEXT: # implicit-def: $ymm01285; AVX1-NEXT: vmovaps %xmm1, %xmm01286; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm11287; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01288; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm21289; AVX1-NEXT: # implicit-def: $ymm11290; AVX1-NEXT: vmovaps %xmm2, %xmm11291; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm21292; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11293; AVX1-NEXT: retq1294;1295; AVX2-LABEL: test_load_nt8xi64:1296; AVX2: # %bb.0: # %entry1297; AVX2-NEXT: vmovntdqa (%rdi), %ymm01298; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm11299; AVX2-NEXT: retq1300;1301; AVX512-LABEL: test_load_nt8xi64:1302; AVX512: # %bb.0: # %entry1303; AVX512-NEXT: vmovntdqa (%rdi), %zmm01304; AVX512-NEXT: retq1305entry:1306 %0 = load <8 x i64>, ptr %ptr, align 64, !nontemporal !11307 ret <8 x i64> %01308}1309 1310!1 = !{i32 1}1311