769 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-AVX1OR2,X86-AVX14; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=X86,X86-AVX,X86-AVX1OR2,X86-AVX25; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=X86,X86-AVX,X86-AVX512,X86-AVX512VL6; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512fp16,+avx512vl | FileCheck %s --check-prefixes=X86,X86-AVX,X86-AVX512,X86-AVX512FP167; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X86,X86-AVX,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-AVX1OR2,X64-AVX110; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX1OR2,X64-AVX211; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512VL12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512fp16,+avx512vl | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512FP1613; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64,X64-AVX,X64-AVX512,X64-AVX512VLDQ14 15;16; 128-bit Vectors17;18 19define <2 x double> @fabs_v2f64(<2 x double> %p) nounwind {20; X86-SSE-LABEL: fabs_v2f64:21; X86-SSE: # %bb.0:22; X86-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm023; X86-SSE-NEXT: retl24;25; X86-AVX1OR2-LABEL: fabs_v2f64:26; X86-AVX1OR2: # %bb.0:27; X86-AVX1OR2-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm028; X86-AVX1OR2-NEXT: retl29;30; X86-AVX512VL-LABEL: fabs_v2f64:31; X86-AVX512VL: # %bb.0:32; X86-AVX512VL-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm033; X86-AVX512VL-NEXT: retl34;35; X86-AVX512FP16-LABEL: fabs_v2f64:36; X86-AVX512FP16: # %bb.0:37; X86-AVX512FP16-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm038; X86-AVX512FP16-NEXT: retl39;40; X86-AVX512VLDQ-LABEL: fabs_v2f64:41; X86-AVX512VLDQ: # %bb.0:42; X86-AVX512VLDQ-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm043; X86-AVX512VLDQ-NEXT: retl44;45; X64-SSE-LABEL: fabs_v2f64:46; X64-SSE: # %bb.0:47; X64-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm048; X64-SSE-NEXT: retq49;50; X64-AVX1OR2-LABEL: fabs_v2f64:51; X64-AVX1OR2: # %bb.0:52; X64-AVX1OR2-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm053; X64-AVX1OR2-NEXT: retq54;55; X64-AVX512VL-LABEL: fabs_v2f64:56; X64-AVX512VL: # %bb.0:57; X64-AVX512VL-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm058; X64-AVX512VL-NEXT: retq59;60; X64-AVX512FP16-LABEL: fabs_v2f64:61; X64-AVX512FP16: # %bb.0:62; X64-AVX512FP16-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm063; X64-AVX512FP16-NEXT: retq64;65; X64-AVX512VLDQ-LABEL: fabs_v2f64:66; X64-AVX512VLDQ: # %bb.0:67; X64-AVX512VLDQ-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm068; X64-AVX512VLDQ-NEXT: retq69 %t = call <2 x double> @llvm.fabs.v2f64(<2 x double> %p)70 ret <2 x double> %t71}72declare <2 x double> @llvm.fabs.v2f64(<2 x double> %p)73 74define <4 x float> @fabs_v4f32(<4 x float> %p) nounwind {75; X86-SSE-LABEL: fabs_v4f32:76; X86-SSE: # %bb.0:77; X86-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm078; X86-SSE-NEXT: retl79;80; X86-AVX1-LABEL: fabs_v4f32:81; X86-AVX1: # %bb.0:82; X86-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm083; X86-AVX1-NEXT: retl84;85; X86-AVX2-LABEL: fabs_v4f32:86; X86-AVX2: # %bb.0:87; X86-AVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN]88; X86-AVX2-NEXT: vandps %xmm1, %xmm0, %xmm089; X86-AVX2-NEXT: retl90;91; X86-AVX512VL-LABEL: fabs_v4f32:92; X86-AVX512VL: # %bb.0:93; X86-AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm094; X86-AVX512VL-NEXT: retl95;96; X86-AVX512FP16-LABEL: fabs_v4f32:97; X86-AVX512FP16: # %bb.0:98; X86-AVX512FP16-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm099; X86-AVX512FP16-NEXT: retl100;101; X86-AVX512VLDQ-LABEL: fabs_v4f32:102; X86-AVX512VLDQ: # %bb.0:103; X86-AVX512VLDQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0104; X86-AVX512VLDQ-NEXT: retl105;106; X64-SSE-LABEL: fabs_v4f32:107; X64-SSE: # %bb.0:108; X64-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0109; X64-SSE-NEXT: retq110;111; X64-AVX1-LABEL: fabs_v4f32:112; X64-AVX1: # %bb.0:113; X64-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0114; X64-AVX1-NEXT: retq115;116; X64-AVX2-LABEL: fabs_v4f32:117; X64-AVX2: # %bb.0:118; X64-AVX2-NEXT: vbroadcastss {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN]119; X64-AVX2-NEXT: vandps %xmm1, %xmm0, %xmm0120; X64-AVX2-NEXT: retq121;122; X64-AVX512VL-LABEL: fabs_v4f32:123; X64-AVX512VL: # %bb.0:124; X64-AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0125; X64-AVX512VL-NEXT: retq126;127; X64-AVX512FP16-LABEL: fabs_v4f32:128; X64-AVX512FP16: # %bb.0:129; X64-AVX512FP16-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0130; X64-AVX512FP16-NEXT: retq131;132; X64-AVX512VLDQ-LABEL: fabs_v4f32:133; X64-AVX512VLDQ: # %bb.0:134; X64-AVX512VLDQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0135; X64-AVX512VLDQ-NEXT: retq136 %t = call <4 x float> @llvm.fabs.v4f32(<4 x float> %p)137 ret <4 x float> %t138}139declare <4 x float> @llvm.fabs.v4f32(<4 x float> %p)140 141define <8 x half> @fabs_v8f16(ptr %p) nounwind {142; X86-SSE-LABEL: fabs_v8f16:143; X86-SSE: # %bb.0:144; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax145; X86-SSE-NEXT: movaps (%eax), %xmm0146; X86-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0147; X86-SSE-NEXT: retl148;149; X86-AVX1-LABEL: fabs_v8f16:150; X86-AVX1: # %bb.0:151; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax152; X86-AVX1-NEXT: vmovaps (%eax), %xmm0153; X86-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0154; X86-AVX1-NEXT: retl155;156; X86-AVX2-LABEL: fabs_v8f16:157; X86-AVX2: # %bb.0:158; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax159; X86-AVX2-NEXT: vpbroadcastw {{.*#+}} xmm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]160; X86-AVX2-NEXT: vpand (%eax), %xmm0, %xmm0161; X86-AVX2-NEXT: retl162;163; X86-AVX512-LABEL: fabs_v8f16:164; X86-AVX512: # %bb.0:165; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax166; X86-AVX512-NEXT: vpbroadcastw {{.*#+}} xmm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]167; X86-AVX512-NEXT: vpand (%eax), %xmm0, %xmm0168; X86-AVX512-NEXT: retl169;170; X64-SSE-LABEL: fabs_v8f16:171; X64-SSE: # %bb.0:172; X64-SSE-NEXT: movaps (%rdi), %xmm0173; X64-SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0174; X64-SSE-NEXT: retq175;176; X64-AVX1-LABEL: fabs_v8f16:177; X64-AVX1: # %bb.0:178; X64-AVX1-NEXT: vmovaps (%rdi), %xmm0179; X64-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0180; X64-AVX1-NEXT: retq181;182; X64-AVX2-LABEL: fabs_v8f16:183; X64-AVX2: # %bb.0:184; X64-AVX2-NEXT: vpbroadcastw {{.*#+}} xmm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]185; X64-AVX2-NEXT: vpand (%rdi), %xmm0, %xmm0186; X64-AVX2-NEXT: retq187;188; X64-AVX512-LABEL: fabs_v8f16:189; X64-AVX512: # %bb.0:190; X64-AVX512-NEXT: vpbroadcastw {{.*#+}} xmm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]191; X64-AVX512-NEXT: vpand (%rdi), %xmm0, %xmm0192; X64-AVX512-NEXT: retq193 %v = load <8 x half>, ptr %p, align 16194 %nnv = call <8 x half> @llvm.fabs.v8f16(<8 x half> %v)195 ret <8 x half> %nnv196}197declare <8 x half> @llvm.fabs.v8f16(<8 x half> %p)198 199;200; 256-bit Vectors201;202 203define <4 x double> @fabs_v4f64(<4 x double> %p) nounwind {204; X86-SSE-LABEL: fabs_v4f64:205; X86-SSE: # %bb.0:206; X86-SSE-NEXT: movaps {{.*#+}} xmm2 = [NaN,NaN]207; X86-SSE-NEXT: andps %xmm2, %xmm0208; X86-SSE-NEXT: andps %xmm2, %xmm1209; X86-SSE-NEXT: retl210;211; X86-AVX1-LABEL: fabs_v4f64:212; X86-AVX1: # %bb.0:213; X86-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0214; X86-AVX1-NEXT: retl215;216; X86-AVX2-LABEL: fabs_v4f64:217; X86-AVX2: # %bb.0:218; X86-AVX2-NEXT: vbroadcastsd {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN]219; X86-AVX2-NEXT: vandps %ymm1, %ymm0, %ymm0220; X86-AVX2-NEXT: retl221;222; X86-AVX512VL-LABEL: fabs_v4f64:223; X86-AVX512VL: # %bb.0:224; X86-AVX512VL-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0225; X86-AVX512VL-NEXT: retl226;227; X86-AVX512FP16-LABEL: fabs_v4f64:228; X86-AVX512FP16: # %bb.0:229; X86-AVX512FP16-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0230; X86-AVX512FP16-NEXT: retl231;232; X86-AVX512VLDQ-LABEL: fabs_v4f64:233; X86-AVX512VLDQ: # %bb.0:234; X86-AVX512VLDQ-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0235; X86-AVX512VLDQ-NEXT: retl236;237; X64-SSE-LABEL: fabs_v4f64:238; X64-SSE: # %bb.0:239; X64-SSE-NEXT: movaps {{.*#+}} xmm2 = [NaN,NaN]240; X64-SSE-NEXT: andps %xmm2, %xmm0241; X64-SSE-NEXT: andps %xmm2, %xmm1242; X64-SSE-NEXT: retq243;244; X64-AVX1-LABEL: fabs_v4f64:245; X64-AVX1: # %bb.0:246; X64-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0247; X64-AVX1-NEXT: retq248;249; X64-AVX2-LABEL: fabs_v4f64:250; X64-AVX2: # %bb.0:251; X64-AVX2-NEXT: vbroadcastsd {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN]252; X64-AVX2-NEXT: vandps %ymm1, %ymm0, %ymm0253; X64-AVX2-NEXT: retq254;255; X64-AVX512VL-LABEL: fabs_v4f64:256; X64-AVX512VL: # %bb.0:257; X64-AVX512VL-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0258; X64-AVX512VL-NEXT: retq259;260; X64-AVX512FP16-LABEL: fabs_v4f64:261; X64-AVX512FP16: # %bb.0:262; X64-AVX512FP16-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0263; X64-AVX512FP16-NEXT: retq264;265; X64-AVX512VLDQ-LABEL: fabs_v4f64:266; X64-AVX512VLDQ: # %bb.0:267; X64-AVX512VLDQ-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0268; X64-AVX512VLDQ-NEXT: retq269 %t = call <4 x double> @llvm.fabs.v4f64(<4 x double> %p)270 ret <4 x double> %t271}272declare <4 x double> @llvm.fabs.v4f64(<4 x double> %p)273 274define <8 x float> @fabs_v8f32(<8 x float> %p) nounwind {275; X86-SSE-LABEL: fabs_v8f32:276; X86-SSE: # %bb.0:277; X86-SSE-NEXT: movaps {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN]278; X86-SSE-NEXT: andps %xmm2, %xmm0279; X86-SSE-NEXT: andps %xmm2, %xmm1280; X86-SSE-NEXT: retl281;282; X86-AVX1-LABEL: fabs_v8f32:283; X86-AVX1: # %bb.0:284; X86-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0285; X86-AVX1-NEXT: retl286;287; X86-AVX2-LABEL: fabs_v8f32:288; X86-AVX2: # %bb.0:289; X86-AVX2-NEXT: vbroadcastss {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]290; X86-AVX2-NEXT: vandps %ymm1, %ymm0, %ymm0291; X86-AVX2-NEXT: retl292;293; X86-AVX512VL-LABEL: fabs_v8f32:294; X86-AVX512VL: # %bb.0:295; X86-AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0296; X86-AVX512VL-NEXT: retl297;298; X86-AVX512FP16-LABEL: fabs_v8f32:299; X86-AVX512FP16: # %bb.0:300; X86-AVX512FP16-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0301; X86-AVX512FP16-NEXT: retl302;303; X86-AVX512VLDQ-LABEL: fabs_v8f32:304; X86-AVX512VLDQ: # %bb.0:305; X86-AVX512VLDQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0306; X86-AVX512VLDQ-NEXT: retl307;308; X64-SSE-LABEL: fabs_v8f32:309; X64-SSE: # %bb.0:310; X64-SSE-NEXT: movaps {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN]311; X64-SSE-NEXT: andps %xmm2, %xmm0312; X64-SSE-NEXT: andps %xmm2, %xmm1313; X64-SSE-NEXT: retq314;315; X64-AVX1-LABEL: fabs_v8f32:316; X64-AVX1: # %bb.0:317; X64-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0318; X64-AVX1-NEXT: retq319;320; X64-AVX2-LABEL: fabs_v8f32:321; X64-AVX2: # %bb.0:322; X64-AVX2-NEXT: vbroadcastss {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]323; X64-AVX2-NEXT: vandps %ymm1, %ymm0, %ymm0324; X64-AVX2-NEXT: retq325;326; X64-AVX512VL-LABEL: fabs_v8f32:327; X64-AVX512VL: # %bb.0:328; X64-AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0329; X64-AVX512VL-NEXT: retq330;331; X64-AVX512FP16-LABEL: fabs_v8f32:332; X64-AVX512FP16: # %bb.0:333; X64-AVX512FP16-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0334; X64-AVX512FP16-NEXT: retq335;336; X64-AVX512VLDQ-LABEL: fabs_v8f32:337; X64-AVX512VLDQ: # %bb.0:338; X64-AVX512VLDQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0339; X64-AVX512VLDQ-NEXT: retq340 %t = call <8 x float> @llvm.fabs.v8f32(<8 x float> %p)341 ret <8 x float> %t342}343declare <8 x float> @llvm.fabs.v8f32(<8 x float> %p)344 345define <16 x half> @fabs_v16f16(ptr %p) nounwind {346; X86-SSE-LABEL: fabs_v16f16:347; X86-SSE: # %bb.0:348; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax349; X86-SSE-NEXT: movaps {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]350; X86-SSE-NEXT: movaps (%eax), %xmm0351; X86-SSE-NEXT: andps %xmm1, %xmm0352; X86-SSE-NEXT: andps 16(%eax), %xmm1353; X86-SSE-NEXT: retl354;355; X86-AVX1-LABEL: fabs_v16f16:356; X86-AVX1: # %bb.0:357; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax358; X86-AVX1-NEXT: vmovaps (%eax), %ymm0359; X86-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0360; X86-AVX1-NEXT: retl361;362; X86-AVX2-LABEL: fabs_v16f16:363; X86-AVX2: # %bb.0:364; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax365; X86-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]366; X86-AVX2-NEXT: vpand (%eax), %ymm0, %ymm0367; X86-AVX2-NEXT: retl368;369; X86-AVX512-LABEL: fabs_v16f16:370; X86-AVX512: # %bb.0:371; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax372; X86-AVX512-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]373; X86-AVX512-NEXT: vpand (%eax), %ymm0, %ymm0374; X86-AVX512-NEXT: retl375;376; X64-SSE-LABEL: fabs_v16f16:377; X64-SSE: # %bb.0:378; X64-SSE-NEXT: movaps {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]379; X64-SSE-NEXT: movaps (%rdi), %xmm0380; X64-SSE-NEXT: andps %xmm1, %xmm0381; X64-SSE-NEXT: andps 16(%rdi), %xmm1382; X64-SSE-NEXT: retq383;384; X64-AVX1-LABEL: fabs_v16f16:385; X64-AVX1: # %bb.0:386; X64-AVX1-NEXT: vmovaps (%rdi), %ymm0387; X64-AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0388; X64-AVX1-NEXT: retq389;390; X64-AVX2-LABEL: fabs_v16f16:391; X64-AVX2: # %bb.0:392; X64-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]393; X64-AVX2-NEXT: vpand (%rdi), %ymm0, %ymm0394; X64-AVX2-NEXT: retq395;396; X64-AVX512-LABEL: fabs_v16f16:397; X64-AVX512: # %bb.0:398; X64-AVX512-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]399; X64-AVX512-NEXT: vpand (%rdi), %ymm0, %ymm0400; X64-AVX512-NEXT: retq401 %v = load <16 x half>, ptr %p, align 32402 %nnv = call <16 x half> @llvm.fabs.v16f16(<16 x half> %v)403 ret <16 x half> %nnv404}405declare <16 x half> @llvm.fabs.v16f16(<16 x half> %p)406 407;408; 512-bit Vectors409;410 411define <8 x double> @fabs_v8f64(<8 x double> %p) nounwind {412; X86-SSE-LABEL: fabs_v8f64:413; X86-SSE: # %bb.0:414; X86-SSE-NEXT: pushl %ebp415; X86-SSE-NEXT: movl %esp, %ebp416; X86-SSE-NEXT: andl $-16, %esp417; X86-SSE-NEXT: subl $16, %esp418; X86-SSE-NEXT: movaps {{.*#+}} xmm3 = [NaN,NaN]419; X86-SSE-NEXT: andps %xmm3, %xmm0420; X86-SSE-NEXT: andps %xmm3, %xmm1421; X86-SSE-NEXT: andps %xmm3, %xmm2422; X86-SSE-NEXT: andps 8(%ebp), %xmm3423; X86-SSE-NEXT: movl %ebp, %esp424; X86-SSE-NEXT: popl %ebp425; X86-SSE-NEXT: retl426;427; X86-AVX1OR2-LABEL: fabs_v8f64:428; X86-AVX1OR2: # %bb.0:429; X86-AVX1OR2-NEXT: vbroadcastsd {{.*#+}} ymm2 = [NaN,NaN,NaN,NaN]430; X86-AVX1OR2-NEXT: vandps %ymm2, %ymm0, %ymm0431; X86-AVX1OR2-NEXT: vandps %ymm2, %ymm1, %ymm1432; X86-AVX1OR2-NEXT: retl433;434; X86-AVX512VL-LABEL: fabs_v8f64:435; X86-AVX512VL: # %bb.0:436; X86-AVX512VL-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0437; X86-AVX512VL-NEXT: retl438;439; X86-AVX512FP16-LABEL: fabs_v8f64:440; X86-AVX512FP16: # %bb.0:441; X86-AVX512FP16-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0442; X86-AVX512FP16-NEXT: retl443;444; X86-AVX512VLDQ-LABEL: fabs_v8f64:445; X86-AVX512VLDQ: # %bb.0:446; X86-AVX512VLDQ-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0447; X86-AVX512VLDQ-NEXT: retl448;449; X64-SSE-LABEL: fabs_v8f64:450; X64-SSE: # %bb.0:451; X64-SSE-NEXT: movaps {{.*#+}} xmm4 = [NaN,NaN]452; X64-SSE-NEXT: andps %xmm4, %xmm0453; X64-SSE-NEXT: andps %xmm4, %xmm1454; X64-SSE-NEXT: andps %xmm4, %xmm2455; X64-SSE-NEXT: andps %xmm4, %xmm3456; X64-SSE-NEXT: retq457;458; X64-AVX1OR2-LABEL: fabs_v8f64:459; X64-AVX1OR2: # %bb.0:460; X64-AVX1OR2-NEXT: vbroadcastsd {{.*#+}} ymm2 = [NaN,NaN,NaN,NaN]461; X64-AVX1OR2-NEXT: vandps %ymm2, %ymm0, %ymm0462; X64-AVX1OR2-NEXT: vandps %ymm2, %ymm1, %ymm1463; X64-AVX1OR2-NEXT: retq464;465; X64-AVX512VL-LABEL: fabs_v8f64:466; X64-AVX512VL: # %bb.0:467; X64-AVX512VL-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0468; X64-AVX512VL-NEXT: retq469;470; X64-AVX512FP16-LABEL: fabs_v8f64:471; X64-AVX512FP16: # %bb.0:472; X64-AVX512FP16-NEXT: vpandq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0473; X64-AVX512FP16-NEXT: retq474;475; X64-AVX512VLDQ-LABEL: fabs_v8f64:476; X64-AVX512VLDQ: # %bb.0:477; X64-AVX512VLDQ-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0478; X64-AVX512VLDQ-NEXT: retq479 %t = call <8 x double> @llvm.fabs.v8f64(<8 x double> %p)480 ret <8 x double> %t481}482declare <8 x double> @llvm.fabs.v8f64(<8 x double> %p)483 484define <16 x float> @fabs_v16f32(<16 x float> %p) nounwind {485; X86-SSE-LABEL: fabs_v16f32:486; X86-SSE: # %bb.0:487; X86-SSE-NEXT: pushl %ebp488; X86-SSE-NEXT: movl %esp, %ebp489; X86-SSE-NEXT: andl $-16, %esp490; X86-SSE-NEXT: subl $16, %esp491; X86-SSE-NEXT: movaps {{.*#+}} xmm3 = [NaN,NaN,NaN,NaN]492; X86-SSE-NEXT: andps %xmm3, %xmm0493; X86-SSE-NEXT: andps %xmm3, %xmm1494; X86-SSE-NEXT: andps %xmm3, %xmm2495; X86-SSE-NEXT: andps 8(%ebp), %xmm3496; X86-SSE-NEXT: movl %ebp, %esp497; X86-SSE-NEXT: popl %ebp498; X86-SSE-NEXT: retl499;500; X86-AVX1OR2-LABEL: fabs_v16f32:501; X86-AVX1OR2: # %bb.0:502; X86-AVX1OR2-NEXT: vbroadcastss {{.*#+}} ymm2 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]503; X86-AVX1OR2-NEXT: vandps %ymm2, %ymm0, %ymm0504; X86-AVX1OR2-NEXT: vandps %ymm2, %ymm1, %ymm1505; X86-AVX1OR2-NEXT: retl506;507; X86-AVX512VL-LABEL: fabs_v16f32:508; X86-AVX512VL: # %bb.0:509; X86-AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0510; X86-AVX512VL-NEXT: retl511;512; X86-AVX512FP16-LABEL: fabs_v16f32:513; X86-AVX512FP16: # %bb.0:514; X86-AVX512FP16-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0515; X86-AVX512FP16-NEXT: retl516;517; X86-AVX512VLDQ-LABEL: fabs_v16f32:518; X86-AVX512VLDQ: # %bb.0:519; X86-AVX512VLDQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0520; X86-AVX512VLDQ-NEXT: retl521;522; X64-SSE-LABEL: fabs_v16f32:523; X64-SSE: # %bb.0:524; X64-SSE-NEXT: movaps {{.*#+}} xmm4 = [NaN,NaN,NaN,NaN]525; X64-SSE-NEXT: andps %xmm4, %xmm0526; X64-SSE-NEXT: andps %xmm4, %xmm1527; X64-SSE-NEXT: andps %xmm4, %xmm2528; X64-SSE-NEXT: andps %xmm4, %xmm3529; X64-SSE-NEXT: retq530;531; X64-AVX1OR2-LABEL: fabs_v16f32:532; X64-AVX1OR2: # %bb.0:533; X64-AVX1OR2-NEXT: vbroadcastss {{.*#+}} ymm2 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]534; X64-AVX1OR2-NEXT: vandps %ymm2, %ymm0, %ymm0535; X64-AVX1OR2-NEXT: vandps %ymm2, %ymm1, %ymm1536; X64-AVX1OR2-NEXT: retq537;538; X64-AVX512VL-LABEL: fabs_v16f32:539; X64-AVX512VL: # %bb.0:540; X64-AVX512VL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0541; X64-AVX512VL-NEXT: retq542;543; X64-AVX512FP16-LABEL: fabs_v16f32:544; X64-AVX512FP16: # %bb.0:545; X64-AVX512FP16-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0546; X64-AVX512FP16-NEXT: retq547;548; X64-AVX512VLDQ-LABEL: fabs_v16f32:549; X64-AVX512VLDQ: # %bb.0:550; X64-AVX512VLDQ-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0551; X64-AVX512VLDQ-NEXT: retq552 %t = call <16 x float> @llvm.fabs.v16f32(<16 x float> %p)553 ret <16 x float> %t554}555declare <16 x float> @llvm.fabs.v16f32(<16 x float> %p)556 557define <32 x half> @fabs_v32f16(ptr %p) nounwind {558; X86-SSE-LABEL: fabs_v32f16:559; X86-SSE: # %bb.0:560; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax561; X86-SSE-NEXT: movaps {{.*#+}} xmm3 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]562; X86-SSE-NEXT: movaps (%eax), %xmm0563; X86-SSE-NEXT: andps %xmm3, %xmm0564; X86-SSE-NEXT: movaps 16(%eax), %xmm1565; X86-SSE-NEXT: andps %xmm3, %xmm1566; X86-SSE-NEXT: movaps 32(%eax), %xmm2567; X86-SSE-NEXT: andps %xmm3, %xmm2568; X86-SSE-NEXT: andps 48(%eax), %xmm3569; X86-SSE-NEXT: retl570;571; X86-AVX1-LABEL: fabs_v32f16:572; X86-AVX1: # %bb.0:573; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax574; X86-AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]575; X86-AVX1-NEXT: vandps (%eax), %ymm1, %ymm0576; X86-AVX1-NEXT: vandps 32(%eax), %ymm1, %ymm1577; X86-AVX1-NEXT: retl578;579; X86-AVX2-LABEL: fabs_v32f16:580; X86-AVX2: # %bb.0:581; X86-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax582; X86-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]583; X86-AVX2-NEXT: vpand (%eax), %ymm1, %ymm0584; X86-AVX2-NEXT: vpand 32(%eax), %ymm1, %ymm1585; X86-AVX2-NEXT: retl586;587; X86-AVX512VL-LABEL: fabs_v32f16:588; X86-AVX512VL: # %bb.0:589; X86-AVX512VL-NEXT: movl {{[0-9]+}}(%esp), %eax590; X86-AVX512VL-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]591; X86-AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0592; X86-AVX512VL-NEXT: vpandq (%eax), %zmm0, %zmm0593; X86-AVX512VL-NEXT: retl594;595; X86-AVX512FP16-LABEL: fabs_v32f16:596; X86-AVX512FP16: # %bb.0:597; X86-AVX512FP16-NEXT: movl {{[0-9]+}}(%esp), %eax598; X86-AVX512FP16-NEXT: vpbroadcastw {{.*#+}} zmm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]599; X86-AVX512FP16-NEXT: vpandq (%eax), %zmm0, %zmm0600; X86-AVX512FP16-NEXT: retl601;602; X86-AVX512VLDQ-LABEL: fabs_v32f16:603; X86-AVX512VLDQ: # %bb.0:604; X86-AVX512VLDQ-NEXT: movl {{[0-9]+}}(%esp), %eax605; X86-AVX512VLDQ-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]606; X86-AVX512VLDQ-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0607; X86-AVX512VLDQ-NEXT: vpandq (%eax), %zmm0, %zmm0608; X86-AVX512VLDQ-NEXT: retl609;610; X64-SSE-LABEL: fabs_v32f16:611; X64-SSE: # %bb.0:612; X64-SSE-NEXT: movaps {{.*#+}} xmm3 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]613; X64-SSE-NEXT: movaps (%rdi), %xmm0614; X64-SSE-NEXT: andps %xmm3, %xmm0615; X64-SSE-NEXT: movaps 16(%rdi), %xmm1616; X64-SSE-NEXT: andps %xmm3, %xmm1617; X64-SSE-NEXT: movaps 32(%rdi), %xmm2618; X64-SSE-NEXT: andps %xmm3, %xmm2619; X64-SSE-NEXT: andps 48(%rdi), %xmm3620; X64-SSE-NEXT: retq621;622; X64-AVX1-LABEL: fabs_v32f16:623; X64-AVX1: # %bb.0:624; X64-AVX1-NEXT: vbroadcastss {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]625; X64-AVX1-NEXT: vandps (%rdi), %ymm1, %ymm0626; X64-AVX1-NEXT: vandps 32(%rdi), %ymm1, %ymm1627; X64-AVX1-NEXT: retq628;629; X64-AVX2-LABEL: fabs_v32f16:630; X64-AVX2: # %bb.0:631; X64-AVX2-NEXT: vpbroadcastw {{.*#+}} ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]632; X64-AVX2-NEXT: vpand (%rdi), %ymm1, %ymm0633; X64-AVX2-NEXT: vpand 32(%rdi), %ymm1, %ymm1634; X64-AVX2-NEXT: retq635;636; X64-AVX512VL-LABEL: fabs_v32f16:637; X64-AVX512VL: # %bb.0:638; X64-AVX512VL-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]639; X64-AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0640; X64-AVX512VL-NEXT: vpandq (%rdi), %zmm0, %zmm0641; X64-AVX512VL-NEXT: retq642;643; X64-AVX512FP16-LABEL: fabs_v32f16:644; X64-AVX512FP16: # %bb.0:645; X64-AVX512FP16-NEXT: vpbroadcastw {{.*#+}} zmm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]646; X64-AVX512FP16-NEXT: vpandq (%rdi), %zmm0, %zmm0647; X64-AVX512FP16-NEXT: retq648;649; X64-AVX512VLDQ-LABEL: fabs_v32f16:650; X64-AVX512VLDQ: # %bb.0:651; X64-AVX512VLDQ-NEXT: vpbroadcastw {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]652; X64-AVX512VLDQ-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0653; X64-AVX512VLDQ-NEXT: vpandq (%rdi), %zmm0, %zmm0654; X64-AVX512VLDQ-NEXT: retq655 %v = load <32 x half>, ptr %p, align 64656 %nnv = call <32 x half> @llvm.fabs.v32f16(<32 x half> %v)657 ret <32 x half> %nnv658}659declare <32 x half> @llvm.fabs.v32f16(<32 x half> %p)660 661; PR20354: when generating code for a vector fabs op,662; make sure that we're only turning off the sign bit of each float value.663; No constant pool loads or vector ops are needed for the fabs of a664; bitcasted integer constant; we should just return an integer constant665; that has the sign bits turned off.666;667; So instead of something like this:668; movabsq (constant pool load of mask for sign bits)669; vmovq (move from integer register to vector/fp register)670; vandps (mask off sign bits)671; vmovq (move vector/fp register back to integer return register)672;673; We should generate:674; mov (put constant value in return register)675 676define i64 @fabs_v2f32_1() nounwind {677; X86-LABEL: fabs_v2f32_1:678; X86: # %bb.0:679; X86-NEXT: xorl %eax, %eax680; X86-NEXT: movl $2147483647, %edx # imm = 0x7FFFFFFF681; X86-NEXT: retl682;683; X64-LABEL: fabs_v2f32_1:684; X64: # %bb.0:685; X64-NEXT: movabsq $9223372032559808512, %rax # imm = 0x7FFFFFFF00000000686; X64-NEXT: retq687 %bitcast = bitcast i64 18446744069414584320 to <2 x float> ; 0xFFFF_FFFF_0000_0000688 %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %bitcast)689 %ret = bitcast <2 x float> %fabs to i64690 ret i64 %ret691}692 693define i64 @fabs_v2f32_2() nounwind {694; X86-LABEL: fabs_v2f32_2:695; X86: # %bb.0:696; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF697; X86-NEXT: xorl %edx, %edx698; X86-NEXT: retl699;700; X64-LABEL: fabs_v2f32_2:701; X64: # %bb.0:702; X64-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF703; X64-NEXT: retq704 %bitcast = bitcast i64 4294967295 to <2 x float> ; 0x0000_0000_FFFF_FFFF705 %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %bitcast)706 %ret = bitcast <2 x float> %fabs to i64707 ret i64 %ret708}709 710declare <2 x float> @llvm.fabs.v2f32(<2 x float> %p)711 712; PR70947 - remove duplicate xmm/ymm constant loads713define void @PR70947(ptr %src, ptr %dst) nounwind {714; X86-SSE-LABEL: PR70947:715; X86-SSE: # %bb.0:716; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax717; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx718; X86-SSE-NEXT: movups (%ecx), %xmm0719; X86-SSE-NEXT: movups 32(%ecx), %xmm1720; X86-SSE-NEXT: movaps {{.*#+}} xmm2 = [NaN,NaN]721; X86-SSE-NEXT: andps %xmm2, %xmm0722; X86-SSE-NEXT: andps %xmm2, %xmm1723; X86-SSE-NEXT: movups %xmm0, (%eax)724; X86-SSE-NEXT: movups %xmm1, 16(%eax)725; X86-SSE-NEXT: retl726;727; X86-AVX-LABEL: PR70947:728; X86-AVX: # %bb.0:729; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax730; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %ecx731; X86-AVX-NEXT: vbroadcastsd {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN]732; X86-AVX-NEXT: vandps (%ecx), %ymm0, %ymm1733; X86-AVX-NEXT: vandps 32(%ecx), %xmm0, %xmm0734; X86-AVX-NEXT: vmovups %ymm1, (%eax)735; X86-AVX-NEXT: vmovups %xmm0, 16(%eax)736; X86-AVX-NEXT: vzeroupper737; X86-AVX-NEXT: retl738;739; X64-SSE-LABEL: PR70947:740; X64-SSE: # %bb.0:741; X64-SSE-NEXT: movups (%rdi), %xmm0742; X64-SSE-NEXT: movups 32(%rdi), %xmm1743; X64-SSE-NEXT: movaps {{.*#+}} xmm2 = [NaN,NaN]744; X64-SSE-NEXT: andps %xmm2, %xmm0745; X64-SSE-NEXT: andps %xmm2, %xmm1746; X64-SSE-NEXT: movups %xmm0, (%rsi)747; X64-SSE-NEXT: movups %xmm1, 16(%rsi)748; X64-SSE-NEXT: retq749;750; X64-AVX-LABEL: PR70947:751; X64-AVX: # %bb.0:752; X64-AVX-NEXT: vbroadcastsd {{.*#+}} ymm0 = [NaN,NaN,NaN,NaN]753; X64-AVX-NEXT: vandps (%rdi), %ymm0, %ymm1754; X64-AVX-NEXT: vandps 32(%rdi), %xmm0, %xmm0755; X64-AVX-NEXT: vmovups %ymm1, (%rsi)756; X64-AVX-NEXT: vmovups %xmm0, 16(%rsi)757; X64-AVX-NEXT: vzeroupper758; X64-AVX-NEXT: retq759 %src4 = getelementptr inbounds double, ptr %src, i64 4760 %dst4 = getelementptr inbounds i32, ptr %dst, i64 4761 %ld0 = load <4 x double>, ptr %src, align 8762 %ld4 = load <2 x double>, ptr %src4, align 8763 %fabs0 = tail call <4 x double> @llvm.fabs.v4f64(<4 x double> %ld0)764 %fabs4 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %ld4)765 store <4 x double> %fabs0, ptr %dst, align 4766 store <2 x double> %fabs4, ptr %dst4, align 4767 ret void768}769