1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+sse2 -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2 3; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+sse4a -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE4A 4; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41 5; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+avx -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1 6; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+avx2 -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2 7; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+avx512f -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512F 8; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown-unknown -mattr=+avx512bw -fast-isel -O0 < %s | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW 9 10; 11; Scalar Stores 12; 13 14define void @test_nti32(i32* nocapture %ptr, i32 %X) { 15; ALL-LABEL: test_nti32: 16; ALL: # BB#0: # %entry 17; ALL-NEXT: movntil %esi, (%rdi) 18; ALL-NEXT: retq 19entry: 20 store i32 %X, i32* %ptr, align 4, !nontemporal !1 21 ret void 22} 23 24define void @test_nti64(i64* nocapture %ptr, i64 %X) { 25; ALL-LABEL: test_nti64: 26; ALL: # BB#0: # %entry 27; ALL-NEXT: movntiq %rsi, (%rdi) 28; ALL-NEXT: retq 29entry: 30 store i64 %X, i64* %ptr, align 8, !nontemporal !1 31 ret void 32} 33 34define void @test_ntfloat(float* nocapture %ptr, float %X) { 35; SSE2-LABEL: test_ntfloat: 36; SSE2: # BB#0: # %entry 37; SSE2-NEXT: movss %xmm0, (%rdi) 38; SSE2-NEXT: retq 39; 40; SSE4A-LABEL: test_ntfloat: 41; SSE4A: # BB#0: # %entry 42; SSE4A-NEXT: movntss %xmm0, (%rdi) 43; SSE4A-NEXT: retq 44; 45; SSE41-LABEL: test_ntfloat: 46; SSE41: # BB#0: # %entry 47; SSE41-NEXT: movss %xmm0, (%rdi) 48; SSE41-NEXT: retq 49; 50; AVX-LABEL: test_ntfloat: 51; AVX: # BB#0: # %entry 52; AVX-NEXT: vmovss %xmm0, (%rdi) 53; AVX-NEXT: retq 54; 55; AVX512-LABEL: test_ntfloat: 56; AVX512: # BB#0: # %entry 57; AVX512-NEXT: vmovss %xmm0, (%rdi) 58; AVX512-NEXT: retq 59entry: 60 store float %X, float* %ptr, align 4, !nontemporal !1 61 ret void 62} 63 64define void @test_ntdouble(double* nocapture %ptr, double %X) { 65; SSE2-LABEL: test_ntdouble: 66; SSE2: # BB#0: # %entry 67; SSE2-NEXT: movsd %xmm0, (%rdi) 68; SSE2-NEXT: retq 69; 70; SSE4A-LABEL: test_ntdouble: 71; SSE4A: # BB#0: # %entry 72; SSE4A-NEXT: movntsd %xmm0, (%rdi) 73; SSE4A-NEXT: retq 74; 75; SSE41-LABEL: test_ntdouble: 76; SSE41: # BB#0: # %entry 77; SSE41-NEXT: movsd %xmm0, (%rdi) 78; SSE41-NEXT: retq 79; 80; AVX-LABEL: test_ntdouble: 81; AVX: # BB#0: # %entry 82; AVX-NEXT: vmovsd %xmm0, (%rdi) 83; AVX-NEXT: retq 84; 85; AVX512-LABEL: test_ntdouble: 86; AVX512: # BB#0: # %entry 87; AVX512-NEXT: vmovsd %xmm0, (%rdi) 88; AVX512-NEXT: retq 89entry: 90 store double %X, double* %ptr, align 8, !nontemporal !1 91 ret void 92} 93 94; 95; 128-bit Vector Stores 96; 97 98define void @test_nt4xfloat(<4 x float>* nocapture %ptr, <4 x float> %X) { 99; SSE-LABEL: test_nt4xfloat: 100; SSE: # BB#0: # %entry 101; SSE-NEXT: movntps %xmm0, (%rdi) 102; SSE-NEXT: retq 103; 104; AVX-LABEL: test_nt4xfloat: 105; AVX: # BB#0: # %entry 106; AVX-NEXT: vmovntps %xmm0, (%rdi) 107; AVX-NEXT: retq 108; 109; AVX512-LABEL: test_nt4xfloat: 110; AVX512: # BB#0: # %entry 111; AVX512-NEXT: vmovntps %xmm0, (%rdi) 112; AVX512-NEXT: retq 113entry: 114 store <4 x float> %X, <4 x float>* %ptr, align 16, !nontemporal !1 115 ret void 116} 117 118define void @test_nt2xdouble(<2 x double>* nocapture %ptr, <2 x double> %X) { 119; SSE-LABEL: test_nt2xdouble: 120; SSE: # BB#0: # %entry 121; SSE-NEXT: movntpd %xmm0, (%rdi) 122; SSE-NEXT: retq 123; 124; AVX-LABEL: test_nt2xdouble: 125; AVX: # BB#0: # %entry 126; AVX-NEXT: vmovntpd %xmm0, (%rdi) 127; AVX-NEXT: retq 128; 129; AVX512-LABEL: test_nt2xdouble: 130; AVX512: # BB#0: # %entry 131; AVX512-NEXT: vmovntpd %xmm0, (%rdi) 132; AVX512-NEXT: retq 133entry: 134 store <2 x double> %X, <2 x double>* %ptr, align 16, !nontemporal !1 135 ret void 136} 137 138define void @test_nt16xi8(<16 x i8>* nocapture %ptr, <16 x i8> %X) { 139; SSE-LABEL: test_nt16xi8: 140; SSE: # BB#0: # %entry 141; SSE-NEXT: movntdq %xmm0, (%rdi) 142; SSE-NEXT: retq 143; 144; AVX-LABEL: test_nt16xi8: 145; AVX: # BB#0: # %entry 146; AVX-NEXT: vmovntdq %xmm0, (%rdi) 147; AVX-NEXT: retq 148; 149; AVX512-LABEL: test_nt16xi8: 150; AVX512: # BB#0: # %entry 151; AVX512-NEXT: vmovntdq %xmm0, (%rdi) 152; AVX512-NEXT: retq 153entry: 154 store <16 x i8> %X, <16 x i8>* %ptr, align 16, !nontemporal !1 155 ret void 156} 157 158define void @test_nt8xi16(<8 x i16>* nocapture %ptr, <8 x i16> %X) { 159; SSE-LABEL: test_nt8xi16: 160; SSE: # BB#0: # %entry 161; SSE-NEXT: movntdq %xmm0, (%rdi) 162; SSE-NEXT: retq 163; 164; AVX-LABEL: test_nt8xi16: 165; AVX: # BB#0: # %entry 166; AVX-NEXT: vmovntdq %xmm0, (%rdi) 167; AVX-NEXT: retq 168; 169; AVX512-LABEL: test_nt8xi16: 170; AVX512: # BB#0: # %entry 171; AVX512-NEXT: vmovntdq %xmm0, (%rdi) 172; AVX512-NEXT: retq 173entry: 174 store <8 x i16> %X, <8 x i16>* %ptr, align 16, !nontemporal !1 175 ret void 176} 177 178define void @test_nt4xi32(<4 x i32>* nocapture %ptr, <4 x i32> %X) { 179; SSE-LABEL: test_nt4xi32: 180; SSE: # BB#0: # %entry 181; SSE-NEXT: movntdq %xmm0, (%rdi) 182; SSE-NEXT: retq 183; 184; AVX-LABEL: test_nt4xi32: 185; AVX: # BB#0: # %entry 186; AVX-NEXT: vmovntdq %xmm0, (%rdi) 187; AVX-NEXT: retq 188; 189; AVX512-LABEL: test_nt4xi32: 190; AVX512: # BB#0: # %entry 191; AVX512-NEXT: vmovntdq %xmm0, (%rdi) 192; AVX512-NEXT: retq 193entry: 194 store <4 x i32> %X, <4 x i32>* %ptr, align 16, !nontemporal !1 195 ret void 196} 197 198define void @test_nt2xi64(<2 x i64>* nocapture %ptr, <2 x i64> %X) { 199; SSE-LABEL: test_nt2xi64: 200; SSE: # BB#0: # %entry 201; SSE-NEXT: movntdq %xmm0, (%rdi) 202; SSE-NEXT: retq 203; 204; AVX-LABEL: test_nt2xi64: 205; AVX: # BB#0: # %entry 206; AVX-NEXT: vmovntdq %xmm0, (%rdi) 207; AVX-NEXT: retq 208; 209; AVX512-LABEL: test_nt2xi64: 210; AVX512: # BB#0: # %entry 211; AVX512-NEXT: vmovntdq %xmm0, (%rdi) 212; AVX512-NEXT: retq 213entry: 214 store <2 x i64> %X, <2 x i64>* %ptr, align 16, !nontemporal !1 215 ret void 216} 217 218; 219; 128-bit Vector Loads 220; 221 222define <4 x float> @test_load_nt4xfloat(<4 x float>* nocapture %ptr) { 223; SSE2-LABEL: test_load_nt4xfloat: 224; SSE2: # BB#0: # %entry 225; SSE2-NEXT: movaps (%rdi), %xmm0 226; SSE2-NEXT: retq 227; 228; SSE4A-LABEL: test_load_nt4xfloat: 229; SSE4A: # BB#0: # %entry 230; SSE4A-NEXT: movaps (%rdi), %xmm0 231; SSE4A-NEXT: retq 232; 233; SSE41-LABEL: test_load_nt4xfloat: 234; SSE41: # BB#0: # %entry 235; SSE41-NEXT: movntdqa (%rdi), %xmm0 236; SSE41-NEXT: retq 237; 238; AVX-LABEL: test_load_nt4xfloat: 239; AVX: # BB#0: # %entry 240; AVX-NEXT: vmovntdqa (%rdi), %xmm0 241; AVX-NEXT: retq 242; 243; AVX512-LABEL: test_load_nt4xfloat: 244; AVX512: # BB#0: # %entry 245; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 246; AVX512-NEXT: retq 247entry: 248 %0 = load <4 x float>, <4 x float>* %ptr, align 16, !nontemporal !1 249 ret <4 x float> %0 250} 251 252define <2 x double> @test_load_nt2xdouble(<2 x double>* nocapture %ptr) { 253; SSE2-LABEL: test_load_nt2xdouble: 254; SSE2: # BB#0: # %entry 255; SSE2-NEXT: movapd (%rdi), %xmm0 256; SSE2-NEXT: retq 257; 258; SSE4A-LABEL: test_load_nt2xdouble: 259; SSE4A: # BB#0: # %entry 260; SSE4A-NEXT: movapd (%rdi), %xmm0 261; SSE4A-NEXT: retq 262; 263; SSE41-LABEL: test_load_nt2xdouble: 264; SSE41: # BB#0: # %entry 265; SSE41-NEXT: movntdqa (%rdi), %xmm0 266; SSE41-NEXT: retq 267; 268; AVX-LABEL: test_load_nt2xdouble: 269; AVX: # BB#0: # %entry 270; AVX-NEXT: vmovntdqa (%rdi), %xmm0 271; AVX-NEXT: retq 272; 273; AVX512-LABEL: test_load_nt2xdouble: 274; AVX512: # BB#0: # %entry 275; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 276; AVX512-NEXT: retq 277entry: 278 %0 = load <2 x double>, <2 x double>* %ptr, align 16, !nontemporal !1 279 ret <2 x double> %0 280} 281 282define <16 x i8> @test_load_nt16xi8(<16 x i8>* nocapture %ptr) { 283; SSE-LABEL: test_load_nt16xi8: 284; SSE: # BB#0: # %entry 285; SSE-NEXT: movntdqa (%rdi), %xmm0 286; SSE-NEXT: retq 287; 288; AVX-LABEL: test_load_nt16xi8: 289; AVX: # BB#0: # %entry 290; AVX-NEXT: vmovntdqa (%rdi), %xmm0 291; AVX-NEXT: retq 292; 293; AVX512-LABEL: test_load_nt16xi8: 294; AVX512: # BB#0: # %entry 295; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 296; AVX512-NEXT: retq 297entry: 298 %0 = load <16 x i8>, <16 x i8>* %ptr, align 16, !nontemporal !1 299 ret <16 x i8> %0 300} 301 302define <8 x i16> @test_load_nt8xi16(<8 x i16>* nocapture %ptr) { 303; SSE-LABEL: test_load_nt8xi16: 304; SSE: # BB#0: # %entry 305; SSE-NEXT: movntdqa (%rdi), %xmm0 306; SSE-NEXT: retq 307; 308; AVX-LABEL: test_load_nt8xi16: 309; AVX: # BB#0: # %entry 310; AVX-NEXT: vmovntdqa (%rdi), %xmm0 311; AVX-NEXT: retq 312; 313; AVX512-LABEL: test_load_nt8xi16: 314; AVX512: # BB#0: # %entry 315; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 316; AVX512-NEXT: retq 317entry: 318 %0 = load <8 x i16>, <8 x i16>* %ptr, align 16, !nontemporal !1 319 ret <8 x i16> %0 320} 321 322define <4 x i32> @test_load_nt4xi32(<4 x i32>* nocapture %ptr) { 323; SSE-LABEL: test_load_nt4xi32: 324; SSE: # BB#0: # %entry 325; SSE-NEXT: movntdqa (%rdi), %xmm0 326; SSE-NEXT: retq 327; 328; AVX-LABEL: test_load_nt4xi32: 329; AVX: # BB#0: # %entry 330; AVX-NEXT: vmovntdqa (%rdi), %xmm0 331; AVX-NEXT: retq 332; 333; AVX512-LABEL: test_load_nt4xi32: 334; AVX512: # BB#0: # %entry 335; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 336; AVX512-NEXT: retq 337entry: 338 %0 = load <4 x i32>, <4 x i32>* %ptr, align 16, !nontemporal !1 339 ret <4 x i32> %0 340} 341 342define <2 x i64> @test_load_nt2xi64(<2 x i64>* nocapture %ptr) { 343; SSE-LABEL: test_load_nt2xi64: 344; SSE: # BB#0: # %entry 345; SSE-NEXT: movntdqa (%rdi), %xmm0 346; SSE-NEXT: retq 347; 348; AVX-LABEL: test_load_nt2xi64: 349; AVX: # BB#0: # %entry 350; AVX-NEXT: vmovntdqa (%rdi), %xmm0 351; AVX-NEXT: retq 352; 353; AVX512-LABEL: test_load_nt2xi64: 354; AVX512: # BB#0: # %entry 355; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 356; AVX512-NEXT: retq 357entry: 358 %0 = load <2 x i64>, <2 x i64>* %ptr, align 16, !nontemporal !1 359 ret <2 x i64> %0 360} 361 362; 363; 256-bit Vector Stores 364; 365 366define void @test_nt8xfloat(<8 x float>* nocapture %ptr, <8 x float> %X) { 367; SSE-LABEL: test_nt8xfloat: 368; SSE: # BB#0: # %entry 369; SSE-NEXT: movntps %xmm0, (%rdi) 370; SSE-NEXT: movntps %xmm1, 16(%rdi) 371; SSE-NEXT: retq 372; 373; AVX-LABEL: test_nt8xfloat: 374; AVX: # BB#0: # %entry 375; AVX-NEXT: vmovntps %ymm0, (%rdi) 376; AVX-NEXT: vzeroupper 377; AVX-NEXT: retq 378; 379; AVX512-LABEL: test_nt8xfloat: 380; AVX512: # BB#0: # %entry 381; AVX512-NEXT: vmovntps %ymm0, (%rdi) 382; AVX512-NEXT: retq 383entry: 384 store <8 x float> %X, <8 x float>* %ptr, align 32, !nontemporal !1 385 ret void 386} 387 388define void @test_nt4xdouble(<4 x double>* nocapture %ptr, <4 x double> %X) { 389; SSE-LABEL: test_nt4xdouble: 390; SSE: # BB#0: # %entry 391; SSE-NEXT: movntpd %xmm0, (%rdi) 392; SSE-NEXT: movntpd %xmm1, 16(%rdi) 393; SSE-NEXT: retq 394; 395; AVX-LABEL: test_nt4xdouble: 396; AVX: # BB#0: # %entry 397; AVX-NEXT: vmovntpd %ymm0, (%rdi) 398; AVX-NEXT: vzeroupper 399; AVX-NEXT: retq 400; 401; AVX512-LABEL: test_nt4xdouble: 402; AVX512: # BB#0: # %entry 403; AVX512-NEXT: vmovntpd %ymm0, (%rdi) 404; AVX512-NEXT: retq 405entry: 406 store <4 x double> %X, <4 x double>* %ptr, align 32, !nontemporal !1 407 ret void 408} 409 410define void @test_nt32xi8(<32 x i8>* nocapture %ptr, <32 x i8> %X) { 411; SSE-LABEL: test_nt32xi8: 412; SSE: # BB#0: # %entry 413; SSE-NEXT: movntdq %xmm0, (%rdi) 414; SSE-NEXT: movntdq %xmm1, 16(%rdi) 415; SSE-NEXT: retq 416; 417; AVX-LABEL: test_nt32xi8: 418; AVX: # BB#0: # %entry 419; AVX-NEXT: vmovntdq %ymm0, (%rdi) 420; AVX-NEXT: vzeroupper 421; AVX-NEXT: retq 422; 423; AVX512-LABEL: test_nt32xi8: 424; AVX512: # BB#0: # %entry 425; AVX512-NEXT: vmovntdq %ymm0, (%rdi) 426; AVX512-NEXT: retq 427entry: 428 store <32 x i8> %X, <32 x i8>* %ptr, align 32, !nontemporal !1 429 ret void 430} 431 432define void @test_nt16xi16(<16 x i16>* nocapture %ptr, <16 x i16> %X) { 433; SSE-LABEL: test_nt16xi16: 434; SSE: # BB#0: # %entry 435; SSE-NEXT: movntdq %xmm0, (%rdi) 436; SSE-NEXT: movntdq %xmm1, 16(%rdi) 437; SSE-NEXT: retq 438; 439; AVX-LABEL: test_nt16xi16: 440; AVX: # BB#0: # %entry 441; AVX-NEXT: vmovntdq %ymm0, (%rdi) 442; AVX-NEXT: vzeroupper 443; AVX-NEXT: retq 444; 445; AVX512-LABEL: test_nt16xi16: 446; AVX512: # BB#0: # %entry 447; AVX512-NEXT: vmovntdq %ymm0, (%rdi) 448; AVX512-NEXT: retq 449entry: 450 store <16 x i16> %X, <16 x i16>* %ptr, align 32, !nontemporal !1 451 ret void 452} 453 454define void @test_nt8xi32(<8 x i32>* nocapture %ptr, <8 x i32> %X) { 455; SSE-LABEL: test_nt8xi32: 456; SSE: # BB#0: # %entry 457; SSE-NEXT: movntdq %xmm0, (%rdi) 458; SSE-NEXT: movntdq %xmm1, 16(%rdi) 459; SSE-NEXT: retq 460; 461; AVX-LABEL: test_nt8xi32: 462; AVX: # BB#0: # %entry 463; AVX-NEXT: vmovntdq %ymm0, (%rdi) 464; AVX-NEXT: vzeroupper 465; AVX-NEXT: retq 466; 467; AVX512-LABEL: test_nt8xi32: 468; AVX512: # BB#0: # %entry 469; AVX512-NEXT: vmovntdq %ymm0, (%rdi) 470; AVX512-NEXT: retq 471entry: 472 store <8 x i32> %X, <8 x i32>* %ptr, align 32, !nontemporal !1 473 ret void 474} 475 476define void @test_nt4xi64(<4 x i64>* nocapture %ptr, <4 x i64> %X) { 477; SSE-LABEL: test_nt4xi64: 478; SSE: # BB#0: # %entry 479; SSE-NEXT: movntdq %xmm0, (%rdi) 480; SSE-NEXT: movntdq %xmm1, 16(%rdi) 481; SSE-NEXT: retq 482; 483; AVX-LABEL: test_nt4xi64: 484; AVX: # BB#0: # %entry 485; AVX-NEXT: vmovntdq %ymm0, (%rdi) 486; AVX-NEXT: vzeroupper 487; AVX-NEXT: retq 488; 489; AVX512-LABEL: test_nt4xi64: 490; AVX512: # BB#0: # %entry 491; AVX512-NEXT: vmovntdq %ymm0, (%rdi) 492; AVX512-NEXT: retq 493entry: 494 store <4 x i64> %X, <4 x i64>* %ptr, align 32, !nontemporal !1 495 ret void 496} 497 498; 499; 256-bit Vector Loads 500; 501 502define <8 x float> @test_load_nt8xfloat(<8 x float>* nocapture %ptr) { 503; SSE2-LABEL: test_load_nt8xfloat: 504; SSE2: # BB#0: # %entry 505; SSE2-NEXT: movaps (%rdi), %xmm0 506; SSE2-NEXT: movaps 16(%rdi), %xmm1 507; SSE2-NEXT: retq 508; 509; SSE4A-LABEL: test_load_nt8xfloat: 510; SSE4A: # BB#0: # %entry 511; SSE4A-NEXT: movaps (%rdi), %xmm0 512; SSE4A-NEXT: movaps 16(%rdi), %xmm1 513; SSE4A-NEXT: retq 514; 515; SSE41-LABEL: test_load_nt8xfloat: 516; SSE41: # BB#0: # %entry 517; SSE41-NEXT: movntdqa (%rdi), %xmm0 518; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 519; SSE41-NEXT: retq 520; 521; AVX1-LABEL: test_load_nt8xfloat: 522; AVX1: # BB#0: # %entry 523; AVX1-NEXT: vmovaps (%rdi), %ymm0 524; AVX1-NEXT: retq 525; 526; AVX2-LABEL: test_load_nt8xfloat: 527; AVX2: # BB#0: # %entry 528; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 529; AVX2-NEXT: retq 530; 531; AVX512-LABEL: test_load_nt8xfloat: 532; AVX512: # BB#0: # %entry 533; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 534; AVX512-NEXT: retq 535entry: 536 %0 = load <8 x float>, <8 x float>* %ptr, align 32, !nontemporal !1 537 ret <8 x float> %0 538} 539 540define <4 x double> @test_load_nt4xdouble(<4 x double>* nocapture %ptr) { 541; SSE2-LABEL: test_load_nt4xdouble: 542; SSE2: # BB#0: # %entry 543; SSE2-NEXT: movapd (%rdi), %xmm0 544; SSE2-NEXT: movapd 16(%rdi), %xmm1 545; SSE2-NEXT: retq 546; 547; SSE4A-LABEL: test_load_nt4xdouble: 548; SSE4A: # BB#0: # %entry 549; SSE4A-NEXT: movapd (%rdi), %xmm0 550; SSE4A-NEXT: movapd 16(%rdi), %xmm1 551; SSE4A-NEXT: retq 552; 553; SSE41-LABEL: test_load_nt4xdouble: 554; SSE41: # BB#0: # %entry 555; SSE41-NEXT: movntdqa (%rdi), %xmm0 556; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 557; SSE41-NEXT: retq 558; 559; AVX1-LABEL: test_load_nt4xdouble: 560; AVX1: # BB#0: # %entry 561; AVX1-NEXT: vmovapd (%rdi), %ymm0 562; AVX1-NEXT: retq 563; 564; AVX2-LABEL: test_load_nt4xdouble: 565; AVX2: # BB#0: # %entry 566; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 567; AVX2-NEXT: retq 568; 569; AVX512-LABEL: test_load_nt4xdouble: 570; AVX512: # BB#0: # %entry 571; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 572; AVX512-NEXT: retq 573entry: 574 %0 = load <4 x double>, <4 x double>* %ptr, align 32, !nontemporal !1 575 ret <4 x double> %0 576} 577 578define <32 x i8> @test_load_nt32xi8(<32 x i8>* nocapture %ptr) { 579; SSE2-LABEL: test_load_nt32xi8: 580; SSE2: # BB#0: # %entry 581; SSE2-NEXT: movaps (%rdi), %xmm0 582; SSE2-NEXT: movaps 16(%rdi), %xmm1 583; SSE2-NEXT: retq 584; 585; SSE4A-LABEL: test_load_nt32xi8: 586; SSE4A: # BB#0: # %entry 587; SSE4A-NEXT: movaps (%rdi), %xmm0 588; SSE4A-NEXT: movaps 16(%rdi), %xmm1 589; SSE4A-NEXT: retq 590; 591; SSE41-LABEL: test_load_nt32xi8: 592; SSE41: # BB#0: # %entry 593; SSE41-NEXT: movntdqa (%rdi), %xmm0 594; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 595; SSE41-NEXT: retq 596; 597; AVX1-LABEL: test_load_nt32xi8: 598; AVX1: # BB#0: # %entry 599; AVX1-NEXT: vmovdqa (%rdi), %ymm0 600; AVX1-NEXT: retq 601; 602; AVX2-LABEL: test_load_nt32xi8: 603; AVX2: # BB#0: # %entry 604; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 605; AVX2-NEXT: retq 606; 607; AVX512-LABEL: test_load_nt32xi8: 608; AVX512: # BB#0: # %entry 609; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 610; AVX512-NEXT: retq 611entry: 612 %0 = load <32 x i8>, <32 x i8>* %ptr, align 32, !nontemporal !1 613 ret <32 x i8> %0 614} 615 616define <16 x i16> @test_load_nt16xi16(<16 x i16>* nocapture %ptr) { 617; SSE2-LABEL: test_load_nt16xi16: 618; SSE2: # BB#0: # %entry 619; SSE2-NEXT: movaps (%rdi), %xmm0 620; SSE2-NEXT: movaps 16(%rdi), %xmm1 621; SSE2-NEXT: retq 622; 623; SSE4A-LABEL: test_load_nt16xi16: 624; SSE4A: # BB#0: # %entry 625; SSE4A-NEXT: movaps (%rdi), %xmm0 626; SSE4A-NEXT: movaps 16(%rdi), %xmm1 627; SSE4A-NEXT: retq 628; 629; SSE41-LABEL: test_load_nt16xi16: 630; SSE41: # BB#0: # %entry 631; SSE41-NEXT: movntdqa (%rdi), %xmm0 632; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 633; SSE41-NEXT: retq 634; 635; AVX1-LABEL: test_load_nt16xi16: 636; AVX1: # BB#0: # %entry 637; AVX1-NEXT: vmovdqa (%rdi), %ymm0 638; AVX1-NEXT: retq 639; 640; AVX2-LABEL: test_load_nt16xi16: 641; AVX2: # BB#0: # %entry 642; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 643; AVX2-NEXT: retq 644; 645; AVX512-LABEL: test_load_nt16xi16: 646; AVX512: # BB#0: # %entry 647; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 648; AVX512-NEXT: retq 649entry: 650 %0 = load <16 x i16>, <16 x i16>* %ptr, align 32, !nontemporal !1 651 ret <16 x i16> %0 652} 653 654define <8 x i32> @test_load_nt8xi32(<8 x i32>* nocapture %ptr) { 655; SSE2-LABEL: test_load_nt8xi32: 656; SSE2: # BB#0: # %entry 657; SSE2-NEXT: movaps (%rdi), %xmm0 658; SSE2-NEXT: movaps 16(%rdi), %xmm1 659; SSE2-NEXT: retq 660; 661; SSE4A-LABEL: test_load_nt8xi32: 662; SSE4A: # BB#0: # %entry 663; SSE4A-NEXT: movaps (%rdi), %xmm0 664; SSE4A-NEXT: movaps 16(%rdi), %xmm1 665; SSE4A-NEXT: retq 666; 667; SSE41-LABEL: test_load_nt8xi32: 668; SSE41: # BB#0: # %entry 669; SSE41-NEXT: movntdqa (%rdi), %xmm0 670; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 671; SSE41-NEXT: retq 672; 673; AVX1-LABEL: test_load_nt8xi32: 674; AVX1: # BB#0: # %entry 675; AVX1-NEXT: vmovdqa (%rdi), %ymm0 676; AVX1-NEXT: retq 677; 678; AVX2-LABEL: test_load_nt8xi32: 679; AVX2: # BB#0: # %entry 680; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 681; AVX2-NEXT: retq 682; 683; AVX512-LABEL: test_load_nt8xi32: 684; AVX512: # BB#0: # %entry 685; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 686; AVX512-NEXT: retq 687entry: 688 %0 = load <8 x i32>, <8 x i32>* %ptr, align 32, !nontemporal !1 689 ret <8 x i32> %0 690} 691 692define <4 x i64> @test_load_nt4xi64(<4 x i64>* nocapture %ptr) { 693; SSE2-LABEL: test_load_nt4xi64: 694; SSE2: # BB#0: # %entry 695; SSE2-NEXT: movaps (%rdi), %xmm0 696; SSE2-NEXT: movaps 16(%rdi), %xmm1 697; SSE2-NEXT: retq 698; 699; SSE4A-LABEL: test_load_nt4xi64: 700; SSE4A: # BB#0: # %entry 701; SSE4A-NEXT: movaps (%rdi), %xmm0 702; SSE4A-NEXT: movaps 16(%rdi), %xmm1 703; SSE4A-NEXT: retq 704; 705; SSE41-LABEL: test_load_nt4xi64: 706; SSE41: # BB#0: # %entry 707; SSE41-NEXT: movntdqa (%rdi), %xmm0 708; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 709; SSE41-NEXT: retq 710; 711; AVX1-LABEL: test_load_nt4xi64: 712; AVX1: # BB#0: # %entry 713; AVX1-NEXT: vmovdqa (%rdi), %ymm0 714; AVX1-NEXT: retq 715; 716; AVX2-LABEL: test_load_nt4xi64: 717; AVX2: # BB#0: # %entry 718; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 719; AVX2-NEXT: retq 720; 721; AVX512-LABEL: test_load_nt4xi64: 722; AVX512: # BB#0: # %entry 723; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 724; AVX512-NEXT: retq 725entry: 726 %0 = load <4 x i64>, <4 x i64>* %ptr, align 32, !nontemporal !1 727 ret <4 x i64> %0 728} 729 730; 731; 512-bit Vector Stores 732; 733 734define void @test_nt16xfloat(<16 x float>* nocapture %ptr, <16 x float> %X) { 735; SSE-LABEL: test_nt16xfloat: 736; SSE: # BB#0: # %entry 737; SSE-NEXT: movntps %xmm0, (%rdi) 738; SSE-NEXT: movntps %xmm1, 16(%rdi) 739; SSE-NEXT: movntps %xmm2, 32(%rdi) 740; SSE-NEXT: movntps %xmm3, 48(%rdi) 741; SSE-NEXT: retq 742; 743; AVX-LABEL: test_nt16xfloat: 744; AVX: # BB#0: # %entry 745; AVX-NEXT: vmovntps %ymm0, (%rdi) 746; AVX-NEXT: vmovntps %ymm1, 32(%rdi) 747; AVX-NEXT: vzeroupper 748; AVX-NEXT: retq 749; 750; AVX512-LABEL: test_nt16xfloat: 751; AVX512: # BB#0: # %entry 752; AVX512-NEXT: vmovntps %zmm0, (%rdi) 753; AVX512-NEXT: retq 754entry: 755 store <16 x float> %X, <16 x float>* %ptr, align 64, !nontemporal !1 756 ret void 757} 758 759define void @test_nt8xdouble(<8 x double>* nocapture %ptr, <8 x double> %X) { 760; SSE-LABEL: test_nt8xdouble: 761; SSE: # BB#0: # %entry 762; SSE-NEXT: movntpd %xmm0, (%rdi) 763; SSE-NEXT: movntpd %xmm1, 16(%rdi) 764; SSE-NEXT: movntpd %xmm2, 32(%rdi) 765; SSE-NEXT: movntpd %xmm3, 48(%rdi) 766; SSE-NEXT: retq 767; 768; AVX-LABEL: test_nt8xdouble: 769; AVX: # BB#0: # %entry 770; AVX-NEXT: vmovntpd %ymm0, (%rdi) 771; AVX-NEXT: vmovntpd %ymm1, 32(%rdi) 772; AVX-NEXT: vzeroupper 773; AVX-NEXT: retq 774; 775; AVX512-LABEL: test_nt8xdouble: 776; AVX512: # BB#0: # %entry 777; AVX512-NEXT: vmovntpd %zmm0, (%rdi) 778; AVX512-NEXT: retq 779entry: 780 store <8 x double> %X, <8 x double>* %ptr, align 64, !nontemporal !1 781 ret void 782} 783 784define void @test_nt64xi8(<64 x i8>* nocapture %ptr, <64 x i8> %X) { 785; SSE-LABEL: test_nt64xi8: 786; SSE: # BB#0: # %entry 787; SSE-NEXT: movntdq %xmm0, (%rdi) 788; SSE-NEXT: movntdq %xmm1, 16(%rdi) 789; SSE-NEXT: movntdq %xmm2, 32(%rdi) 790; SSE-NEXT: movntdq %xmm3, 48(%rdi) 791; SSE-NEXT: retq 792; 793; AVX-LABEL: test_nt64xi8: 794; AVX: # BB#0: # %entry 795; AVX-NEXT: vmovntdq %ymm0, (%rdi) 796; AVX-NEXT: vmovntdq %ymm1, 32(%rdi) 797; AVX-NEXT: vzeroupper 798; AVX-NEXT: retq 799; 800; AVX512F-LABEL: test_nt64xi8: 801; AVX512F: # BB#0: # %entry 802; AVX512F-NEXT: vmovntdq %ymm0, (%rdi) 803; AVX512F-NEXT: vmovntdq %ymm1, 32(%rdi) 804; AVX512F-NEXT: retq 805; 806; AVX512BW-LABEL: test_nt64xi8: 807; AVX512BW: # BB#0: # %entry 808; AVX512BW-NEXT: vmovntdq %zmm0, (%rdi) 809; AVX512BW-NEXT: retq 810entry: 811 store <64 x i8> %X, <64 x i8>* %ptr, align 64, !nontemporal !1 812 ret void 813} 814 815define void @test_nt32xi16(<32 x i16>* nocapture %ptr, <32 x i16> %X) { 816; SSE-LABEL: test_nt32xi16: 817; SSE: # BB#0: # %entry 818; SSE-NEXT: movntdq %xmm0, (%rdi) 819; SSE-NEXT: movntdq %xmm1, 16(%rdi) 820; SSE-NEXT: movntdq %xmm2, 32(%rdi) 821; SSE-NEXT: movntdq %xmm3, 48(%rdi) 822; SSE-NEXT: retq 823; 824; AVX-LABEL: test_nt32xi16: 825; AVX: # BB#0: # %entry 826; AVX-NEXT: vmovntdq %ymm0, (%rdi) 827; AVX-NEXT: vmovntdq %ymm1, 32(%rdi) 828; AVX-NEXT: vzeroupper 829; AVX-NEXT: retq 830; 831; AVX512F-LABEL: test_nt32xi16: 832; AVX512F: # BB#0: # %entry 833; AVX512F-NEXT: vmovntdq %ymm0, (%rdi) 834; AVX512F-NEXT: vmovntdq %ymm1, 32(%rdi) 835; AVX512F-NEXT: retq 836; 837; AVX512BW-LABEL: test_nt32xi16: 838; AVX512BW: # BB#0: # %entry 839; AVX512BW-NEXT: vmovntdq %zmm0, (%rdi) 840; AVX512BW-NEXT: retq 841entry: 842 store <32 x i16> %X, <32 x i16>* %ptr, align 64, !nontemporal !1 843 ret void 844} 845 846define void @test_nt16xi32(<16 x i32>* nocapture %ptr, <16 x i32> %X) { 847; SSE-LABEL: test_nt16xi32: 848; SSE: # BB#0: # %entry 849; SSE-NEXT: movntdq %xmm0, (%rdi) 850; SSE-NEXT: movntdq %xmm1, 16(%rdi) 851; SSE-NEXT: movntdq %xmm2, 32(%rdi) 852; SSE-NEXT: movntdq %xmm3, 48(%rdi) 853; SSE-NEXT: retq 854; 855; AVX-LABEL: test_nt16xi32: 856; AVX: # BB#0: # %entry 857; AVX-NEXT: vmovntdq %ymm0, (%rdi) 858; AVX-NEXT: vmovntdq %ymm1, 32(%rdi) 859; AVX-NEXT: vzeroupper 860; AVX-NEXT: retq 861; 862; AVX512-LABEL: test_nt16xi32: 863; AVX512: # BB#0: # %entry 864; AVX512-NEXT: vmovntdq %zmm0, (%rdi) 865; AVX512-NEXT: retq 866entry: 867 store <16 x i32> %X, <16 x i32>* %ptr, align 64, !nontemporal !1 868 ret void 869} 870 871define void @test_nt8xi64(<8 x i64>* nocapture %ptr, <8 x i64> %X) { 872; SSE-LABEL: test_nt8xi64: 873; SSE: # BB#0: # %entry 874; SSE-NEXT: movntdq %xmm0, (%rdi) 875; SSE-NEXT: movntdq %xmm1, 16(%rdi) 876; SSE-NEXT: movntdq %xmm2, 32(%rdi) 877; SSE-NEXT: movntdq %xmm3, 48(%rdi) 878; SSE-NEXT: retq 879; 880; AVX-LABEL: test_nt8xi64: 881; AVX: # BB#0: # %entry 882; AVX-NEXT: vmovntdq %ymm0, (%rdi) 883; AVX-NEXT: vmovntdq %ymm1, 32(%rdi) 884; AVX-NEXT: vzeroupper 885; AVX-NEXT: retq 886; 887; AVX512-LABEL: test_nt8xi64: 888; AVX512: # BB#0: # %entry 889; AVX512-NEXT: vmovntdq %zmm0, (%rdi) 890; AVX512-NEXT: retq 891entry: 892 store <8 x i64> %X, <8 x i64>* %ptr, align 64, !nontemporal !1 893 ret void 894} 895 896; 897; 512-bit Vector Loads 898; 899 900define <16 x float> @test_load_nt16xfloat(<16 x float>* nocapture %ptr) { 901; SSE2-LABEL: test_load_nt16xfloat: 902; SSE2: # BB#0: # %entry 903; SSE2-NEXT: movaps (%rdi), %xmm0 904; SSE2-NEXT: movaps 16(%rdi), %xmm1 905; SSE2-NEXT: movaps 32(%rdi), %xmm2 906; SSE2-NEXT: movaps 48(%rdi), %xmm3 907; SSE2-NEXT: retq 908; 909; SSE4A-LABEL: test_load_nt16xfloat: 910; SSE4A: # BB#0: # %entry 911; SSE4A-NEXT: movaps (%rdi), %xmm0 912; SSE4A-NEXT: movaps 16(%rdi), %xmm1 913; SSE4A-NEXT: movaps 32(%rdi), %xmm2 914; SSE4A-NEXT: movaps 48(%rdi), %xmm3 915; SSE4A-NEXT: retq 916; 917; SSE41-LABEL: test_load_nt16xfloat: 918; SSE41: # BB#0: # %entry 919; SSE41-NEXT: movntdqa (%rdi), %xmm0 920; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 921; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 922; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 923; SSE41-NEXT: retq 924; 925; AVX1-LABEL: test_load_nt16xfloat: 926; AVX1: # BB#0: # %entry 927; AVX1-NEXT: vmovaps (%rdi), %ymm0 928; AVX1-NEXT: vmovaps 32(%rdi), %ymm1 929; AVX1-NEXT: retq 930; 931; AVX2-LABEL: test_load_nt16xfloat: 932; AVX2: # BB#0: # %entry 933; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 934; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 935; AVX2-NEXT: retq 936; 937; AVX512-LABEL: test_load_nt16xfloat: 938; AVX512: # BB#0: # %entry 939; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 940; AVX512-NEXT: retq 941entry: 942 %0 = load <16 x float>, <16 x float>* %ptr, align 64, !nontemporal !1 943 ret <16 x float> %0 944} 945 946define <8 x double> @test_load_nt8xdouble(<8 x double>* nocapture %ptr) { 947; SSE2-LABEL: test_load_nt8xdouble: 948; SSE2: # BB#0: # %entry 949; SSE2-NEXT: movapd (%rdi), %xmm0 950; SSE2-NEXT: movapd 16(%rdi), %xmm1 951; SSE2-NEXT: movapd 32(%rdi), %xmm2 952; SSE2-NEXT: movapd 48(%rdi), %xmm3 953; SSE2-NEXT: retq 954; 955; SSE4A-LABEL: test_load_nt8xdouble: 956; SSE4A: # BB#0: # %entry 957; SSE4A-NEXT: movapd (%rdi), %xmm0 958; SSE4A-NEXT: movapd 16(%rdi), %xmm1 959; SSE4A-NEXT: movapd 32(%rdi), %xmm2 960; SSE4A-NEXT: movapd 48(%rdi), %xmm3 961; SSE4A-NEXT: retq 962; 963; SSE41-LABEL: test_load_nt8xdouble: 964; SSE41: # BB#0: # %entry 965; SSE41-NEXT: movntdqa (%rdi), %xmm0 966; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 967; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 968; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 969; SSE41-NEXT: retq 970; 971; AVX1-LABEL: test_load_nt8xdouble: 972; AVX1: # BB#0: # %entry 973; AVX1-NEXT: vmovapd (%rdi), %ymm0 974; AVX1-NEXT: vmovapd 32(%rdi), %ymm1 975; AVX1-NEXT: retq 976; 977; AVX2-LABEL: test_load_nt8xdouble: 978; AVX2: # BB#0: # %entry 979; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 980; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 981; AVX2-NEXT: retq 982; 983; AVX512-LABEL: test_load_nt8xdouble: 984; AVX512: # BB#0: # %entry 985; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 986; AVX512-NEXT: retq 987entry: 988 %0 = load <8 x double>, <8 x double>* %ptr, align 64, !nontemporal !1 989 ret <8 x double> %0 990} 991 992define <64 x i8> @test_load_nt64xi8(<64 x i8>* nocapture %ptr) { 993; SSE2-LABEL: test_load_nt64xi8: 994; SSE2: # BB#0: # %entry 995; SSE2-NEXT: movaps (%rdi), %xmm0 996; SSE2-NEXT: movaps 16(%rdi), %xmm1 997; SSE2-NEXT: movaps 32(%rdi), %xmm2 998; SSE2-NEXT: movaps 48(%rdi), %xmm3 999; SSE2-NEXT: retq 1000; 1001; SSE4A-LABEL: test_load_nt64xi8: 1002; SSE4A: # BB#0: # %entry 1003; SSE4A-NEXT: movaps (%rdi), %xmm0 1004; SSE4A-NEXT: movaps 16(%rdi), %xmm1 1005; SSE4A-NEXT: movaps 32(%rdi), %xmm2 1006; SSE4A-NEXT: movaps 48(%rdi), %xmm3 1007; SSE4A-NEXT: retq 1008; 1009; SSE41-LABEL: test_load_nt64xi8: 1010; SSE41: # BB#0: # %entry 1011; SSE41-NEXT: movntdqa (%rdi), %xmm0 1012; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 1013; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 1014; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 1015; SSE41-NEXT: retq 1016; 1017; AVX1-LABEL: test_load_nt64xi8: 1018; AVX1: # BB#0: # %entry 1019; AVX1-NEXT: vmovaps (%rdi), %ymm0 1020; AVX1-NEXT: vmovaps 32(%rdi), %ymm1 1021; AVX1-NEXT: retq 1022; 1023; AVX2-LABEL: test_load_nt64xi8: 1024; AVX2: # BB#0: # %entry 1025; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 1026; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 1027; AVX2-NEXT: retq 1028; 1029; AVX512F-LABEL: test_load_nt64xi8: 1030; AVX512F: # BB#0: # %entry 1031; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0 1032; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1 1033; AVX512F-NEXT: retq 1034; 1035; AVX512BW-LABEL: test_load_nt64xi8: 1036; AVX512BW: # BB#0: # %entry 1037; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0 1038; AVX512BW-NEXT: retq 1039entry: 1040 %0 = load <64 x i8>, <64 x i8>* %ptr, align 64, !nontemporal !1 1041 ret <64 x i8> %0 1042} 1043 1044define <32 x i16> @test_load_nt32xi16(<32 x i16>* nocapture %ptr) { 1045; SSE2-LABEL: test_load_nt32xi16: 1046; SSE2: # BB#0: # %entry 1047; SSE2-NEXT: movaps (%rdi), %xmm0 1048; SSE2-NEXT: movaps 16(%rdi), %xmm1 1049; SSE2-NEXT: movaps 32(%rdi), %xmm2 1050; SSE2-NEXT: movaps 48(%rdi), %xmm3 1051; SSE2-NEXT: retq 1052; 1053; SSE4A-LABEL: test_load_nt32xi16: 1054; SSE4A: # BB#0: # %entry 1055; SSE4A-NEXT: movaps (%rdi), %xmm0 1056; SSE4A-NEXT: movaps 16(%rdi), %xmm1 1057; SSE4A-NEXT: movaps 32(%rdi), %xmm2 1058; SSE4A-NEXT: movaps 48(%rdi), %xmm3 1059; SSE4A-NEXT: retq 1060; 1061; SSE41-LABEL: test_load_nt32xi16: 1062; SSE41: # BB#0: # %entry 1063; SSE41-NEXT: movntdqa (%rdi), %xmm0 1064; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 1065; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 1066; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 1067; SSE41-NEXT: retq 1068; 1069; AVX1-LABEL: test_load_nt32xi16: 1070; AVX1: # BB#0: # %entry 1071; AVX1-NEXT: vmovaps (%rdi), %ymm0 1072; AVX1-NEXT: vmovaps 32(%rdi), %ymm1 1073; AVX1-NEXT: retq 1074; 1075; AVX2-LABEL: test_load_nt32xi16: 1076; AVX2: # BB#0: # %entry 1077; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 1078; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 1079; AVX2-NEXT: retq 1080; 1081; AVX512F-LABEL: test_load_nt32xi16: 1082; AVX512F: # BB#0: # %entry 1083; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0 1084; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1 1085; AVX512F-NEXT: retq 1086; 1087; AVX512BW-LABEL: test_load_nt32xi16: 1088; AVX512BW: # BB#0: # %entry 1089; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0 1090; AVX512BW-NEXT: retq 1091entry: 1092 %0 = load <32 x i16>, <32 x i16>* %ptr, align 64, !nontemporal !1 1093 ret <32 x i16> %0 1094} 1095 1096define <16 x i32> @test_load_nt16xi32(<16 x i32>* nocapture %ptr) { 1097; SSE2-LABEL: test_load_nt16xi32: 1098; SSE2: # BB#0: # %entry 1099; SSE2-NEXT: movaps (%rdi), %xmm0 1100; SSE2-NEXT: movaps 16(%rdi), %xmm1 1101; SSE2-NEXT: movaps 32(%rdi), %xmm2 1102; SSE2-NEXT: movaps 48(%rdi), %xmm3 1103; SSE2-NEXT: retq 1104; 1105; SSE4A-LABEL: test_load_nt16xi32: 1106; SSE4A: # BB#0: # %entry 1107; SSE4A-NEXT: movaps (%rdi), %xmm0 1108; SSE4A-NEXT: movaps 16(%rdi), %xmm1 1109; SSE4A-NEXT: movaps 32(%rdi), %xmm2 1110; SSE4A-NEXT: movaps 48(%rdi), %xmm3 1111; SSE4A-NEXT: retq 1112; 1113; SSE41-LABEL: test_load_nt16xi32: 1114; SSE41: # BB#0: # %entry 1115; SSE41-NEXT: movntdqa (%rdi), %xmm0 1116; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 1117; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 1118; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 1119; SSE41-NEXT: retq 1120; 1121; AVX1-LABEL: test_load_nt16xi32: 1122; AVX1: # BB#0: # %entry 1123; AVX1-NEXT: vmovaps (%rdi), %ymm0 1124; AVX1-NEXT: vmovaps 32(%rdi), %ymm1 1125; AVX1-NEXT: retq 1126; 1127; AVX2-LABEL: test_load_nt16xi32: 1128; AVX2: # BB#0: # %entry 1129; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 1130; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 1131; AVX2-NEXT: retq 1132; 1133; AVX512-LABEL: test_load_nt16xi32: 1134; AVX512: # BB#0: # %entry 1135; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 1136; AVX512-NEXT: retq 1137entry: 1138 %0 = load <16 x i32>, <16 x i32>* %ptr, align 64, !nontemporal !1 1139 ret <16 x i32> %0 1140} 1141 1142define <8 x i64> @test_load_nt8xi64(<8 x i64>* nocapture %ptr) { 1143; SSE2-LABEL: test_load_nt8xi64: 1144; SSE2: # BB#0: # %entry 1145; SSE2-NEXT: movaps (%rdi), %xmm0 1146; SSE2-NEXT: movaps 16(%rdi), %xmm1 1147; SSE2-NEXT: movaps 32(%rdi), %xmm2 1148; SSE2-NEXT: movaps 48(%rdi), %xmm3 1149; SSE2-NEXT: retq 1150; 1151; SSE4A-LABEL: test_load_nt8xi64: 1152; SSE4A: # BB#0: # %entry 1153; SSE4A-NEXT: movaps (%rdi), %xmm0 1154; SSE4A-NEXT: movaps 16(%rdi), %xmm1 1155; SSE4A-NEXT: movaps 32(%rdi), %xmm2 1156; SSE4A-NEXT: movaps 48(%rdi), %xmm3 1157; SSE4A-NEXT: retq 1158; 1159; SSE41-LABEL: test_load_nt8xi64: 1160; SSE41: # BB#0: # %entry 1161; SSE41-NEXT: movntdqa (%rdi), %xmm0 1162; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 1163; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 1164; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 1165; SSE41-NEXT: retq 1166; 1167; AVX1-LABEL: test_load_nt8xi64: 1168; AVX1: # BB#0: # %entry 1169; AVX1-NEXT: vmovaps (%rdi), %ymm0 1170; AVX1-NEXT: vmovaps 32(%rdi), %ymm1 1171; AVX1-NEXT: retq 1172; 1173; AVX2-LABEL: test_load_nt8xi64: 1174; AVX2: # BB#0: # %entry 1175; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 1176; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 1177; AVX2-NEXT: retq 1178; 1179; AVX512-LABEL: test_load_nt8xi64: 1180; AVX512: # BB#0: # %entry 1181; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 1182; AVX512-NEXT: retq 1183entry: 1184 %0 = load <8 x i64>, <8 x i64>* %ptr, align 64, !nontemporal !1 1185 ret <8 x i64> %0 1186} 1187 1188!1 = !{i32 1} 1189