654 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=X86,X86-SSE3; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=X86,X86-AVX,X86-AVX14; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=X86,X86-AVX,X86-AVX25; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=X86,X86-AVX512,X86-AVX512VL6; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512fp16,+avx512vl | FileCheck %s --check-prefixes=X86,X86-AVX512,X86-AVX512FP167; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X86,X86-AVX512,X86-AVX512VLDQ8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=X64,X64-SSE9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX110; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX211; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=X64,X64-AVX512,X64-AVX512VL12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512fp16,+avx512vl | FileCheck %s --check-prefixes=X64,X64-AVX512,X64-AVX512FP1613; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64,X64-AVX512,X64-AVX512VLDQ14 15;16; 128-bit Vectors17;18 19define <2 x double> @fneg_v2f64(<2 x double> %p) nounwind {20; X86-SSE-LABEL: fneg_v2f64:21; X86-SSE: # %bb.0:22; X86-SSE-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm023; X86-SSE-NEXT: retl24;25; X86-AVX-LABEL: fneg_v2f64:26; X86-AVX: # %bb.0:27; X86-AVX-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm028; X86-AVX-NEXT: retl29;30; X86-AVX512VL-LABEL: fneg_v2f64:31; X86-AVX512VL: # %bb.0:32; X86-AVX512VL-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm033; X86-AVX512VL-NEXT: retl34;35; X86-AVX512FP16-LABEL: fneg_v2f64:36; X86-AVX512FP16: # %bb.0:37; X86-AVX512FP16-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm038; X86-AVX512FP16-NEXT: retl39;40; X86-AVX512VLDQ-LABEL: fneg_v2f64:41; X86-AVX512VLDQ: # %bb.0:42; X86-AVX512VLDQ-NEXT: vxorpd {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm043; X86-AVX512VLDQ-NEXT: retl44;45; X64-SSE-LABEL: fneg_v2f64:46; X64-SSE: # %bb.0:47; X64-SSE-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm048; X64-SSE-NEXT: retq49;50; X64-AVX-LABEL: fneg_v2f64:51; X64-AVX: # %bb.0:52; X64-AVX-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm053; X64-AVX-NEXT: retq54;55; X64-AVX512VL-LABEL: fneg_v2f64:56; X64-AVX512VL: # %bb.0:57; X64-AVX512VL-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm058; X64-AVX512VL-NEXT: retq59;60; X64-AVX512FP16-LABEL: fneg_v2f64:61; X64-AVX512FP16: # %bb.0:62; X64-AVX512FP16-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm063; X64-AVX512FP16-NEXT: retq64;65; X64-AVX512VLDQ-LABEL: fneg_v2f64:66; X64-AVX512VLDQ: # %bb.0:67; X64-AVX512VLDQ-NEXT: vxorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm068; X64-AVX512VLDQ-NEXT: retq69 %t = fsub <2 x double> <double -0.0, double -0.0>, %p70 ret <2 x double> %t71}72 73define <4 x float> @fneg_v4f32(<4 x float> %p) nounwind {74; X86-SSE-LABEL: fneg_v4f32:75; X86-SSE: # %bb.0:76; X86-SSE-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm077; X86-SSE-NEXT: retl78;79; X86-AVX1-LABEL: fneg_v4f32:80; X86-AVX1: # %bb.0:81; X86-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm082; X86-AVX1-NEXT: retl83;84; X86-AVX2-LABEL: fneg_v4f32:85; X86-AVX2: # %bb.0:86; X86-AVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]87; X86-AVX2-NEXT: vxorps %xmm1, %xmm0, %xmm088; X86-AVX2-NEXT: retl89;90; X86-AVX512VL-LABEL: fneg_v4f32:91; X86-AVX512VL: # %bb.0:92; X86-AVX512VL-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm093; X86-AVX512VL-NEXT: retl94;95; X86-AVX512FP16-LABEL: fneg_v4f32:96; X86-AVX512FP16: # %bb.0:97; X86-AVX512FP16-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm098; X86-AVX512FP16-NEXT: retl99;100; X86-AVX512VLDQ-LABEL: fneg_v4f32:101; X86-AVX512VLDQ: # %bb.0:102; X86-AVX512VLDQ-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0103; X86-AVX512VLDQ-NEXT: retl104;105; X64-SSE-LABEL: fneg_v4f32:106; X64-SSE: # %bb.0:107; X64-SSE-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0108; X64-SSE-NEXT: retq109;110; X64-AVX1-LABEL: fneg_v4f32:111; X64-AVX1: # %bb.0:112; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0113; X64-AVX1-NEXT: retq114;115; X64-AVX2-LABEL: fneg_v4f32:116; X64-AVX2: # %bb.0:117; X64-AVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]118; X64-AVX2-NEXT: vxorps %xmm1, %xmm0, %xmm0119; X64-AVX2-NEXT: retq120;121; X64-AVX512VL-LABEL: fneg_v4f32:122; X64-AVX512VL: # %bb.0:123; X64-AVX512VL-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0124; X64-AVX512VL-NEXT: retq125;126; X64-AVX512FP16-LABEL: fneg_v4f32:127; X64-AVX512FP16: # %bb.0:128; X64-AVX512FP16-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0129; X64-AVX512FP16-NEXT: retq130;131; X64-AVX512VLDQ-LABEL: fneg_v4f32:132; X64-AVX512VLDQ: # %bb.0:133; X64-AVX512VLDQ-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0134; X64-AVX512VLDQ-NEXT: retq135 %t = fsub <4 x float> <float -0.0, float -0.0, float -0.0, float -0.0>, %p136 ret <4 x float> %t137}138 139define <8 x half> @fneg_v8f16(ptr %p) nounwind {140; X86-SSE-LABEL: fneg_v8f16:141; X86-SSE: # %bb.0:142; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax143; X86-SSE-NEXT: movaps (%eax), %xmm0144; X86-SSE-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0145; X86-SSE-NEXT: retl146;147; X86-AVX1-LABEL: fneg_v8f16:148; X86-AVX1: # %bb.0:149; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax150; X86-AVX1-NEXT: vmovaps (%eax), %xmm0151; X86-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0152; X86-AVX1-NEXT: retl153;154; X86-AVX2-LABEL: fneg_v8f16:155; X86-AVX2: # %bb.0:156; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax157; X86-AVX2-NEXT: vpbroadcastw {{.*#+}} xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]158; X86-AVX2-NEXT: vpxor (%eax), %xmm0, %xmm0159; X86-AVX2-NEXT: retl160;161; X86-AVX512-LABEL: fneg_v8f16:162; X86-AVX512: # %bb.0:163; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax164; X86-AVX512-NEXT: vpbroadcastw {{.*#+}} xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]165; X86-AVX512-NEXT: vpxor (%eax), %xmm0, %xmm0166; X86-AVX512-NEXT: retl167;168; X64-SSE-LABEL: fneg_v8f16:169; X64-SSE: # %bb.0:170; X64-SSE-NEXT: movaps (%rdi), %xmm0171; X64-SSE-NEXT: xorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0172; X64-SSE-NEXT: retq173;174; X64-AVX1-LABEL: fneg_v8f16:175; X64-AVX1: # %bb.0:176; X64-AVX1-NEXT: vmovaps (%rdi), %xmm0177; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0178; X64-AVX1-NEXT: retq179;180; X64-AVX2-LABEL: fneg_v8f16:181; X64-AVX2: # %bb.0:182; X64-AVX2-NEXT: vpbroadcastw {{.*#+}} xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]183; X64-AVX2-NEXT: vpxor (%rdi), %xmm0, %xmm0184; X64-AVX2-NEXT: retq185;186; X64-AVX512-LABEL: fneg_v8f16:187; X64-AVX512: # %bb.0:188; X64-AVX512-NEXT: vpbroadcastw {{.*#+}} xmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]189; X64-AVX512-NEXT: vpxor (%rdi), %xmm0, %xmm0190; X64-AVX512-NEXT: retq191 %v = load <8 x half>, ptr %p, align 16192 %nnv = fsub <8 x half> <half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0>, %v193 ret <8 x half> %nnv194}195 196;197; 256-bit Vectors198;199 200define <4 x double> @fneg_v4f64(<4 x double> %p) nounwind {201; X86-SSE-LABEL: fneg_v4f64:202; X86-SSE: # %bb.0:203; X86-SSE-NEXT: movaps {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]204; X86-SSE-NEXT: xorps %xmm2, %xmm0205; X86-SSE-NEXT: xorps %xmm2, %xmm1206; X86-SSE-NEXT: retl207;208; X86-AVX1-LABEL: fneg_v4f64:209; X86-AVX1: # %bb.0:210; X86-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0211; X86-AVX1-NEXT: retl212;213; X86-AVX2-LABEL: fneg_v4f64:214; X86-AVX2: # %bb.0:215; X86-AVX2-NEXT: vbroadcastsd {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]216; X86-AVX2-NEXT: vxorps %ymm1, %ymm0, %ymm0217; X86-AVX2-NEXT: retl218;219; X86-AVX512VL-LABEL: fneg_v4f64:220; X86-AVX512VL: # %bb.0:221; X86-AVX512VL-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0222; X86-AVX512VL-NEXT: retl223;224; X86-AVX512FP16-LABEL: fneg_v4f64:225; X86-AVX512FP16: # %bb.0:226; X86-AVX512FP16-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0227; X86-AVX512FP16-NEXT: retl228;229; X86-AVX512VLDQ-LABEL: fneg_v4f64:230; X86-AVX512VLDQ: # %bb.0:231; X86-AVX512VLDQ-NEXT: vxorpd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0232; X86-AVX512VLDQ-NEXT: retl233;234; X64-SSE-LABEL: fneg_v4f64:235; X64-SSE: # %bb.0:236; X64-SSE-NEXT: movaps {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]237; X64-SSE-NEXT: xorps %xmm2, %xmm0238; X64-SSE-NEXT: xorps %xmm2, %xmm1239; X64-SSE-NEXT: retq240;241; X64-AVX1-LABEL: fneg_v4f64:242; X64-AVX1: # %bb.0:243; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0244; X64-AVX1-NEXT: retq245;246; X64-AVX2-LABEL: fneg_v4f64:247; X64-AVX2: # %bb.0:248; X64-AVX2-NEXT: vbroadcastsd {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]249; X64-AVX2-NEXT: vxorps %ymm1, %ymm0, %ymm0250; X64-AVX2-NEXT: retq251;252; X64-AVX512VL-LABEL: fneg_v4f64:253; X64-AVX512VL: # %bb.0:254; X64-AVX512VL-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0255; X64-AVX512VL-NEXT: retq256;257; X64-AVX512FP16-LABEL: fneg_v4f64:258; X64-AVX512FP16: # %bb.0:259; X64-AVX512FP16-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0260; X64-AVX512FP16-NEXT: retq261;262; X64-AVX512VLDQ-LABEL: fneg_v4f64:263; X64-AVX512VLDQ: # %bb.0:264; X64-AVX512VLDQ-NEXT: vxorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0265; X64-AVX512VLDQ-NEXT: retq266 %t = fsub <4 x double> <double -0.0, double -0.0, double -0.0, double -0.0>, %p267 ret <4 x double> %t268}269 270define <8 x float> @fneg_v8f32(<8 x float> %p) nounwind {271; X86-SSE-LABEL: fneg_v8f32:272; X86-SSE: # %bb.0:273; X86-SSE-NEXT: movaps {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]274; X86-SSE-NEXT: xorps %xmm2, %xmm0275; X86-SSE-NEXT: xorps %xmm2, %xmm1276; X86-SSE-NEXT: retl277;278; X86-AVX1-LABEL: fneg_v8f32:279; X86-AVX1: # %bb.0:280; X86-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0281; X86-AVX1-NEXT: retl282;283; X86-AVX2-LABEL: fneg_v8f32:284; X86-AVX2: # %bb.0:285; X86-AVX2-NEXT: vbroadcastss {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]286; X86-AVX2-NEXT: vxorps %ymm1, %ymm0, %ymm0287; X86-AVX2-NEXT: retl288;289; X86-AVX512VL-LABEL: fneg_v8f32:290; X86-AVX512VL: # %bb.0:291; X86-AVX512VL-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0292; X86-AVX512VL-NEXT: retl293;294; X86-AVX512FP16-LABEL: fneg_v8f32:295; X86-AVX512FP16: # %bb.0:296; X86-AVX512FP16-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0297; X86-AVX512FP16-NEXT: retl298;299; X86-AVX512VLDQ-LABEL: fneg_v8f32:300; X86-AVX512VLDQ: # %bb.0:301; X86-AVX512VLDQ-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0302; X86-AVX512VLDQ-NEXT: retl303;304; X64-SSE-LABEL: fneg_v8f32:305; X64-SSE: # %bb.0:306; X64-SSE-NEXT: movaps {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]307; X64-SSE-NEXT: xorps %xmm2, %xmm0308; X64-SSE-NEXT: xorps %xmm2, %xmm1309; X64-SSE-NEXT: retq310;311; X64-AVX1-LABEL: fneg_v8f32:312; X64-AVX1: # %bb.0:313; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0314; X64-AVX1-NEXT: retq315;316; X64-AVX2-LABEL: fneg_v8f32:317; X64-AVX2: # %bb.0:318; X64-AVX2-NEXT: vbroadcastss {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]319; X64-AVX2-NEXT: vxorps %ymm1, %ymm0, %ymm0320; X64-AVX2-NEXT: retq321;322; X64-AVX512VL-LABEL: fneg_v8f32:323; X64-AVX512VL: # %bb.0:324; X64-AVX512VL-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0325; X64-AVX512VL-NEXT: retq326;327; X64-AVX512FP16-LABEL: fneg_v8f32:328; X64-AVX512FP16: # %bb.0:329; X64-AVX512FP16-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0330; X64-AVX512FP16-NEXT: retq331;332; X64-AVX512VLDQ-LABEL: fneg_v8f32:333; X64-AVX512VLDQ: # %bb.0:334; X64-AVX512VLDQ-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0335; X64-AVX512VLDQ-NEXT: retq336 %t = fsub <8 x float> <float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0>, %p337 ret <8 x float> %t338}339 340define <16 x half> @fneg_v16f16(ptr %p) nounwind {341; X86-SSE-LABEL: fneg_v16f16:342; X86-SSE: # %bb.0:343; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax344; X86-SSE-NEXT: movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]345; X86-SSE-NEXT: movaps (%eax), %xmm0346; X86-SSE-NEXT: xorps %xmm1, %xmm0347; X86-SSE-NEXT: xorps 16(%eax), %xmm1348; X86-SSE-NEXT: retl349;350; X86-AVX1-LABEL: fneg_v16f16:351; X86-AVX1: # %bb.0:352; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax353; X86-AVX1-NEXT: vmovups (%eax), %ymm0354; X86-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0355; X86-AVX1-NEXT: retl356;357; X86-AVX2-LABEL: fneg_v16f16:358; X86-AVX2: # %bb.0:359; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax360; X86-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]361; X86-AVX2-NEXT: vpxor (%eax), %ymm0, %ymm0362; X86-AVX2-NEXT: retl363;364; X86-AVX512-LABEL: fneg_v16f16:365; X86-AVX512: # %bb.0:366; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax367; X86-AVX512-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]368; X86-AVX512-NEXT: vpxor (%eax), %ymm0, %ymm0369; X86-AVX512-NEXT: retl370;371; X64-SSE-LABEL: fneg_v16f16:372; X64-SSE: # %bb.0:373; X64-SSE-NEXT: movaps {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]374; X64-SSE-NEXT: movaps (%rdi), %xmm0375; X64-SSE-NEXT: xorps %xmm1, %xmm0376; X64-SSE-NEXT: xorps 16(%rdi), %xmm1377; X64-SSE-NEXT: retq378;379; X64-AVX1-LABEL: fneg_v16f16:380; X64-AVX1: # %bb.0:381; X64-AVX1-NEXT: vmovups (%rdi), %ymm0382; X64-AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0383; X64-AVX1-NEXT: retq384;385; X64-AVX2-LABEL: fneg_v16f16:386; X64-AVX2: # %bb.0:387; X64-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]388; X64-AVX2-NEXT: vpxor (%rdi), %ymm0, %ymm0389; X64-AVX2-NEXT: retq390;391; X64-AVX512-LABEL: fneg_v16f16:392; X64-AVX512: # %bb.0:393; X64-AVX512-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]394; X64-AVX512-NEXT: vpxor (%rdi), %ymm0, %ymm0395; X64-AVX512-NEXT: retq396 %v = load <16 x half>, ptr %p, align 16397 %nnv = fsub <16 x half> <half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0>, %v398 ret <16 x half> %nnv399}400 401;402; 512-bit Vectors403;404 405define <8 x double> @fneg_v8f64(<8 x double> %p) nounwind {406; X86-SSE-LABEL: fneg_v8f64:407; X86-SSE: # %bb.0:408; X86-SSE-NEXT: pushl %ebp409; X86-SSE-NEXT: movl %esp, %ebp410; X86-SSE-NEXT: andl $-16, %esp411; X86-SSE-NEXT: subl $16, %esp412; X86-SSE-NEXT: movaps {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0]413; X86-SSE-NEXT: xorps %xmm3, %xmm0414; X86-SSE-NEXT: xorps %xmm3, %xmm1415; X86-SSE-NEXT: xorps %xmm3, %xmm2416; X86-SSE-NEXT: xorps 8(%ebp), %xmm3417; X86-SSE-NEXT: movl %ebp, %esp418; X86-SSE-NEXT: popl %ebp419; X86-SSE-NEXT: retl420;421; X86-AVX-LABEL: fneg_v8f64:422; X86-AVX: # %bb.0:423; X86-AVX-NEXT: vbroadcastsd {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]424; X86-AVX-NEXT: vxorps %ymm2, %ymm0, %ymm0425; X86-AVX-NEXT: vxorps %ymm2, %ymm1, %ymm1426; X86-AVX-NEXT: retl427;428; X86-AVX512VL-LABEL: fneg_v8f64:429; X86-AVX512VL: # %bb.0:430; X86-AVX512VL-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0431; X86-AVX512VL-NEXT: retl432;433; X86-AVX512FP16-LABEL: fneg_v8f64:434; X86-AVX512FP16: # %bb.0:435; X86-AVX512FP16-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0436; X86-AVX512FP16-NEXT: retl437;438; X86-AVX512VLDQ-LABEL: fneg_v8f64:439; X86-AVX512VLDQ: # %bb.0:440; X86-AVX512VLDQ-NEXT: vxorpd {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0441; X86-AVX512VLDQ-NEXT: retl442;443; X64-SSE-LABEL: fneg_v8f64:444; X64-SSE: # %bb.0:445; X64-SSE-NEXT: movaps {{.*#+}} xmm4 = [-0.0E+0,-0.0E+0]446; X64-SSE-NEXT: xorps %xmm4, %xmm0447; X64-SSE-NEXT: xorps %xmm4, %xmm1448; X64-SSE-NEXT: xorps %xmm4, %xmm2449; X64-SSE-NEXT: xorps %xmm4, %xmm3450; X64-SSE-NEXT: retq451;452; X64-AVX-LABEL: fneg_v8f64:453; X64-AVX: # %bb.0:454; X64-AVX-NEXT: vbroadcastsd {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]455; X64-AVX-NEXT: vxorps %ymm2, %ymm0, %ymm0456; X64-AVX-NEXT: vxorps %ymm2, %ymm1, %ymm1457; X64-AVX-NEXT: retq458;459; X64-AVX512VL-LABEL: fneg_v8f64:460; X64-AVX512VL: # %bb.0:461; X64-AVX512VL-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0462; X64-AVX512VL-NEXT: retq463;464; X64-AVX512FP16-LABEL: fneg_v8f64:465; X64-AVX512FP16: # %bb.0:466; X64-AVX512FP16-NEXT: vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0467; X64-AVX512FP16-NEXT: retq468;469; X64-AVX512VLDQ-LABEL: fneg_v8f64:470; X64-AVX512VLDQ: # %bb.0:471; X64-AVX512VLDQ-NEXT: vxorpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0472; X64-AVX512VLDQ-NEXT: retq473 %t = fsub <8 x double> <double -0.0, double -0.0, double -0.0, double -0.0, double -0.0, double -0.0, double -0.0, double -0.0>, %p474 ret <8 x double> %t475}476 477define <16 x float> @fneg_v16f32(<16 x float> %p) nounwind {478; X86-SSE-LABEL: fneg_v16f32:479; X86-SSE: # %bb.0:480; X86-SSE-NEXT: pushl %ebp481; X86-SSE-NEXT: movl %esp, %ebp482; X86-SSE-NEXT: andl $-16, %esp483; X86-SSE-NEXT: subl $16, %esp484; X86-SSE-NEXT: movaps {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]485; X86-SSE-NEXT: xorps %xmm3, %xmm0486; X86-SSE-NEXT: xorps %xmm3, %xmm1487; X86-SSE-NEXT: xorps %xmm3, %xmm2488; X86-SSE-NEXT: xorps 8(%ebp), %xmm3489; X86-SSE-NEXT: movl %ebp, %esp490; X86-SSE-NEXT: popl %ebp491; X86-SSE-NEXT: retl492;493; X86-AVX-LABEL: fneg_v16f32:494; X86-AVX: # %bb.0:495; X86-AVX-NEXT: vbroadcastss {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]496; X86-AVX-NEXT: vxorps %ymm2, %ymm0, %ymm0497; X86-AVX-NEXT: vxorps %ymm2, %ymm1, %ymm1498; X86-AVX-NEXT: retl499;500; X86-AVX512VL-LABEL: fneg_v16f32:501; X86-AVX512VL: # %bb.0:502; X86-AVX512VL-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0503; X86-AVX512VL-NEXT: retl504;505; X86-AVX512FP16-LABEL: fneg_v16f32:506; X86-AVX512FP16: # %bb.0:507; X86-AVX512FP16-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0508; X86-AVX512FP16-NEXT: retl509;510; X86-AVX512VLDQ-LABEL: fneg_v16f32:511; X86-AVX512VLDQ: # %bb.0:512; X86-AVX512VLDQ-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0513; X86-AVX512VLDQ-NEXT: retl514;515; X64-SSE-LABEL: fneg_v16f32:516; X64-SSE: # %bb.0:517; X64-SSE-NEXT: movaps {{.*#+}} xmm4 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]518; X64-SSE-NEXT: xorps %xmm4, %xmm0519; X64-SSE-NEXT: xorps %xmm4, %xmm1520; X64-SSE-NEXT: xorps %xmm4, %xmm2521; X64-SSE-NEXT: xorps %xmm4, %xmm3522; X64-SSE-NEXT: retq523;524; X64-AVX-LABEL: fneg_v16f32:525; X64-AVX: # %bb.0:526; X64-AVX-NEXT: vbroadcastss {{.*#+}} ymm2 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]527; X64-AVX-NEXT: vxorps %ymm2, %ymm0, %ymm0528; X64-AVX-NEXT: vxorps %ymm2, %ymm1, %ymm1529; X64-AVX-NEXT: retq530;531; X64-AVX512VL-LABEL: fneg_v16f32:532; X64-AVX512VL: # %bb.0:533; X64-AVX512VL-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0534; X64-AVX512VL-NEXT: retq535;536; X64-AVX512FP16-LABEL: fneg_v16f32:537; X64-AVX512FP16: # %bb.0:538; X64-AVX512FP16-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0539; X64-AVX512FP16-NEXT: retq540;541; X64-AVX512VLDQ-LABEL: fneg_v16f32:542; X64-AVX512VLDQ: # %bb.0:543; X64-AVX512VLDQ-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0544; X64-AVX512VLDQ-NEXT: retq545 %t = fsub <16 x float> <float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0, float -0.0>, %p546 ret <16 x float> %t547}548 549define <32 x half> @fneg_v32f16(ptr %p) nounwind {550; X86-SSE-LABEL: fneg_v32f16:551; X86-SSE: # %bb.0:552; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax553; X86-SSE-NEXT: movaps {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]554; X86-SSE-NEXT: movaps (%eax), %xmm0555; X86-SSE-NEXT: xorps %xmm3, %xmm0556; X86-SSE-NEXT: movaps 16(%eax), %xmm1557; X86-SSE-NEXT: xorps %xmm3, %xmm1558; X86-SSE-NEXT: movaps 32(%eax), %xmm2559; X86-SSE-NEXT: xorps %xmm3, %xmm2560; X86-SSE-NEXT: xorps 48(%eax), %xmm3561; X86-SSE-NEXT: retl562;563; X86-AVX1-LABEL: fneg_v32f16:564; X86-AVX1: # %bb.0:565; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax566; X86-AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]567; X86-AVX1-NEXT: vxorps (%eax), %ymm1, %ymm0568; X86-AVX1-NEXT: vxorps 32(%eax), %ymm1, %ymm1569; X86-AVX1-NEXT: retl570;571; X86-AVX2-LABEL: fneg_v32f16:572; X86-AVX2: # %bb.0:573; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax574; X86-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]575; X86-AVX2-NEXT: vpxor (%eax), %ymm1, %ymm0576; X86-AVX2-NEXT: vpxor 32(%eax), %ymm1, %ymm1577; X86-AVX2-NEXT: retl578;579; X86-AVX512VL-LABEL: fneg_v32f16:580; X86-AVX512VL: # %bb.0:581; X86-AVX512VL-NEXT: movl {{[0-9]+}}(%esp), %eax582; X86-AVX512VL-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]583; X86-AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0584; X86-AVX512VL-NEXT: vpxorq (%eax), %zmm0, %zmm0585; X86-AVX512VL-NEXT: retl586;587; X86-AVX512FP16-LABEL: fneg_v32f16:588; X86-AVX512FP16: # %bb.0:589; X86-AVX512FP16-NEXT: movl {{[0-9]+}}(%esp), %eax590; X86-AVX512FP16-NEXT: vpbroadcastw {{.*#+}} zmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]591; X86-AVX512FP16-NEXT: vpxorq (%eax), %zmm0, %zmm0592; X86-AVX512FP16-NEXT: retl593;594; X86-AVX512VLDQ-LABEL: fneg_v32f16:595; X86-AVX512VLDQ: # %bb.0:596; X86-AVX512VLDQ-NEXT: movl {{[0-9]+}}(%esp), %eax597; X86-AVX512VLDQ-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]598; X86-AVX512VLDQ-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0599; X86-AVX512VLDQ-NEXT: vpxorq (%eax), %zmm0, %zmm0600; X86-AVX512VLDQ-NEXT: retl601;602; X64-SSE-LABEL: fneg_v32f16:603; X64-SSE: # %bb.0:604; X64-SSE-NEXT: movaps {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]605; X64-SSE-NEXT: movaps (%rdi), %xmm0606; X64-SSE-NEXT: xorps %xmm3, %xmm0607; X64-SSE-NEXT: movaps 16(%rdi), %xmm1608; X64-SSE-NEXT: xorps %xmm3, %xmm1609; X64-SSE-NEXT: movaps 32(%rdi), %xmm2610; X64-SSE-NEXT: xorps %xmm3, %xmm2611; X64-SSE-NEXT: xorps 48(%rdi), %xmm3612; X64-SSE-NEXT: retq613;614; X64-AVX1-LABEL: fneg_v32f16:615; X64-AVX1: # %bb.0:616; X64-AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]617; X64-AVX1-NEXT: vxorps (%rdi), %ymm1, %ymm0618; X64-AVX1-NEXT: vxorps 32(%rdi), %ymm1, %ymm1619; X64-AVX1-NEXT: retq620;621; X64-AVX2-LABEL: fneg_v32f16:622; X64-AVX2: # %bb.0:623; X64-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]624; X64-AVX2-NEXT: vpxor (%rdi), %ymm1, %ymm0625; X64-AVX2-NEXT: vpxor 32(%rdi), %ymm1, %ymm1626; X64-AVX2-NEXT: retq627;628; X64-AVX512VL-LABEL: fneg_v32f16:629; X64-AVX512VL: # %bb.0:630; X64-AVX512VL-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]631; X64-AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0632; X64-AVX512VL-NEXT: vpxorq (%rdi), %zmm0, %zmm0633; X64-AVX512VL-NEXT: retq634;635; X64-AVX512FP16-LABEL: fneg_v32f16:636; X64-AVX512FP16: # %bb.0:637; X64-AVX512FP16-NEXT: vpbroadcastw {{.*#+}} zmm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]638; X64-AVX512FP16-NEXT: vpxorq (%rdi), %zmm0, %zmm0639; X64-AVX512FP16-NEXT: retq640;641; X64-AVX512VLDQ-LABEL: fneg_v32f16:642; X64-AVX512VLDQ: # %bb.0:643; X64-AVX512VLDQ-NEXT: vpbroadcastw {{.*#+}} ymm0 = [-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0,-0.0E+0]644; X64-AVX512VLDQ-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0645; X64-AVX512VLDQ-NEXT: vpxorq (%rdi), %zmm0, %zmm0646; X64-AVX512VLDQ-NEXT: retq647 %v = load <32 x half>, ptr %p, align 16648 %nnv = fsub <32 x half> <half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0, half -0.0>, %v649 ret <32 x half> %nnv650}651;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:652; X64: {{.*}}653; X86: {{.*}}654