X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FX86%2Ffabs.ll;h=e330ee79430e058e34131b3de79698a1cf828019;hb=3d4542ce3da1cb0782c65d38130556a00ed2586d;hp=b304cd4c3fdaaf4fb8449f9bd17dc9cfb008aca1;hpb=2b5d3cf6a0afb89bdcc75ff5945d43a899561dad;p=oota-llvm.git diff --git a/test/CodeGen/X86/fabs.ll b/test/CodeGen/X86/fabs.ll index b304cd4c3fd..e330ee79430 100644 --- a/test/CodeGen/X86/fabs.ll +++ b/test/CodeGen/X86/fabs.ll @@ -1,17 +1,54 @@ ; Make sure this testcase codegens to the fabs instruction, not a call to fabsf -; RUN: llvm-as < %s | llc -march=x86 | grep 'fabs$' | wc -l | grep 2 +; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse2,-sse3,-sse | FileCheck %s +; RUN: llc < %s -mtriple=i686-apple-macosx -mattr=-sse,-sse2,-sse3 -enable-unsafe-fp-math -enable-no-nans-fp-math | FileCheck %s --check-prefix=UNSAFE +; RUN: llc < %s -mtriple=x86_64-apple-macosx -O0 | FileCheck %s --check-prefix=NOOPT -declare float %fabsf(float) +declare float @fabsf(float) -float %fabsftest(float %X) { - %Y = call float %fabsf(float %X) +declare x86_fp80 @fabsl(x86_fp80) + +; CHECK-LABEL: test1: +; UNSAFE-LABEL: test1: +; NOOPT-LABEL: test1: +define float @test1(float %X) { + %Y = call float @fabsf(float %X) readnone ret float %Y } +; CHECK: {{^[ \t]+fabs$}} +; UNSAFE: {{^[ \t]+fabs$}} + +; CHECK-NOT: fabs +; UNSAFE-NOT: fabs +; NOOPT-NOT: fabsf -double %fabstest2(double %X) { - %Y = setge double %X, -0.0 - %Z = sub double -0.0, %X - %Q = select bool %Y, double %X, double %Z +; CHECK-LABEL: test2: +; UNSAFE-LABEL: test2: +; NOOPT-LABEL: test2: +define double @test2(double %X) { + %Y = fcmp oge double %X, -0.0 + %Z = fsub double -0.0, %X + %Q = select i1 %Y, double %X, double %Z ret double %Q } +; fabs is not used here. +; CHECK-NOT: fabs +; NOOPT-NOT: fabs + +; UNSAFE: {{^[ \t]+fabs$}} + +; UNSAFE-NOT: fabs + +; CHECK-LABEL: test3: +; UNSAFE-LABEL: test3: +; NOOPT-LABEL: test3: +define x86_fp80 @test3(x86_fp80 %X) { + %Y = call x86_fp80 @fabsl(x86_fp80 %X) readnone + ret x86_fp80 %Y +} +; CHECK: {{^[ \t]+fabs$}} +; UNSAFE: {{^[ \t]+fabs$}} +; NOOPT: {{^[ \t]+fabs$}} +; CHECK-NOT: fabs +; UNSAFE-NOT: fabs +; NOOPT-NOT: fabs