brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · a3ddfb9 Raw
78 lines · plain
1; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx| FileCheck %s2 3; Verify that we generate a single OR instruction for a scalar, vec128, and vec2564; FNABS(x) operation -> FNEG (FABS(x)).5; If the FABS() result isn't used, the AND instruction should be eliminated.6; PR20578: http://llvm.org/bugs/show_bug.cgi?id=205787 8define float @scalar_no_abs(float %a) {9; CHECK-LABEL: scalar_no_abs:10; CHECK: vorps11; CHECK-NEXT: retq12  %fabs = tail call float @fabsf(float %a) #113  %fsub = fsub float -0.0, %fabs14  ret float %fsub15}16 17define float @scalar_uses_abs(float %a) {18; CHECK-LABEL: scalar_uses_abs:19; CHECK-DAG: vandps20; CHECK-DAG: vorps21; CHECK: vmulss22; CHECK-NEXT: retq23  %fabs = tail call float @fabsf(float %a) #124  %fsub = fsub float -0.0, %fabs25  %fmul = fmul float %fsub, %fabs26  ret float %fmul27}28 29define <4 x float> @vector128_no_abs(<4 x float> %a) {30; CHECK-LABEL: vector128_no_abs:31; CHECK: vorps32; CHECK-NEXT: retq33  %fabs = tail call <4 x float> @llvm.fabs.v4f32(< 4 x float> %a) #134  %fsub = fsub <4 x float> <float -0.0, float -0.0, float -0.0, float -0.0>, %fabs35  ret <4 x float> %fsub36}37 38define <4 x float> @vector128_uses_abs(<4 x float> %a) {39; CHECK-LABEL: vector128_uses_abs:40; CHECK-DAG: vandps41; CHECK-DAG: vorps42; CHECK: vmulps43; CHECK-NEXT: retq44  %fabs = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %a) #145  %fsub = fsub <4 x float> <float -0.0, float -0.0, float -0.0, float -0.0>, %fabs46  %fmul = fmul <4 x float> %fsub, %fabs47  ret <4 x float> %fmul48}49 50define <8 x float> @vector256_no_abs(<8 x float> %a) {51; CHECK-LABEL: vector256_no_abs:52; CHECK: vorps53; CHECK-NEXT: retq54  %fabs = tail call <8 x float> @llvm.fabs.v8f32(< 8 x float> %a) #155  %fsub = 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>, %fabs56  ret <8 x float> %fsub57}58 59define <8 x float> @vector256_uses_abs(<8 x float> %a) {60; CHECK-LABEL: vector256_uses_abs:61; CHECK-DAG: vandps62; CHECK-DAG: vorps63; CHECK: vmulps64; CHECK-NEXT: retq65  %fabs = tail call <8 x float> @llvm.fabs.v8f32(<8 x float> %a) #166  %fsub = 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>, %fabs67  %fmul = fmul <8 x float> %fsub, %fabs68  ret <8 x float> %fmul69}70 71declare <4 x float> @llvm.fabs.v4f32(<4 x float> %p)72declare <8 x float> @llvm.fabs.v8f32(<8 x float> %p)73 74declare float @fabsf(float)75 76attributes #1 = { readnone }77 78