1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512BW 8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512VL 9 10define <4 x float> @test_v4f32(<4 x float>* %src) { 11; SSE2-LABEL: test_v4f32: 12; SSE2: # %bb.0: 13; SSE2-NEXT: movaps (%rdi), %xmm0 14; SSE2-NEXT: retq 15; 16; SSE41-LABEL: test_v4f32: 17; SSE41: # %bb.0: 18; SSE41-NEXT: movntdqa (%rdi), %xmm0 19; SSE41-NEXT: retq 20; 21; AVX-LABEL: test_v4f32: 22; AVX: # %bb.0: 23; AVX-NEXT: vmovntdqa (%rdi), %xmm0 24; AVX-NEXT: retq 25; 26; AVX512-LABEL: test_v4f32: 27; AVX512: # %bb.0: 28; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 29; AVX512-NEXT: retq 30 %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1 31 ret <4 x float> %1 32} 33 34define <4 x i32> @test_v4i32(<4 x i32>* %src) { 35; SSE2-LABEL: test_v4i32: 36; SSE2: # %bb.0: 37; SSE2-NEXT: movaps (%rdi), %xmm0 38; SSE2-NEXT: retq 39; 40; SSE41-LABEL: test_v4i32: 41; SSE41: # %bb.0: 42; SSE41-NEXT: movntdqa (%rdi), %xmm0 43; SSE41-NEXT: retq 44; 45; AVX-LABEL: test_v4i32: 46; AVX: # %bb.0: 47; AVX-NEXT: vmovntdqa (%rdi), %xmm0 48; AVX-NEXT: retq 49; 50; AVX512-LABEL: test_v4i32: 51; AVX512: # %bb.0: 52; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 53; AVX512-NEXT: retq 54 %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1 55 ret <4 x i32> %1 56} 57 58define <2 x double> @test_v2f64(<2 x double>* %src) { 59; SSE2-LABEL: test_v2f64: 60; SSE2: # %bb.0: 61; SSE2-NEXT: movaps (%rdi), %xmm0 62; SSE2-NEXT: retq 63; 64; SSE41-LABEL: test_v2f64: 65; SSE41: # %bb.0: 66; SSE41-NEXT: movntdqa (%rdi), %xmm0 67; SSE41-NEXT: retq 68; 69; AVX-LABEL: test_v2f64: 70; AVX: # %bb.0: 71; AVX-NEXT: vmovntdqa (%rdi), %xmm0 72; AVX-NEXT: retq 73; 74; AVX512-LABEL: test_v2f64: 75; AVX512: # %bb.0: 76; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 77; AVX512-NEXT: retq 78 %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1 79 ret <2 x double> %1 80} 81 82define <2 x i64> @test_v2i64(<2 x i64>* %src) { 83; SSE2-LABEL: test_v2i64: 84; SSE2: # %bb.0: 85; SSE2-NEXT: movaps (%rdi), %xmm0 86; SSE2-NEXT: retq 87; 88; SSE41-LABEL: test_v2i64: 89; SSE41: # %bb.0: 90; SSE41-NEXT: movntdqa (%rdi), %xmm0 91; SSE41-NEXT: retq 92; 93; AVX-LABEL: test_v2i64: 94; AVX: # %bb.0: 95; AVX-NEXT: vmovntdqa (%rdi), %xmm0 96; AVX-NEXT: retq 97; 98; AVX512-LABEL: test_v2i64: 99; AVX512: # %bb.0: 100; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 101; AVX512-NEXT: retq 102 %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1 103 ret <2 x i64> %1 104} 105 106define <8 x i16> @test_v8i16(<8 x i16>* %src) { 107; SSE2-LABEL: test_v8i16: 108; SSE2: # %bb.0: 109; SSE2-NEXT: movaps (%rdi), %xmm0 110; SSE2-NEXT: retq 111; 112; SSE41-LABEL: test_v8i16: 113; SSE41: # %bb.0: 114; SSE41-NEXT: movntdqa (%rdi), %xmm0 115; SSE41-NEXT: retq 116; 117; AVX-LABEL: test_v8i16: 118; AVX: # %bb.0: 119; AVX-NEXT: vmovntdqa (%rdi), %xmm0 120; AVX-NEXT: retq 121; 122; AVX512-LABEL: test_v8i16: 123; AVX512: # %bb.0: 124; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 125; AVX512-NEXT: retq 126 %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1 127 ret <8 x i16> %1 128} 129 130define <16 x i8> @test_v16i8(<16 x i8>* %src) { 131; SSE2-LABEL: test_v16i8: 132; SSE2: # %bb.0: 133; SSE2-NEXT: movaps (%rdi), %xmm0 134; SSE2-NEXT: retq 135; 136; SSE41-LABEL: test_v16i8: 137; SSE41: # %bb.0: 138; SSE41-NEXT: movntdqa (%rdi), %xmm0 139; SSE41-NEXT: retq 140; 141; AVX-LABEL: test_v16i8: 142; AVX: # %bb.0: 143; AVX-NEXT: vmovntdqa (%rdi), %xmm0 144; AVX-NEXT: retq 145; 146; AVX512-LABEL: test_v16i8: 147; AVX512: # %bb.0: 148; AVX512-NEXT: vmovntdqa (%rdi), %xmm0 149; AVX512-NEXT: retq 150 %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1 151 ret <16 x i8> %1 152} 153 154; And now YMM versions. 155 156define <8 x float> @test_v8f32(<8 x float>* %src) { 157; SSE2-LABEL: test_v8f32: 158; SSE2: # %bb.0: 159; SSE2-NEXT: movaps (%rdi), %xmm0 160; SSE2-NEXT: movaps 16(%rdi), %xmm1 161; SSE2-NEXT: retq 162; 163; SSE41-LABEL: test_v8f32: 164; SSE41: # %bb.0: 165; SSE41-NEXT: movntdqa (%rdi), %xmm0 166; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 167; SSE41-NEXT: retq 168; 169; AVX1-LABEL: test_v8f32: 170; AVX1: # %bb.0: 171; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 172; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 173; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 174; AVX1-NEXT: retq 175; 176; AVX2-LABEL: test_v8f32: 177; AVX2: # %bb.0: 178; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 179; AVX2-NEXT: retq 180; 181; AVX512-LABEL: test_v8f32: 182; AVX512: # %bb.0: 183; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 184; AVX512-NEXT: retq 185 %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1 186 ret <8 x float> %1 187} 188 189define <8 x i32> @test_v8i32(<8 x i32>* %src) { 190; SSE2-LABEL: test_v8i32: 191; SSE2: # %bb.0: 192; SSE2-NEXT: movaps (%rdi), %xmm0 193; SSE2-NEXT: movaps 16(%rdi), %xmm1 194; SSE2-NEXT: retq 195; 196; SSE41-LABEL: test_v8i32: 197; SSE41: # %bb.0: 198; SSE41-NEXT: movntdqa (%rdi), %xmm0 199; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 200; SSE41-NEXT: retq 201; 202; AVX1-LABEL: test_v8i32: 203; AVX1: # %bb.0: 204; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 205; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 206; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 207; AVX1-NEXT: retq 208; 209; AVX2-LABEL: test_v8i32: 210; AVX2: # %bb.0: 211; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 212; AVX2-NEXT: retq 213; 214; AVX512-LABEL: test_v8i32: 215; AVX512: # %bb.0: 216; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 217; AVX512-NEXT: retq 218 %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1 219 ret <8 x i32> %1 220} 221 222define <4 x double> @test_v4f64(<4 x double>* %src) { 223; SSE2-LABEL: test_v4f64: 224; SSE2: # %bb.0: 225; SSE2-NEXT: movaps (%rdi), %xmm0 226; SSE2-NEXT: movaps 16(%rdi), %xmm1 227; SSE2-NEXT: retq 228; 229; SSE41-LABEL: test_v4f64: 230; SSE41: # %bb.0: 231; SSE41-NEXT: movntdqa (%rdi), %xmm0 232; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 233; SSE41-NEXT: retq 234; 235; AVX1-LABEL: test_v4f64: 236; AVX1: # %bb.0: 237; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 238; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 239; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 240; AVX1-NEXT: retq 241; 242; AVX2-LABEL: test_v4f64: 243; AVX2: # %bb.0: 244; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 245; AVX2-NEXT: retq 246; 247; AVX512-LABEL: test_v4f64: 248; AVX512: # %bb.0: 249; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 250; AVX512-NEXT: retq 251 %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1 252 ret <4 x double> %1 253} 254 255define <4 x i64> @test_v4i64(<4 x i64>* %src) { 256; SSE2-LABEL: test_v4i64: 257; SSE2: # %bb.0: 258; SSE2-NEXT: movaps (%rdi), %xmm0 259; SSE2-NEXT: movaps 16(%rdi), %xmm1 260; SSE2-NEXT: retq 261; 262; SSE41-LABEL: test_v4i64: 263; SSE41: # %bb.0: 264; SSE41-NEXT: movntdqa (%rdi), %xmm0 265; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 266; SSE41-NEXT: retq 267; 268; AVX1-LABEL: test_v4i64: 269; AVX1: # %bb.0: 270; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 271; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 272; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 273; AVX1-NEXT: retq 274; 275; AVX2-LABEL: test_v4i64: 276; AVX2: # %bb.0: 277; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 278; AVX2-NEXT: retq 279; 280; AVX512-LABEL: test_v4i64: 281; AVX512: # %bb.0: 282; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 283; AVX512-NEXT: retq 284 %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1 285 ret <4 x i64> %1 286} 287 288define <16 x i16> @test_v16i16(<16 x i16>* %src) { 289; SSE2-LABEL: test_v16i16: 290; SSE2: # %bb.0: 291; SSE2-NEXT: movaps (%rdi), %xmm0 292; SSE2-NEXT: movaps 16(%rdi), %xmm1 293; SSE2-NEXT: retq 294; 295; SSE41-LABEL: test_v16i16: 296; SSE41: # %bb.0: 297; SSE41-NEXT: movntdqa (%rdi), %xmm0 298; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 299; SSE41-NEXT: retq 300; 301; AVX1-LABEL: test_v16i16: 302; AVX1: # %bb.0: 303; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 304; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 305; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 306; AVX1-NEXT: retq 307; 308; AVX2-LABEL: test_v16i16: 309; AVX2: # %bb.0: 310; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 311; AVX2-NEXT: retq 312; 313; AVX512-LABEL: test_v16i16: 314; AVX512: # %bb.0: 315; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 316; AVX512-NEXT: retq 317 %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1 318 ret <16 x i16> %1 319} 320 321define <32 x i8> @test_v32i8(<32 x i8>* %src) { 322; SSE2-LABEL: test_v32i8: 323; SSE2: # %bb.0: 324; SSE2-NEXT: movaps (%rdi), %xmm0 325; SSE2-NEXT: movaps 16(%rdi), %xmm1 326; SSE2-NEXT: retq 327; 328; SSE41-LABEL: test_v32i8: 329; SSE41: # %bb.0: 330; SSE41-NEXT: movntdqa (%rdi), %xmm0 331; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 332; SSE41-NEXT: retq 333; 334; AVX1-LABEL: test_v32i8: 335; AVX1: # %bb.0: 336; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 337; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 338; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 339; AVX1-NEXT: retq 340; 341; AVX2-LABEL: test_v32i8: 342; AVX2: # %bb.0: 343; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 344; AVX2-NEXT: retq 345; 346; AVX512-LABEL: test_v32i8: 347; AVX512: # %bb.0: 348; AVX512-NEXT: vmovntdqa (%rdi), %ymm0 349; AVX512-NEXT: retq 350 %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1 351 ret <32 x i8> %1 352} 353 354; And now ZMM versions. 355 356define <16 x float> @test_v16f32(<16 x float>* %src) { 357; SSE2-LABEL: test_v16f32: 358; SSE2: # %bb.0: 359; SSE2-NEXT: movaps (%rdi), %xmm0 360; SSE2-NEXT: movaps 16(%rdi), %xmm1 361; SSE2-NEXT: movaps 32(%rdi), %xmm2 362; SSE2-NEXT: movaps 48(%rdi), %xmm3 363; SSE2-NEXT: retq 364; 365; SSE41-LABEL: test_v16f32: 366; SSE41: # %bb.0: 367; SSE41-NEXT: movntdqa (%rdi), %xmm0 368; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 369; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 370; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 371; SSE41-NEXT: retq 372; 373; AVX1-LABEL: test_v16f32: 374; AVX1: # %bb.0: 375; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 376; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 377; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 378; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1 379; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2 380; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 381; AVX1-NEXT: retq 382; 383; AVX2-LABEL: test_v16f32: 384; AVX2: # %bb.0: 385; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 386; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 387; AVX2-NEXT: retq 388; 389; AVX512-LABEL: test_v16f32: 390; AVX512: # %bb.0: 391; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 392; AVX512-NEXT: retq 393 %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1 394 ret <16 x float> %1 395} 396 397define <16 x i32> @test_v16i32(<16 x i32>* %src) { 398; SSE2-LABEL: test_v16i32: 399; SSE2: # %bb.0: 400; SSE2-NEXT: movaps (%rdi), %xmm0 401; SSE2-NEXT: movaps 16(%rdi), %xmm1 402; SSE2-NEXT: movaps 32(%rdi), %xmm2 403; SSE2-NEXT: movaps 48(%rdi), %xmm3 404; SSE2-NEXT: retq 405; 406; SSE41-LABEL: test_v16i32: 407; SSE41: # %bb.0: 408; SSE41-NEXT: movntdqa (%rdi), %xmm0 409; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 410; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 411; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 412; SSE41-NEXT: retq 413; 414; AVX1-LABEL: test_v16i32: 415; AVX1: # %bb.0: 416; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 417; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 418; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 419; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1 420; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2 421; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 422; AVX1-NEXT: retq 423; 424; AVX2-LABEL: test_v16i32: 425; AVX2: # %bb.0: 426; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 427; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 428; AVX2-NEXT: retq 429; 430; AVX512-LABEL: test_v16i32: 431; AVX512: # %bb.0: 432; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 433; AVX512-NEXT: retq 434 %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1 435 ret <16 x i32> %1 436} 437 438define <8 x double> @test_v8f64(<8 x double>* %src) { 439; SSE2-LABEL: test_v8f64: 440; SSE2: # %bb.0: 441; SSE2-NEXT: movaps (%rdi), %xmm0 442; SSE2-NEXT: movaps 16(%rdi), %xmm1 443; SSE2-NEXT: movaps 32(%rdi), %xmm2 444; SSE2-NEXT: movaps 48(%rdi), %xmm3 445; SSE2-NEXT: retq 446; 447; SSE41-LABEL: test_v8f64: 448; SSE41: # %bb.0: 449; SSE41-NEXT: movntdqa (%rdi), %xmm0 450; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 451; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 452; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 453; SSE41-NEXT: retq 454; 455; AVX1-LABEL: test_v8f64: 456; AVX1: # %bb.0: 457; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 458; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 459; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 460; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1 461; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2 462; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 463; AVX1-NEXT: retq 464; 465; AVX2-LABEL: test_v8f64: 466; AVX2: # %bb.0: 467; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 468; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 469; AVX2-NEXT: retq 470; 471; AVX512-LABEL: test_v8f64: 472; AVX512: # %bb.0: 473; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 474; AVX512-NEXT: retq 475 %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1 476 ret <8 x double> %1 477} 478 479define <8 x i64> @test_v8i64(<8 x i64>* %src) { 480; SSE2-LABEL: test_v8i64: 481; SSE2: # %bb.0: 482; SSE2-NEXT: movaps (%rdi), %xmm0 483; SSE2-NEXT: movaps 16(%rdi), %xmm1 484; SSE2-NEXT: movaps 32(%rdi), %xmm2 485; SSE2-NEXT: movaps 48(%rdi), %xmm3 486; SSE2-NEXT: retq 487; 488; SSE41-LABEL: test_v8i64: 489; SSE41: # %bb.0: 490; SSE41-NEXT: movntdqa (%rdi), %xmm0 491; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 492; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 493; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 494; SSE41-NEXT: retq 495; 496; AVX1-LABEL: test_v8i64: 497; AVX1: # %bb.0: 498; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 499; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 500; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 501; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1 502; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2 503; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 504; AVX1-NEXT: retq 505; 506; AVX2-LABEL: test_v8i64: 507; AVX2: # %bb.0: 508; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 509; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 510; AVX2-NEXT: retq 511; 512; AVX512-LABEL: test_v8i64: 513; AVX512: # %bb.0: 514; AVX512-NEXT: vmovntdqa (%rdi), %zmm0 515; AVX512-NEXT: retq 516 %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1 517 ret <8 x i64> %1 518} 519 520define <32 x i16> @test_v32i16(<32 x i16>* %src) { 521; SSE2-LABEL: test_v32i16: 522; SSE2: # %bb.0: 523; SSE2-NEXT: movaps (%rdi), %xmm0 524; SSE2-NEXT: movaps 16(%rdi), %xmm1 525; SSE2-NEXT: movaps 32(%rdi), %xmm2 526; SSE2-NEXT: movaps 48(%rdi), %xmm3 527; SSE2-NEXT: retq 528; 529; SSE41-LABEL: test_v32i16: 530; SSE41: # %bb.0: 531; SSE41-NEXT: movntdqa (%rdi), %xmm0 532; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 533; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 534; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 535; SSE41-NEXT: retq 536; 537; AVX1-LABEL: test_v32i16: 538; AVX1: # %bb.0: 539; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 540; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 541; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 542; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1 543; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2 544; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 545; AVX1-NEXT: retq 546; 547; AVX2-LABEL: test_v32i16: 548; AVX2: # %bb.0: 549; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 550; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 551; AVX2-NEXT: retq 552; 553; AVX512F-LABEL: test_v32i16: 554; AVX512F: # %bb.0: 555; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0 556; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1 557; AVX512F-NEXT: retq 558; 559; AVX512BW-LABEL: test_v32i16: 560; AVX512BW: # %bb.0: 561; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0 562; AVX512BW-NEXT: retq 563; 564; AVX512VL-LABEL: test_v32i16: 565; AVX512VL: # %bb.0: 566; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm0 567; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm1 568; AVX512VL-NEXT: retq 569 %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1 570 ret <32 x i16> %1 571} 572 573define <64 x i8> @test_v64i8(<64 x i8>* %src) { 574; SSE2-LABEL: test_v64i8: 575; SSE2: # %bb.0: 576; SSE2-NEXT: movaps (%rdi), %xmm0 577; SSE2-NEXT: movaps 16(%rdi), %xmm1 578; SSE2-NEXT: movaps 32(%rdi), %xmm2 579; SSE2-NEXT: movaps 48(%rdi), %xmm3 580; SSE2-NEXT: retq 581; 582; SSE41-LABEL: test_v64i8: 583; SSE41: # %bb.0: 584; SSE41-NEXT: movntdqa (%rdi), %xmm0 585; SSE41-NEXT: movntdqa 16(%rdi), %xmm1 586; SSE41-NEXT: movntdqa 32(%rdi), %xmm2 587; SSE41-NEXT: movntdqa 48(%rdi), %xmm3 588; SSE41-NEXT: retq 589; 590; AVX1-LABEL: test_v64i8: 591; AVX1: # %bb.0: 592; AVX1-NEXT: vmovntdqa (%rdi), %xmm0 593; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm1 594; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 595; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm1 596; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm2 597; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 598; AVX1-NEXT: retq 599; 600; AVX2-LABEL: test_v64i8: 601; AVX2: # %bb.0: 602; AVX2-NEXT: vmovntdqa (%rdi), %ymm0 603; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm1 604; AVX2-NEXT: retq 605; 606; AVX512F-LABEL: test_v64i8: 607; AVX512F: # %bb.0: 608; AVX512F-NEXT: vmovntdqa (%rdi), %ymm0 609; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm1 610; AVX512F-NEXT: retq 611; 612; AVX512BW-LABEL: test_v64i8: 613; AVX512BW: # %bb.0: 614; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm0 615; AVX512BW-NEXT: retq 616; 617; AVX512VL-LABEL: test_v64i8: 618; AVX512VL: # %bb.0: 619; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm0 620; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm1 621; AVX512VL-NEXT: retq 622 %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1 623 ret <64 x i8> %1 624} 625 626 627; Check cases where the load would be folded. 628 629define <4 x float> @test_arg_v4f32(<4 x float> %arg, <4 x float>* %src) { 630; SSE2-LABEL: test_arg_v4f32: 631; SSE2: # %bb.0: 632; SSE2-NEXT: addps (%rdi), %xmm0 633; SSE2-NEXT: retq 634; 635; SSE41-LABEL: test_arg_v4f32: 636; SSE41: # %bb.0: 637; SSE41-NEXT: movntdqa (%rdi), %xmm1 638; SSE41-NEXT: addps %xmm1, %xmm0 639; SSE41-NEXT: retq 640; 641; AVX-LABEL: test_arg_v4f32: 642; AVX: # %bb.0: 643; AVX-NEXT: vmovntdqa (%rdi), %xmm1 644; AVX-NEXT: vaddps %xmm1, %xmm0, %xmm0 645; AVX-NEXT: retq 646; 647; AVX512-LABEL: test_arg_v4f32: 648; AVX512: # %bb.0: 649; AVX512-NEXT: vmovntdqa (%rdi), %xmm1 650; AVX512-NEXT: vaddps %xmm1, %xmm0, %xmm0 651; AVX512-NEXT: retq 652 %1 = load <4 x float>, <4 x float>* %src, align 16, !nontemporal !1 653 %2 = fadd <4 x float> %arg, %1 654 ret <4 x float> %2 655} 656 657define <4 x i32> @test_arg_v4i32(<4 x i32> %arg, <4 x i32>* %src) { 658; SSE2-LABEL: test_arg_v4i32: 659; SSE2: # %bb.0: 660; SSE2-NEXT: paddd (%rdi), %xmm0 661; SSE2-NEXT: retq 662; 663; SSE41-LABEL: test_arg_v4i32: 664; SSE41: # %bb.0: 665; SSE41-NEXT: movntdqa (%rdi), %xmm1 666; SSE41-NEXT: paddd %xmm1, %xmm0 667; SSE41-NEXT: retq 668; 669; AVX-LABEL: test_arg_v4i32: 670; AVX: # %bb.0: 671; AVX-NEXT: vmovntdqa (%rdi), %xmm1 672; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0 673; AVX-NEXT: retq 674; 675; AVX512-LABEL: test_arg_v4i32: 676; AVX512: # %bb.0: 677; AVX512-NEXT: vmovntdqa (%rdi), %xmm1 678; AVX512-NEXT: vpaddd %xmm1, %xmm0, %xmm0 679; AVX512-NEXT: retq 680 %1 = load <4 x i32>, <4 x i32>* %src, align 16, !nontemporal !1 681 %2 = add <4 x i32> %arg, %1 682 ret <4 x i32> %2 683} 684 685define <2 x double> @test_arg_v2f64(<2 x double> %arg, <2 x double>* %src) { 686; SSE2-LABEL: test_arg_v2f64: 687; SSE2: # %bb.0: 688; SSE2-NEXT: addpd (%rdi), %xmm0 689; SSE2-NEXT: retq 690; 691; SSE41-LABEL: test_arg_v2f64: 692; SSE41: # %bb.0: 693; SSE41-NEXT: movntdqa (%rdi), %xmm1 694; SSE41-NEXT: addpd %xmm1, %xmm0 695; SSE41-NEXT: retq 696; 697; AVX-LABEL: test_arg_v2f64: 698; AVX: # %bb.0: 699; AVX-NEXT: vmovntdqa (%rdi), %xmm1 700; AVX-NEXT: vaddpd %xmm1, %xmm0, %xmm0 701; AVX-NEXT: retq 702; 703; AVX512-LABEL: test_arg_v2f64: 704; AVX512: # %bb.0: 705; AVX512-NEXT: vmovntdqa (%rdi), %xmm1 706; AVX512-NEXT: vaddpd %xmm1, %xmm0, %xmm0 707; AVX512-NEXT: retq 708 %1 = load <2 x double>, <2 x double>* %src, align 16, !nontemporal !1 709 %2 = fadd <2 x double> %arg, %1 710 ret <2 x double> %2 711} 712 713define <2 x i64> @test_arg_v2i64(<2 x i64> %arg, <2 x i64>* %src) { 714; SSE2-LABEL: test_arg_v2i64: 715; SSE2: # %bb.0: 716; SSE2-NEXT: paddq (%rdi), %xmm0 717; SSE2-NEXT: retq 718; 719; SSE41-LABEL: test_arg_v2i64: 720; SSE41: # %bb.0: 721; SSE41-NEXT: movntdqa (%rdi), %xmm1 722; SSE41-NEXT: paddq %xmm1, %xmm0 723; SSE41-NEXT: retq 724; 725; AVX-LABEL: test_arg_v2i64: 726; AVX: # %bb.0: 727; AVX-NEXT: vmovntdqa (%rdi), %xmm1 728; AVX-NEXT: vpaddq %xmm1, %xmm0, %xmm0 729; AVX-NEXT: retq 730; 731; AVX512-LABEL: test_arg_v2i64: 732; AVX512: # %bb.0: 733; AVX512-NEXT: vmovntdqa (%rdi), %xmm1 734; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0 735; AVX512-NEXT: retq 736 %1 = load <2 x i64>, <2 x i64>* %src, align 16, !nontemporal !1 737 %2 = add <2 x i64> %arg, %1 738 ret <2 x i64> %2 739} 740 741define <8 x i16> @test_arg_v8i16(<8 x i16> %arg, <8 x i16>* %src) { 742; SSE2-LABEL: test_arg_v8i16: 743; SSE2: # %bb.0: 744; SSE2-NEXT: paddw (%rdi), %xmm0 745; SSE2-NEXT: retq 746; 747; SSE41-LABEL: test_arg_v8i16: 748; SSE41: # %bb.0: 749; SSE41-NEXT: movntdqa (%rdi), %xmm1 750; SSE41-NEXT: paddw %xmm1, %xmm0 751; SSE41-NEXT: retq 752; 753; AVX-LABEL: test_arg_v8i16: 754; AVX: # %bb.0: 755; AVX-NEXT: vmovntdqa (%rdi), %xmm1 756; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0 757; AVX-NEXT: retq 758; 759; AVX512-LABEL: test_arg_v8i16: 760; AVX512: # %bb.0: 761; AVX512-NEXT: vmovntdqa (%rdi), %xmm1 762; AVX512-NEXT: vpaddw %xmm1, %xmm0, %xmm0 763; AVX512-NEXT: retq 764 %1 = load <8 x i16>, <8 x i16>* %src, align 16, !nontemporal !1 765 %2 = add <8 x i16> %arg, %1 766 ret <8 x i16> %2 767} 768 769define <16 x i8> @test_arg_v16i8(<16 x i8> %arg, <16 x i8>* %src) { 770; SSE2-LABEL: test_arg_v16i8: 771; SSE2: # %bb.0: 772; SSE2-NEXT: paddb (%rdi), %xmm0 773; SSE2-NEXT: retq 774; 775; SSE41-LABEL: test_arg_v16i8: 776; SSE41: # %bb.0: 777; SSE41-NEXT: movntdqa (%rdi), %xmm1 778; SSE41-NEXT: paddb %xmm1, %xmm0 779; SSE41-NEXT: retq 780; 781; AVX-LABEL: test_arg_v16i8: 782; AVX: # %bb.0: 783; AVX-NEXT: vmovntdqa (%rdi), %xmm1 784; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0 785; AVX-NEXT: retq 786; 787; AVX512-LABEL: test_arg_v16i8: 788; AVX512: # %bb.0: 789; AVX512-NEXT: vmovntdqa (%rdi), %xmm1 790; AVX512-NEXT: vpaddb %xmm1, %xmm0, %xmm0 791; AVX512-NEXT: retq 792 %1 = load <16 x i8>, <16 x i8>* %src, align 16, !nontemporal !1 793 %2 = add <16 x i8> %arg, %1 794 ret <16 x i8> %2 795} 796 797; And now YMM versions. 798 799define <8 x float> @test_arg_v8f32(<8 x float> %arg, <8 x float>* %src) { 800; SSE2-LABEL: test_arg_v8f32: 801; SSE2: # %bb.0: 802; SSE2-NEXT: addps (%rdi), %xmm0 803; SSE2-NEXT: addps 16(%rdi), %xmm1 804; SSE2-NEXT: retq 805; 806; SSE41-LABEL: test_arg_v8f32: 807; SSE41: # %bb.0: 808; SSE41-NEXT: movntdqa 16(%rdi), %xmm2 809; SSE41-NEXT: movntdqa (%rdi), %xmm3 810; SSE41-NEXT: addps %xmm3, %xmm0 811; SSE41-NEXT: addps %xmm2, %xmm1 812; SSE41-NEXT: retq 813; 814; AVX1-LABEL: test_arg_v8f32: 815; AVX1: # %bb.0: 816; AVX1-NEXT: vmovntdqa (%rdi), %xmm1 817; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2 818; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 819; AVX1-NEXT: vaddps %ymm1, %ymm0, %ymm0 820; AVX1-NEXT: retq 821; 822; AVX2-LABEL: test_arg_v8f32: 823; AVX2: # %bb.0: 824; AVX2-NEXT: vmovntdqa (%rdi), %ymm1 825; AVX2-NEXT: vaddps %ymm1, %ymm0, %ymm0 826; AVX2-NEXT: retq 827; 828; AVX512-LABEL: test_arg_v8f32: 829; AVX512: # %bb.0: 830; AVX512-NEXT: vmovntdqa (%rdi), %ymm1 831; AVX512-NEXT: vaddps %ymm1, %ymm0, %ymm0 832; AVX512-NEXT: retq 833 %1 = load <8 x float>, <8 x float>* %src, align 32, !nontemporal !1 834 %2 = fadd <8 x float> %arg, %1 835 ret <8 x float> %2 836} 837 838define <8 x i32> @test_arg_v8i32(<8 x i32> %arg, <8 x i32>* %src) { 839; SSE2-LABEL: test_arg_v8i32: 840; SSE2: # %bb.0: 841; SSE2-NEXT: paddd (%rdi), %xmm0 842; SSE2-NEXT: paddd 16(%rdi), %xmm1 843; SSE2-NEXT: retq 844; 845; SSE41-LABEL: test_arg_v8i32: 846; SSE41: # %bb.0: 847; SSE41-NEXT: movntdqa 16(%rdi), %xmm2 848; SSE41-NEXT: movntdqa (%rdi), %xmm3 849; SSE41-NEXT: paddd %xmm3, %xmm0 850; SSE41-NEXT: paddd %xmm2, %xmm1 851; SSE41-NEXT: retq 852; 853; AVX1-LABEL: test_arg_v8i32: 854; AVX1: # %bb.0: 855; AVX1-NEXT: vmovntdqa (%rdi), %xmm1 856; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2 857; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 858; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2 859; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 860; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 861; AVX1-NEXT: retq 862; 863; AVX2-LABEL: test_arg_v8i32: 864; AVX2: # %bb.0: 865; AVX2-NEXT: vmovntdqa (%rdi), %ymm1 866; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0 867; AVX2-NEXT: retq 868; 869; AVX512-LABEL: test_arg_v8i32: 870; AVX512: # %bb.0: 871; AVX512-NEXT: vmovntdqa (%rdi), %ymm1 872; AVX512-NEXT: vpaddd %ymm1, %ymm0, %ymm0 873; AVX512-NEXT: retq 874 %1 = load <8 x i32>, <8 x i32>* %src, align 32, !nontemporal !1 875 %2 = add <8 x i32> %arg, %1 876 ret <8 x i32> %2 877} 878 879define <4 x double> @test_arg_v4f64(<4 x double> %arg, <4 x double>* %src) { 880; SSE2-LABEL: test_arg_v4f64: 881; SSE2: # %bb.0: 882; SSE2-NEXT: addpd (%rdi), %xmm0 883; SSE2-NEXT: addpd 16(%rdi), %xmm1 884; SSE2-NEXT: retq 885; 886; SSE41-LABEL: test_arg_v4f64: 887; SSE41: # %bb.0: 888; SSE41-NEXT: movntdqa 16(%rdi), %xmm2 889; SSE41-NEXT: movntdqa (%rdi), %xmm3 890; SSE41-NEXT: addpd %xmm3, %xmm0 891; SSE41-NEXT: addpd %xmm2, %xmm1 892; SSE41-NEXT: retq 893; 894; AVX1-LABEL: test_arg_v4f64: 895; AVX1: # %bb.0: 896; AVX1-NEXT: vmovntdqa (%rdi), %xmm1 897; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2 898; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 899; AVX1-NEXT: vaddpd %ymm1, %ymm0, %ymm0 900; AVX1-NEXT: retq 901; 902; AVX2-LABEL: test_arg_v4f64: 903; AVX2: # %bb.0: 904; AVX2-NEXT: vmovntdqa (%rdi), %ymm1 905; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm0 906; AVX2-NEXT: retq 907; 908; AVX512-LABEL: test_arg_v4f64: 909; AVX512: # %bb.0: 910; AVX512-NEXT: vmovntdqa (%rdi), %ymm1 911; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 912; AVX512-NEXT: retq 913 %1 = load <4 x double>, <4 x double>* %src, align 32, !nontemporal !1 914 %2 = fadd <4 x double> %arg, %1 915 ret <4 x double> %2 916} 917 918define <4 x i64> @test_arg_v4i64(<4 x i64> %arg, <4 x i64>* %src) { 919; SSE2-LABEL: test_arg_v4i64: 920; SSE2: # %bb.0: 921; SSE2-NEXT: paddq (%rdi), %xmm0 922; SSE2-NEXT: paddq 16(%rdi), %xmm1 923; SSE2-NEXT: retq 924; 925; SSE41-LABEL: test_arg_v4i64: 926; SSE41: # %bb.0: 927; SSE41-NEXT: movntdqa 16(%rdi), %xmm2 928; SSE41-NEXT: movntdqa (%rdi), %xmm3 929; SSE41-NEXT: paddq %xmm3, %xmm0 930; SSE41-NEXT: paddq %xmm2, %xmm1 931; SSE41-NEXT: retq 932; 933; AVX1-LABEL: test_arg_v4i64: 934; AVX1: # %bb.0: 935; AVX1-NEXT: vmovntdqa (%rdi), %xmm1 936; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2 937; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 938; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2 939; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0 940; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 941; AVX1-NEXT: retq 942; 943; AVX2-LABEL: test_arg_v4i64: 944; AVX2: # %bb.0: 945; AVX2-NEXT: vmovntdqa (%rdi), %ymm1 946; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0 947; AVX2-NEXT: retq 948; 949; AVX512-LABEL: test_arg_v4i64: 950; AVX512: # %bb.0: 951; AVX512-NEXT: vmovntdqa (%rdi), %ymm1 952; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0 953; AVX512-NEXT: retq 954 %1 = load <4 x i64>, <4 x i64>* %src, align 32, !nontemporal !1 955 %2 = add <4 x i64> %arg, %1 956 ret <4 x i64> %2 957} 958 959define <16 x i16> @test_arg_v16i16(<16 x i16> %arg, <16 x i16>* %src) { 960; SSE2-LABEL: test_arg_v16i16: 961; SSE2: # %bb.0: 962; SSE2-NEXT: paddw (%rdi), %xmm0 963; SSE2-NEXT: paddw 16(%rdi), %xmm1 964; SSE2-NEXT: retq 965; 966; SSE41-LABEL: test_arg_v16i16: 967; SSE41: # %bb.0: 968; SSE41-NEXT: movntdqa 16(%rdi), %xmm2 969; SSE41-NEXT: movntdqa (%rdi), %xmm3 970; SSE41-NEXT: paddw %xmm3, %xmm0 971; SSE41-NEXT: paddw %xmm2, %xmm1 972; SSE41-NEXT: retq 973; 974; AVX1-LABEL: test_arg_v16i16: 975; AVX1: # %bb.0: 976; AVX1-NEXT: vmovntdqa (%rdi), %xmm1 977; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2 978; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 979; AVX1-NEXT: vpaddw %xmm2, %xmm3, %xmm2 980; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm0 981; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 982; AVX1-NEXT: retq 983; 984; AVX2-LABEL: test_arg_v16i16: 985; AVX2: # %bb.0: 986; AVX2-NEXT: vmovntdqa (%rdi), %ymm1 987; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm0 988; AVX2-NEXT: retq 989; 990; AVX512-LABEL: test_arg_v16i16: 991; AVX512: # %bb.0: 992; AVX512-NEXT: vmovntdqa (%rdi), %ymm1 993; AVX512-NEXT: vpaddw %ymm1, %ymm0, %ymm0 994; AVX512-NEXT: retq 995 %1 = load <16 x i16>, <16 x i16>* %src, align 32, !nontemporal !1 996 %2 = add <16 x i16> %arg, %1 997 ret <16 x i16> %2 998} 999 1000define <32 x i8> @test_arg_v32i8(<32 x i8> %arg, <32 x i8>* %src) { 1001; SSE2-LABEL: test_arg_v32i8: 1002; SSE2: # %bb.0: 1003; SSE2-NEXT: paddb (%rdi), %xmm0 1004; SSE2-NEXT: paddb 16(%rdi), %xmm1 1005; SSE2-NEXT: retq 1006; 1007; SSE41-LABEL: test_arg_v32i8: 1008; SSE41: # %bb.0: 1009; SSE41-NEXT: movntdqa 16(%rdi), %xmm2 1010; SSE41-NEXT: movntdqa (%rdi), %xmm3 1011; SSE41-NEXT: paddb %xmm3, %xmm0 1012; SSE41-NEXT: paddb %xmm2, %xmm1 1013; SSE41-NEXT: retq 1014; 1015; AVX1-LABEL: test_arg_v32i8: 1016; AVX1: # %bb.0: 1017; AVX1-NEXT: vmovntdqa (%rdi), %xmm1 1018; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm2 1019; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1020; AVX1-NEXT: vpaddb %xmm2, %xmm3, %xmm2 1021; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0 1022; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1023; AVX1-NEXT: retq 1024; 1025; AVX2-LABEL: test_arg_v32i8: 1026; AVX2: # %bb.0: 1027; AVX2-NEXT: vmovntdqa (%rdi), %ymm1 1028; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm0 1029; AVX2-NEXT: retq 1030; 1031; AVX512-LABEL: test_arg_v32i8: 1032; AVX512: # %bb.0: 1033; AVX512-NEXT: vmovntdqa (%rdi), %ymm1 1034; AVX512-NEXT: vpaddb %ymm1, %ymm0, %ymm0 1035; AVX512-NEXT: retq 1036 %1 = load <32 x i8>, <32 x i8>* %src, align 32, !nontemporal !1 1037 %2 = add <32 x i8> %arg, %1 1038 ret <32 x i8> %2 1039} 1040 1041; And now ZMM versions. 1042 1043define <16 x float> @test_arg_v16f32(<16 x float> %arg, <16 x float>* %src) { 1044; SSE2-LABEL: test_arg_v16f32: 1045; SSE2: # %bb.0: 1046; SSE2-NEXT: addps (%rdi), %xmm0 1047; SSE2-NEXT: addps 16(%rdi), %xmm1 1048; SSE2-NEXT: addps 32(%rdi), %xmm2 1049; SSE2-NEXT: addps 48(%rdi), %xmm3 1050; SSE2-NEXT: retq 1051; 1052; SSE41-LABEL: test_arg_v16f32: 1053; SSE41: # %bb.0: 1054; SSE41-NEXT: movntdqa 48(%rdi), %xmm4 1055; SSE41-NEXT: movntdqa 32(%rdi), %xmm5 1056; SSE41-NEXT: movntdqa 16(%rdi), %xmm6 1057; SSE41-NEXT: movntdqa (%rdi), %xmm7 1058; SSE41-NEXT: addps %xmm7, %xmm0 1059; SSE41-NEXT: addps %xmm6, %xmm1 1060; SSE41-NEXT: addps %xmm5, %xmm2 1061; SSE41-NEXT: addps %xmm4, %xmm3 1062; SSE41-NEXT: retq 1063; 1064; AVX1-LABEL: test_arg_v16f32: 1065; AVX1: # %bb.0: 1066; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2 1067; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3 1068; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2 1069; AVX1-NEXT: vmovntdqa (%rdi), %xmm3 1070; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4 1071; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3 1072; AVX1-NEXT: vaddps %ymm3, %ymm0, %ymm0 1073; AVX1-NEXT: vaddps %ymm2, %ymm1, %ymm1 1074; AVX1-NEXT: retq 1075; 1076; AVX2-LABEL: test_arg_v16f32: 1077; AVX2: # %bb.0: 1078; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2 1079; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1080; AVX2-NEXT: vaddps %ymm3, %ymm0, %ymm0 1081; AVX2-NEXT: vaddps %ymm2, %ymm1, %ymm1 1082; AVX2-NEXT: retq 1083; 1084; AVX512-LABEL: test_arg_v16f32: 1085; AVX512: # %bb.0: 1086; AVX512-NEXT: vmovntdqa (%rdi), %zmm1 1087; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm0 1088; AVX512-NEXT: retq 1089 %1 = load <16 x float>, <16 x float>* %src, align 64, !nontemporal !1 1090 %2 = fadd <16 x float> %arg, %1 1091 ret <16 x float> %2 1092} 1093 1094define <16 x i32> @test_arg_v16i32(<16 x i32> %arg, <16 x i32>* %src) { 1095; SSE2-LABEL: test_arg_v16i32: 1096; SSE2: # %bb.0: 1097; SSE2-NEXT: paddd (%rdi), %xmm0 1098; SSE2-NEXT: paddd 16(%rdi), %xmm1 1099; SSE2-NEXT: paddd 32(%rdi), %xmm2 1100; SSE2-NEXT: paddd 48(%rdi), %xmm3 1101; SSE2-NEXT: retq 1102; 1103; SSE41-LABEL: test_arg_v16i32: 1104; SSE41: # %bb.0: 1105; SSE41-NEXT: movntdqa 48(%rdi), %xmm4 1106; SSE41-NEXT: movntdqa 32(%rdi), %xmm5 1107; SSE41-NEXT: movntdqa 16(%rdi), %xmm6 1108; SSE41-NEXT: movntdqa (%rdi), %xmm7 1109; SSE41-NEXT: paddd %xmm7, %xmm0 1110; SSE41-NEXT: paddd %xmm6, %xmm1 1111; SSE41-NEXT: paddd %xmm5, %xmm2 1112; SSE41-NEXT: paddd %xmm4, %xmm3 1113; SSE41-NEXT: retq 1114; 1115; AVX1-LABEL: test_arg_v16i32: 1116; AVX1: # %bb.0: 1117; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2 1118; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3 1119; AVX1-NEXT: vmovntdqa (%rdi), %xmm4 1120; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5 1121; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 1122; AVX1-NEXT: vpaddd %xmm5, %xmm6, %xmm5 1123; AVX1-NEXT: vpaddd %xmm4, %xmm0, %xmm0 1124; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0 1125; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 1126; AVX1-NEXT: vpaddd %xmm3, %xmm4, %xmm3 1127; AVX1-NEXT: vpaddd %xmm2, %xmm1, %xmm1 1128; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1129; AVX1-NEXT: retq 1130; 1131; AVX2-LABEL: test_arg_v16i32: 1132; AVX2: # %bb.0: 1133; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2 1134; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1135; AVX2-NEXT: vpaddd %ymm3, %ymm0, %ymm0 1136; AVX2-NEXT: vpaddd %ymm2, %ymm1, %ymm1 1137; AVX2-NEXT: retq 1138; 1139; AVX512-LABEL: test_arg_v16i32: 1140; AVX512: # %bb.0: 1141; AVX512-NEXT: vmovntdqa (%rdi), %zmm1 1142; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0 1143; AVX512-NEXT: retq 1144 %1 = load <16 x i32>, <16 x i32>* %src, align 64, !nontemporal !1 1145 %2 = add <16 x i32> %arg, %1 1146 ret <16 x i32> %2 1147} 1148 1149define <8 x double> @test_arg_v8f64(<8 x double> %arg, <8 x double>* %src) { 1150; SSE2-LABEL: test_arg_v8f64: 1151; SSE2: # %bb.0: 1152; SSE2-NEXT: addpd (%rdi), %xmm0 1153; SSE2-NEXT: addpd 16(%rdi), %xmm1 1154; SSE2-NEXT: addpd 32(%rdi), %xmm2 1155; SSE2-NEXT: addpd 48(%rdi), %xmm3 1156; SSE2-NEXT: retq 1157; 1158; SSE41-LABEL: test_arg_v8f64: 1159; SSE41: # %bb.0: 1160; SSE41-NEXT: movntdqa 48(%rdi), %xmm4 1161; SSE41-NEXT: movntdqa 32(%rdi), %xmm5 1162; SSE41-NEXT: movntdqa 16(%rdi), %xmm6 1163; SSE41-NEXT: movntdqa (%rdi), %xmm7 1164; SSE41-NEXT: addpd %xmm7, %xmm0 1165; SSE41-NEXT: addpd %xmm6, %xmm1 1166; SSE41-NEXT: addpd %xmm5, %xmm2 1167; SSE41-NEXT: addpd %xmm4, %xmm3 1168; SSE41-NEXT: retq 1169; 1170; AVX1-LABEL: test_arg_v8f64: 1171; AVX1: # %bb.0: 1172; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2 1173; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3 1174; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2 1175; AVX1-NEXT: vmovntdqa (%rdi), %xmm3 1176; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4 1177; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3 1178; AVX1-NEXT: vaddpd %ymm3, %ymm0, %ymm0 1179; AVX1-NEXT: vaddpd %ymm2, %ymm1, %ymm1 1180; AVX1-NEXT: retq 1181; 1182; AVX2-LABEL: test_arg_v8f64: 1183; AVX2: # %bb.0: 1184; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2 1185; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1186; AVX2-NEXT: vaddpd %ymm3, %ymm0, %ymm0 1187; AVX2-NEXT: vaddpd %ymm2, %ymm1, %ymm1 1188; AVX2-NEXT: retq 1189; 1190; AVX512-LABEL: test_arg_v8f64: 1191; AVX512: # %bb.0: 1192; AVX512-NEXT: vmovntdqa (%rdi), %zmm1 1193; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm0 1194; AVX512-NEXT: retq 1195 %1 = load <8 x double>, <8 x double>* %src, align 64, !nontemporal !1 1196 %2 = fadd <8 x double> %arg, %1 1197 ret <8 x double> %2 1198} 1199 1200define <8 x i64> @test_arg_v8i64(<8 x i64> %arg, <8 x i64>* %src) { 1201; SSE2-LABEL: test_arg_v8i64: 1202; SSE2: # %bb.0: 1203; SSE2-NEXT: paddq (%rdi), %xmm0 1204; SSE2-NEXT: paddq 16(%rdi), %xmm1 1205; SSE2-NEXT: paddq 32(%rdi), %xmm2 1206; SSE2-NEXT: paddq 48(%rdi), %xmm3 1207; SSE2-NEXT: retq 1208; 1209; SSE41-LABEL: test_arg_v8i64: 1210; SSE41: # %bb.0: 1211; SSE41-NEXT: movntdqa 48(%rdi), %xmm4 1212; SSE41-NEXT: movntdqa 32(%rdi), %xmm5 1213; SSE41-NEXT: movntdqa 16(%rdi), %xmm6 1214; SSE41-NEXT: movntdqa (%rdi), %xmm7 1215; SSE41-NEXT: paddq %xmm7, %xmm0 1216; SSE41-NEXT: paddq %xmm6, %xmm1 1217; SSE41-NEXT: paddq %xmm5, %xmm2 1218; SSE41-NEXT: paddq %xmm4, %xmm3 1219; SSE41-NEXT: retq 1220; 1221; AVX1-LABEL: test_arg_v8i64: 1222; AVX1: # %bb.0: 1223; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2 1224; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3 1225; AVX1-NEXT: vmovntdqa (%rdi), %xmm4 1226; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5 1227; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 1228; AVX1-NEXT: vpaddq %xmm5, %xmm6, %xmm5 1229; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm0 1230; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0 1231; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 1232; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3 1233; AVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm1 1234; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1235; AVX1-NEXT: retq 1236; 1237; AVX2-LABEL: test_arg_v8i64: 1238; AVX2: # %bb.0: 1239; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2 1240; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1241; AVX2-NEXT: vpaddq %ymm3, %ymm0, %ymm0 1242; AVX2-NEXT: vpaddq %ymm2, %ymm1, %ymm1 1243; AVX2-NEXT: retq 1244; 1245; AVX512-LABEL: test_arg_v8i64: 1246; AVX512: # %bb.0: 1247; AVX512-NEXT: vmovntdqa (%rdi), %zmm1 1248; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0 1249; AVX512-NEXT: retq 1250 %1 = load <8 x i64>, <8 x i64>* %src, align 64, !nontemporal !1 1251 %2 = add <8 x i64> %arg, %1 1252 ret <8 x i64> %2 1253} 1254 1255define <32 x i16> @test_arg_v32i16(<32 x i16> %arg, <32 x i16>* %src) { 1256; SSE2-LABEL: test_arg_v32i16: 1257; SSE2: # %bb.0: 1258; SSE2-NEXT: paddw (%rdi), %xmm0 1259; SSE2-NEXT: paddw 16(%rdi), %xmm1 1260; SSE2-NEXT: paddw 32(%rdi), %xmm2 1261; SSE2-NEXT: paddw 48(%rdi), %xmm3 1262; SSE2-NEXT: retq 1263; 1264; SSE41-LABEL: test_arg_v32i16: 1265; SSE41: # %bb.0: 1266; SSE41-NEXT: movntdqa 48(%rdi), %xmm4 1267; SSE41-NEXT: movntdqa 32(%rdi), %xmm5 1268; SSE41-NEXT: movntdqa 16(%rdi), %xmm6 1269; SSE41-NEXT: movntdqa (%rdi), %xmm7 1270; SSE41-NEXT: paddw %xmm7, %xmm0 1271; SSE41-NEXT: paddw %xmm6, %xmm1 1272; SSE41-NEXT: paddw %xmm5, %xmm2 1273; SSE41-NEXT: paddw %xmm4, %xmm3 1274; SSE41-NEXT: retq 1275; 1276; AVX1-LABEL: test_arg_v32i16: 1277; AVX1: # %bb.0: 1278; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2 1279; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3 1280; AVX1-NEXT: vmovntdqa (%rdi), %xmm4 1281; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5 1282; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 1283; AVX1-NEXT: vpaddw %xmm5, %xmm6, %xmm5 1284; AVX1-NEXT: vpaddw %xmm4, %xmm0, %xmm0 1285; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0 1286; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 1287; AVX1-NEXT: vpaddw %xmm3, %xmm4, %xmm3 1288; AVX1-NEXT: vpaddw %xmm2, %xmm1, %xmm1 1289; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1290; AVX1-NEXT: retq 1291; 1292; AVX2-LABEL: test_arg_v32i16: 1293; AVX2: # %bb.0: 1294; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2 1295; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1296; AVX2-NEXT: vpaddw %ymm3, %ymm0, %ymm0 1297; AVX2-NEXT: vpaddw %ymm2, %ymm1, %ymm1 1298; AVX2-NEXT: retq 1299; 1300; AVX512F-LABEL: test_arg_v32i16: 1301; AVX512F: # %bb.0: 1302; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm2 1303; AVX512F-NEXT: vmovntdqa (%rdi), %ymm3 1304; AVX512F-NEXT: vpaddw %ymm3, %ymm0, %ymm0 1305; AVX512F-NEXT: vpaddw %ymm2, %ymm1, %ymm1 1306; AVX512F-NEXT: retq 1307; 1308; AVX512BW-LABEL: test_arg_v32i16: 1309; AVX512BW: # %bb.0: 1310; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm1 1311; AVX512BW-NEXT: vpaddw %zmm1, %zmm0, %zmm0 1312; AVX512BW-NEXT: retq 1313; 1314; AVX512VL-LABEL: test_arg_v32i16: 1315; AVX512VL: # %bb.0: 1316; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm2 1317; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm3 1318; AVX512VL-NEXT: vpaddw %ymm3, %ymm0, %ymm0 1319; AVX512VL-NEXT: vpaddw %ymm2, %ymm1, %ymm1 1320; AVX512VL-NEXT: retq 1321 %1 = load <32 x i16>, <32 x i16>* %src, align 64, !nontemporal !1 1322 %2 = add <32 x i16> %arg, %1 1323 ret <32 x i16> %2 1324} 1325 1326define <64 x i8> @test_arg_v64i8(<64 x i8> %arg, <64 x i8>* %src) { 1327; SSE2-LABEL: test_arg_v64i8: 1328; SSE2: # %bb.0: 1329; SSE2-NEXT: paddb (%rdi), %xmm0 1330; SSE2-NEXT: paddb 16(%rdi), %xmm1 1331; SSE2-NEXT: paddb 32(%rdi), %xmm2 1332; SSE2-NEXT: paddb 48(%rdi), %xmm3 1333; SSE2-NEXT: retq 1334; 1335; SSE41-LABEL: test_arg_v64i8: 1336; SSE41: # %bb.0: 1337; SSE41-NEXT: movntdqa 48(%rdi), %xmm4 1338; SSE41-NEXT: movntdqa 32(%rdi), %xmm5 1339; SSE41-NEXT: movntdqa 16(%rdi), %xmm6 1340; SSE41-NEXT: movntdqa (%rdi), %xmm7 1341; SSE41-NEXT: paddb %xmm7, %xmm0 1342; SSE41-NEXT: paddb %xmm6, %xmm1 1343; SSE41-NEXT: paddb %xmm5, %xmm2 1344; SSE41-NEXT: paddb %xmm4, %xmm3 1345; SSE41-NEXT: retq 1346; 1347; AVX1-LABEL: test_arg_v64i8: 1348; AVX1: # %bb.0: 1349; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm2 1350; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm3 1351; AVX1-NEXT: vmovntdqa (%rdi), %xmm4 1352; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm5 1353; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 1354; AVX1-NEXT: vpaddb %xmm5, %xmm6, %xmm5 1355; AVX1-NEXT: vpaddb %xmm4, %xmm0, %xmm0 1356; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0 1357; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 1358; AVX1-NEXT: vpaddb %xmm3, %xmm4, %xmm3 1359; AVX1-NEXT: vpaddb %xmm2, %xmm1, %xmm1 1360; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 1361; AVX1-NEXT: retq 1362; 1363; AVX2-LABEL: test_arg_v64i8: 1364; AVX2: # %bb.0: 1365; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm2 1366; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1367; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0 1368; AVX2-NEXT: vpaddb %ymm2, %ymm1, %ymm1 1369; AVX2-NEXT: retq 1370; 1371; AVX512F-LABEL: test_arg_v64i8: 1372; AVX512F: # %bb.0: 1373; AVX512F-NEXT: vmovntdqa 32(%rdi), %ymm2 1374; AVX512F-NEXT: vmovntdqa (%rdi), %ymm3 1375; AVX512F-NEXT: vpaddb %ymm3, %ymm0, %ymm0 1376; AVX512F-NEXT: vpaddb %ymm2, %ymm1, %ymm1 1377; AVX512F-NEXT: retq 1378; 1379; AVX512BW-LABEL: test_arg_v64i8: 1380; AVX512BW: # %bb.0: 1381; AVX512BW-NEXT: vmovntdqa (%rdi), %zmm1 1382; AVX512BW-NEXT: vpaddb %zmm1, %zmm0, %zmm0 1383; AVX512BW-NEXT: retq 1384; 1385; AVX512VL-LABEL: test_arg_v64i8: 1386; AVX512VL: # %bb.0: 1387; AVX512VL-NEXT: vmovntdqa 32(%rdi), %ymm2 1388; AVX512VL-NEXT: vmovntdqa (%rdi), %ymm3 1389; AVX512VL-NEXT: vpaddb %ymm3, %ymm0, %ymm0 1390; AVX512VL-NEXT: vpaddb %ymm2, %ymm1, %ymm1 1391; AVX512VL-NEXT: retq 1392 %1 = load <64 x i8>, <64 x i8>* %src, align 64, !nontemporal !1 1393 %2 = add <64 x i8> %arg, %1 1394 ret <64 x i8> %2 1395} 1396 1397 1398; Unaligned non-temporal loads (not supported) 1399 1400define <4 x float> @test_unaligned_v4f32(<4 x float>* %src) { 1401; SSE-LABEL: test_unaligned_v4f32: 1402; SSE: # %bb.0: 1403; SSE-NEXT: movups (%rdi), %xmm0 1404; SSE-NEXT: retq 1405; 1406; AVX-LABEL: test_unaligned_v4f32: 1407; AVX: # %bb.0: 1408; AVX-NEXT: vmovups (%rdi), %xmm0 1409; AVX-NEXT: retq 1410; 1411; AVX512-LABEL: test_unaligned_v4f32: 1412; AVX512: # %bb.0: 1413; AVX512-NEXT: vmovups (%rdi), %xmm0 1414; AVX512-NEXT: retq 1415 %1 = load <4 x float>, <4 x float>* %src, align 1, !nontemporal !1 1416 ret <4 x float> %1 1417} 1418 1419define <4 x i32> @test_unaligned_v4i32(<4 x i32>* %src) { 1420; SSE-LABEL: test_unaligned_v4i32: 1421; SSE: # %bb.0: 1422; SSE-NEXT: movups (%rdi), %xmm0 1423; SSE-NEXT: retq 1424; 1425; AVX-LABEL: test_unaligned_v4i32: 1426; AVX: # %bb.0: 1427; AVX-NEXT: vmovups (%rdi), %xmm0 1428; AVX-NEXT: retq 1429; 1430; AVX512-LABEL: test_unaligned_v4i32: 1431; AVX512: # %bb.0: 1432; AVX512-NEXT: vmovups (%rdi), %xmm0 1433; AVX512-NEXT: retq 1434 %1 = load <4 x i32>, <4 x i32>* %src, align 1, !nontemporal !1 1435 ret <4 x i32> %1 1436} 1437 1438define <2 x double> @test_unaligned_v2f64(<2 x double>* %src) { 1439; SSE-LABEL: test_unaligned_v2f64: 1440; SSE: # %bb.0: 1441; SSE-NEXT: movups (%rdi), %xmm0 1442; SSE-NEXT: retq 1443; 1444; AVX-LABEL: test_unaligned_v2f64: 1445; AVX: # %bb.0: 1446; AVX-NEXT: vmovups (%rdi), %xmm0 1447; AVX-NEXT: retq 1448; 1449; AVX512-LABEL: test_unaligned_v2f64: 1450; AVX512: # %bb.0: 1451; AVX512-NEXT: vmovups (%rdi), %xmm0 1452; AVX512-NEXT: retq 1453 %1 = load <2 x double>, <2 x double>* %src, align 1, !nontemporal !1 1454 ret <2 x double> %1 1455} 1456 1457define <2 x i64> @test_unaligned_v2i64(<2 x i64>* %src) { 1458; SSE-LABEL: test_unaligned_v2i64: 1459; SSE: # %bb.0: 1460; SSE-NEXT: movups (%rdi), %xmm0 1461; SSE-NEXT: retq 1462; 1463; AVX-LABEL: test_unaligned_v2i64: 1464; AVX: # %bb.0: 1465; AVX-NEXT: vmovups (%rdi), %xmm0 1466; AVX-NEXT: retq 1467; 1468; AVX512-LABEL: test_unaligned_v2i64: 1469; AVX512: # %bb.0: 1470; AVX512-NEXT: vmovups (%rdi), %xmm0 1471; AVX512-NEXT: retq 1472 %1 = load <2 x i64>, <2 x i64>* %src, align 1, !nontemporal !1 1473 ret <2 x i64> %1 1474} 1475 1476define <8 x i16> @test_unaligned_v8i16(<8 x i16>* %src) { 1477; SSE-LABEL: test_unaligned_v8i16: 1478; SSE: # %bb.0: 1479; SSE-NEXT: movups (%rdi), %xmm0 1480; SSE-NEXT: retq 1481; 1482; AVX-LABEL: test_unaligned_v8i16: 1483; AVX: # %bb.0: 1484; AVX-NEXT: vmovups (%rdi), %xmm0 1485; AVX-NEXT: retq 1486; 1487; AVX512-LABEL: test_unaligned_v8i16: 1488; AVX512: # %bb.0: 1489; AVX512-NEXT: vmovups (%rdi), %xmm0 1490; AVX512-NEXT: retq 1491 %1 = load <8 x i16>, <8 x i16>* %src, align 1, !nontemporal !1 1492 ret <8 x i16> %1 1493} 1494 1495define <16 x i8> @test_unaligned_v16i8(<16 x i8>* %src) { 1496; SSE-LABEL: test_unaligned_v16i8: 1497; SSE: # %bb.0: 1498; SSE-NEXT: movups (%rdi), %xmm0 1499; SSE-NEXT: retq 1500; 1501; AVX-LABEL: test_unaligned_v16i8: 1502; AVX: # %bb.0: 1503; AVX-NEXT: vmovups (%rdi), %xmm0 1504; AVX-NEXT: retq 1505; 1506; AVX512-LABEL: test_unaligned_v16i8: 1507; AVX512: # %bb.0: 1508; AVX512-NEXT: vmovups (%rdi), %xmm0 1509; AVX512-NEXT: retq 1510 %1 = load <16 x i8>, <16 x i8>* %src, align 1, !nontemporal !1 1511 ret <16 x i8> %1 1512} 1513 1514; And now YMM versions. 1515 1516define <8 x float> @test_unaligned_v8f32(<8 x float>* %src) { 1517; SSE-LABEL: test_unaligned_v8f32: 1518; SSE: # %bb.0: 1519; SSE-NEXT: movups (%rdi), %xmm0 1520; SSE-NEXT: movups 16(%rdi), %xmm1 1521; SSE-NEXT: retq 1522; 1523; AVX-LABEL: test_unaligned_v8f32: 1524; AVX: # %bb.0: 1525; AVX-NEXT: vmovups (%rdi), %ymm0 1526; AVX-NEXT: retq 1527; 1528; AVX512-LABEL: test_unaligned_v8f32: 1529; AVX512: # %bb.0: 1530; AVX512-NEXT: vmovups (%rdi), %ymm0 1531; AVX512-NEXT: retq 1532 %1 = load <8 x float>, <8 x float>* %src, align 1, !nontemporal !1 1533 ret <8 x float> %1 1534} 1535 1536define <8 x i32> @test_unaligned_v8i32(<8 x i32>* %src) { 1537; SSE-LABEL: test_unaligned_v8i32: 1538; SSE: # %bb.0: 1539; SSE-NEXT: movups (%rdi), %xmm0 1540; SSE-NEXT: movups 16(%rdi), %xmm1 1541; SSE-NEXT: retq 1542; 1543; AVX-LABEL: test_unaligned_v8i32: 1544; AVX: # %bb.0: 1545; AVX-NEXT: vmovups (%rdi), %ymm0 1546; AVX-NEXT: retq 1547; 1548; AVX512-LABEL: test_unaligned_v8i32: 1549; AVX512: # %bb.0: 1550; AVX512-NEXT: vmovups (%rdi), %ymm0 1551; AVX512-NEXT: retq 1552 %1 = load <8 x i32>, <8 x i32>* %src, align 1, !nontemporal !1 1553 ret <8 x i32> %1 1554} 1555 1556define <4 x double> @test_unaligned_v4f64(<4 x double>* %src) { 1557; SSE-LABEL: test_unaligned_v4f64: 1558; SSE: # %bb.0: 1559; SSE-NEXT: movups (%rdi), %xmm0 1560; SSE-NEXT: movups 16(%rdi), %xmm1 1561; SSE-NEXT: retq 1562; 1563; AVX-LABEL: test_unaligned_v4f64: 1564; AVX: # %bb.0: 1565; AVX-NEXT: vmovups (%rdi), %ymm0 1566; AVX-NEXT: retq 1567; 1568; AVX512-LABEL: test_unaligned_v4f64: 1569; AVX512: # %bb.0: 1570; AVX512-NEXT: vmovups (%rdi), %ymm0 1571; AVX512-NEXT: retq 1572 %1 = load <4 x double>, <4 x double>* %src, align 1, !nontemporal !1 1573 ret <4 x double> %1 1574} 1575 1576define <4 x i64> @test_unaligned_v4i64(<4 x i64>* %src) { 1577; SSE-LABEL: test_unaligned_v4i64: 1578; SSE: # %bb.0: 1579; SSE-NEXT: movups (%rdi), %xmm0 1580; SSE-NEXT: movups 16(%rdi), %xmm1 1581; SSE-NEXT: retq 1582; 1583; AVX-LABEL: test_unaligned_v4i64: 1584; AVX: # %bb.0: 1585; AVX-NEXT: vmovups (%rdi), %ymm0 1586; AVX-NEXT: retq 1587; 1588; AVX512-LABEL: test_unaligned_v4i64: 1589; AVX512: # %bb.0: 1590; AVX512-NEXT: vmovups (%rdi), %ymm0 1591; AVX512-NEXT: retq 1592 %1 = load <4 x i64>, <4 x i64>* %src, align 1, !nontemporal !1 1593 ret <4 x i64> %1 1594} 1595 1596define <16 x i16> @test_unaligned_v16i16(<16 x i16>* %src) { 1597; SSE-LABEL: test_unaligned_v16i16: 1598; SSE: # %bb.0: 1599; SSE-NEXT: movups (%rdi), %xmm0 1600; SSE-NEXT: movups 16(%rdi), %xmm1 1601; SSE-NEXT: retq 1602; 1603; AVX-LABEL: test_unaligned_v16i16: 1604; AVX: # %bb.0: 1605; AVX-NEXT: vmovups (%rdi), %ymm0 1606; AVX-NEXT: retq 1607; 1608; AVX512-LABEL: test_unaligned_v16i16: 1609; AVX512: # %bb.0: 1610; AVX512-NEXT: vmovups (%rdi), %ymm0 1611; AVX512-NEXT: retq 1612 %1 = load <16 x i16>, <16 x i16>* %src, align 1, !nontemporal !1 1613 ret <16 x i16> %1 1614} 1615 1616define <32 x i8> @test_unaligned_v32i8(<32 x i8>* %src) { 1617; SSE-LABEL: test_unaligned_v32i8: 1618; SSE: # %bb.0: 1619; SSE-NEXT: movups (%rdi), %xmm0 1620; SSE-NEXT: movups 16(%rdi), %xmm1 1621; SSE-NEXT: retq 1622; 1623; AVX-LABEL: test_unaligned_v32i8: 1624; AVX: # %bb.0: 1625; AVX-NEXT: vmovups (%rdi), %ymm0 1626; AVX-NEXT: retq 1627; 1628; AVX512-LABEL: test_unaligned_v32i8: 1629; AVX512: # %bb.0: 1630; AVX512-NEXT: vmovups (%rdi), %ymm0 1631; AVX512-NEXT: retq 1632 %1 = load <32 x i8>, <32 x i8>* %src, align 1, !nontemporal !1 1633 ret <32 x i8> %1 1634} 1635 1636; And now ZMM versions. 1637 1638define <16 x float> @test_unaligned_v16f32(<16 x float>* %src) { 1639; SSE-LABEL: test_unaligned_v16f32: 1640; SSE: # %bb.0: 1641; SSE-NEXT: movups (%rdi), %xmm0 1642; SSE-NEXT: movups 16(%rdi), %xmm1 1643; SSE-NEXT: movups 32(%rdi), %xmm2 1644; SSE-NEXT: movups 48(%rdi), %xmm3 1645; SSE-NEXT: retq 1646; 1647; AVX-LABEL: test_unaligned_v16f32: 1648; AVX: # %bb.0: 1649; AVX-NEXT: vmovups (%rdi), %ymm0 1650; AVX-NEXT: vmovups 32(%rdi), %ymm1 1651; AVX-NEXT: retq 1652; 1653; AVX512-LABEL: test_unaligned_v16f32: 1654; AVX512: # %bb.0: 1655; AVX512-NEXT: vmovups (%rdi), %zmm0 1656; AVX512-NEXT: retq 1657 %1 = load <16 x float>, <16 x float>* %src, align 1, !nontemporal !1 1658 ret <16 x float> %1 1659} 1660 1661define <16 x i32> @test_unaligned_v16i32(<16 x i32>* %src) { 1662; SSE-LABEL: test_unaligned_v16i32: 1663; SSE: # %bb.0: 1664; SSE-NEXT: movups (%rdi), %xmm0 1665; SSE-NEXT: movups 16(%rdi), %xmm1 1666; SSE-NEXT: movups 32(%rdi), %xmm2 1667; SSE-NEXT: movups 48(%rdi), %xmm3 1668; SSE-NEXT: retq 1669; 1670; AVX-LABEL: test_unaligned_v16i32: 1671; AVX: # %bb.0: 1672; AVX-NEXT: vmovups (%rdi), %ymm0 1673; AVX-NEXT: vmovups 32(%rdi), %ymm1 1674; AVX-NEXT: retq 1675; 1676; AVX512-LABEL: test_unaligned_v16i32: 1677; AVX512: # %bb.0: 1678; AVX512-NEXT: vmovups (%rdi), %zmm0 1679; AVX512-NEXT: retq 1680 %1 = load <16 x i32>, <16 x i32>* %src, align 1, !nontemporal !1 1681 ret <16 x i32> %1 1682} 1683 1684define <8 x double> @test_unaligned_v8f64(<8 x double>* %src) { 1685; SSE-LABEL: test_unaligned_v8f64: 1686; SSE: # %bb.0: 1687; SSE-NEXT: movups (%rdi), %xmm0 1688; SSE-NEXT: movups 16(%rdi), %xmm1 1689; SSE-NEXT: movups 32(%rdi), %xmm2 1690; SSE-NEXT: movups 48(%rdi), %xmm3 1691; SSE-NEXT: retq 1692; 1693; AVX-LABEL: test_unaligned_v8f64: 1694; AVX: # %bb.0: 1695; AVX-NEXT: vmovups (%rdi), %ymm0 1696; AVX-NEXT: vmovups 32(%rdi), %ymm1 1697; AVX-NEXT: retq 1698; 1699; AVX512-LABEL: test_unaligned_v8f64: 1700; AVX512: # %bb.0: 1701; AVX512-NEXT: vmovups (%rdi), %zmm0 1702; AVX512-NEXT: retq 1703 %1 = load <8 x double>, <8 x double>* %src, align 1, !nontemporal !1 1704 ret <8 x double> %1 1705} 1706 1707define <8 x i64> @test_unaligned_v8i64(<8 x i64>* %src) { 1708; SSE-LABEL: test_unaligned_v8i64: 1709; SSE: # %bb.0: 1710; SSE-NEXT: movups (%rdi), %xmm0 1711; SSE-NEXT: movups 16(%rdi), %xmm1 1712; SSE-NEXT: movups 32(%rdi), %xmm2 1713; SSE-NEXT: movups 48(%rdi), %xmm3 1714; SSE-NEXT: retq 1715; 1716; AVX-LABEL: test_unaligned_v8i64: 1717; AVX: # %bb.0: 1718; AVX-NEXT: vmovups (%rdi), %ymm0 1719; AVX-NEXT: vmovups 32(%rdi), %ymm1 1720; AVX-NEXT: retq 1721; 1722; AVX512-LABEL: test_unaligned_v8i64: 1723; AVX512: # %bb.0: 1724; AVX512-NEXT: vmovups (%rdi), %zmm0 1725; AVX512-NEXT: retq 1726 %1 = load <8 x i64>, <8 x i64>* %src, align 1, !nontemporal !1 1727 ret <8 x i64> %1 1728} 1729 1730define <32 x i16> @test_unaligned_v32i16(<32 x i16>* %src) { 1731; SSE-LABEL: test_unaligned_v32i16: 1732; SSE: # %bb.0: 1733; SSE-NEXT: movups (%rdi), %xmm0 1734; SSE-NEXT: movups 16(%rdi), %xmm1 1735; SSE-NEXT: movups 32(%rdi), %xmm2 1736; SSE-NEXT: movups 48(%rdi), %xmm3 1737; SSE-NEXT: retq 1738; 1739; AVX-LABEL: test_unaligned_v32i16: 1740; AVX: # %bb.0: 1741; AVX-NEXT: vmovups (%rdi), %ymm0 1742; AVX-NEXT: vmovups 32(%rdi), %ymm1 1743; AVX-NEXT: retq 1744; 1745; AVX512F-LABEL: test_unaligned_v32i16: 1746; AVX512F: # %bb.0: 1747; AVX512F-NEXT: vmovups (%rdi), %ymm0 1748; AVX512F-NEXT: vmovups 32(%rdi), %ymm1 1749; AVX512F-NEXT: retq 1750; 1751; AVX512BW-LABEL: test_unaligned_v32i16: 1752; AVX512BW: # %bb.0: 1753; AVX512BW-NEXT: vmovups (%rdi), %zmm0 1754; AVX512BW-NEXT: retq 1755; 1756; AVX512VL-LABEL: test_unaligned_v32i16: 1757; AVX512VL: # %bb.0: 1758; AVX512VL-NEXT: vmovups (%rdi), %ymm0 1759; AVX512VL-NEXT: vmovups 32(%rdi), %ymm1 1760; AVX512VL-NEXT: retq 1761 %1 = load <32 x i16>, <32 x i16>* %src, align 1, !nontemporal !1 1762 ret <32 x i16> %1 1763} 1764 1765define <64 x i8> @test_unaligned_v64i8(<64 x i8>* %src) { 1766; SSE-LABEL: test_unaligned_v64i8: 1767; SSE: # %bb.0: 1768; SSE-NEXT: movups (%rdi), %xmm0 1769; SSE-NEXT: movups 16(%rdi), %xmm1 1770; SSE-NEXT: movups 32(%rdi), %xmm2 1771; SSE-NEXT: movups 48(%rdi), %xmm3 1772; SSE-NEXT: retq 1773; 1774; AVX-LABEL: test_unaligned_v64i8: 1775; AVX: # %bb.0: 1776; AVX-NEXT: vmovups (%rdi), %ymm0 1777; AVX-NEXT: vmovups 32(%rdi), %ymm1 1778; AVX-NEXT: retq 1779; 1780; AVX512F-LABEL: test_unaligned_v64i8: 1781; AVX512F: # %bb.0: 1782; AVX512F-NEXT: vmovups (%rdi), %ymm0 1783; AVX512F-NEXT: vmovups 32(%rdi), %ymm1 1784; AVX512F-NEXT: retq 1785; 1786; AVX512BW-LABEL: test_unaligned_v64i8: 1787; AVX512BW: # %bb.0: 1788; AVX512BW-NEXT: vmovups (%rdi), %zmm0 1789; AVX512BW-NEXT: retq 1790; 1791; AVX512VL-LABEL: test_unaligned_v64i8: 1792; AVX512VL: # %bb.0: 1793; AVX512VL-NEXT: vmovups (%rdi), %ymm0 1794; AVX512VL-NEXT: vmovups 32(%rdi), %ymm1 1795; AVX512VL-NEXT: retq 1796 %1 = load <64 x i8>, <64 x i8>* %src, align 1, !nontemporal !1 1797 ret <64 x i8> %1 1798} 1799 1800define <16 x i32> @test_masked_v16i32(i8 * %addr, <16 x i32> %old, <16 x i32> %mask1) { 1801; SSE2-LABEL: test_masked_v16i32: 1802; SSE2: # %bb.0: 1803; SSE2-NEXT: movdqa %xmm0, %xmm10 1804; SSE2-NEXT: pxor %xmm12, %xmm12 1805; SSE2-NEXT: pcmpeqd %xmm12, %xmm7 1806; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 1807; SSE2-NEXT: movdqa %xmm7, %xmm8 1808; SSE2-NEXT: pxor %xmm0, %xmm8 1809; SSE2-NEXT: pcmpeqd %xmm12, %xmm6 1810; SSE2-NEXT: movdqa %xmm6, %xmm9 1811; SSE2-NEXT: pxor %xmm0, %xmm9 1812; SSE2-NEXT: pcmpeqd %xmm12, %xmm5 1813; SSE2-NEXT: movdqa %xmm5, %xmm11 1814; SSE2-NEXT: pxor %xmm0, %xmm11 1815; SSE2-NEXT: pcmpeqd %xmm12, %xmm4 1816; SSE2-NEXT: pxor %xmm4, %xmm0 1817; SSE2-NEXT: pandn (%rdi), %xmm4 1818; SSE2-NEXT: pandn %xmm10, %xmm0 1819; SSE2-NEXT: por %xmm4, %xmm0 1820; SSE2-NEXT: pandn 16(%rdi), %xmm5 1821; SSE2-NEXT: pandn %xmm1, %xmm11 1822; SSE2-NEXT: por %xmm5, %xmm11 1823; SSE2-NEXT: pandn 32(%rdi), %xmm6 1824; SSE2-NEXT: pandn %xmm2, %xmm9 1825; SSE2-NEXT: por %xmm6, %xmm9 1826; SSE2-NEXT: pandn 48(%rdi), %xmm7 1827; SSE2-NEXT: pandn %xmm3, %xmm8 1828; SSE2-NEXT: por %xmm7, %xmm8 1829; SSE2-NEXT: movdqa %xmm11, %xmm1 1830; SSE2-NEXT: movdqa %xmm9, %xmm2 1831; SSE2-NEXT: movdqa %xmm8, %xmm3 1832; SSE2-NEXT: retq 1833; 1834; SSE41-LABEL: test_masked_v16i32: 1835; SSE41: # %bb.0: 1836; SSE41-NEXT: movdqa %xmm0, %xmm8 1837; SSE41-NEXT: pxor %xmm0, %xmm0 1838; SSE41-NEXT: pcmpeqd %xmm0, %xmm7 1839; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 1840; SSE41-NEXT: pxor %xmm9, %xmm7 1841; SSE41-NEXT: pcmpeqd %xmm0, %xmm6 1842; SSE41-NEXT: pxor %xmm9, %xmm6 1843; SSE41-NEXT: pcmpeqd %xmm0, %xmm5 1844; SSE41-NEXT: pxor %xmm9, %xmm5 1845; SSE41-NEXT: pcmpeqd %xmm4, %xmm0 1846; SSE41-NEXT: pxor %xmm9, %xmm0 1847; SSE41-NEXT: movntdqa 48(%rdi), %xmm9 1848; SSE41-NEXT: movntdqa 32(%rdi), %xmm10 1849; SSE41-NEXT: movntdqa 16(%rdi), %xmm11 1850; SSE41-NEXT: movntdqa (%rdi), %xmm4 1851; SSE41-NEXT: blendvps %xmm0, %xmm4, %xmm8 1852; SSE41-NEXT: movdqa %xmm5, %xmm0 1853; SSE41-NEXT: blendvps %xmm0, %xmm11, %xmm1 1854; SSE41-NEXT: movdqa %xmm6, %xmm0 1855; SSE41-NEXT: blendvps %xmm0, %xmm10, %xmm2 1856; SSE41-NEXT: movdqa %xmm7, %xmm0 1857; SSE41-NEXT: blendvps %xmm0, %xmm9, %xmm3 1858; SSE41-NEXT: movaps %xmm8, %xmm0 1859; SSE41-NEXT: retq 1860; 1861; AVX1-LABEL: test_masked_v16i32: 1862; AVX1: # %bb.0: 1863; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 1864; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5 1865; AVX1-NEXT: vpcmpeqd %xmm5, %xmm4, %xmm4 1866; AVX1-NEXT: vpcmpeqd %xmm6, %xmm6, %xmm6 1867; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm4 1868; AVX1-NEXT: vpcmpeqd %xmm5, %xmm3, %xmm3 1869; AVX1-NEXT: vpxor %xmm6, %xmm3, %xmm3 1870; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3 1871; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 1872; AVX1-NEXT: vpcmpeqd %xmm5, %xmm4, %xmm4 1873; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm4 1874; AVX1-NEXT: vpcmpeqd %xmm5, %xmm2, %xmm2 1875; AVX1-NEXT: vpxor %xmm6, %xmm2, %xmm2 1876; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm2, %ymm2 1877; AVX1-NEXT: vmovntdqa 32(%rdi), %xmm4 1878; AVX1-NEXT: vmovntdqa 48(%rdi), %xmm5 1879; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm4, %ymm4 1880; AVX1-NEXT: vblendvps %ymm3, %ymm4, %ymm1, %ymm1 1881; AVX1-NEXT: vmovntdqa (%rdi), %xmm3 1882; AVX1-NEXT: vmovntdqa 16(%rdi), %xmm4 1883; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3 1884; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0 1885; AVX1-NEXT: retq 1886; 1887; AVX2-LABEL: test_masked_v16i32: 1888; AVX2: # %bb.0: 1889; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 1890; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm3 1891; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 1892; AVX2-NEXT: vpxor %ymm5, %ymm3, %ymm3 1893; AVX2-NEXT: vpcmpeqd %ymm4, %ymm2, %ymm2 1894; AVX2-NEXT: vpxor %ymm5, %ymm2, %ymm2 1895; AVX2-NEXT: vmovntdqa 32(%rdi), %ymm4 1896; AVX2-NEXT: vblendvps %ymm3, %ymm4, %ymm1, %ymm1 1897; AVX2-NEXT: vmovntdqa (%rdi), %ymm3 1898; AVX2-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0 1899; AVX2-NEXT: retq 1900; 1901; AVX512-LABEL: test_masked_v16i32: 1902; AVX512: # %bb.0: 1903; AVX512-NEXT: vptestmd %zmm1, %zmm1, %k1 1904; AVX512-NEXT: vmovntdqa (%rdi), %zmm1 1905; AVX512-NEXT: vmovdqa32 %zmm1, %zmm0 {%k1} 1906; AVX512-NEXT: retq 1907 %mask = icmp ne <16 x i32> %mask1, zeroinitializer 1908 %vaddr = bitcast i8* %addr to <16 x i32>* 1909 %r = load <16 x i32>, <16 x i32>* %vaddr, align 64, !nontemporal !1 1910 %res = select <16 x i1> %mask, <16 x i32> %r, <16 x i32> %old 1911 ret <16 x i32>%res 1912} 1913 1914!1 = !{i32 1} 1915