http://llvm.org/bugs/show_bug.cgi?id=2520

           Summary: fabs not marked readnone
           Product: tools
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: llvm-gcc
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]
                CC: [email protected]


According to fabs(3), none of fabs fabsf or fabsl can have any errors. As such,
they should be marked readnone since all they ever do is return their own
input.

$ cat fabs.c
#include <math.h>

double f(double *x, double *y) { return fabs(*x + *y); }

$ llvm-gcc -O2 fabs.c -S -o - -emit-llvm
; ModuleID = 'fabs.c'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i386-pc-linux-gnu"

define double @f(double* %x, double* %y) nounwind  {
entry:
        %tmp2 = load double* %x, align 8                ; <double> [#uses=1]
        %tmp4 = load double* %y, align 8                ; <double> [#uses=1]
        %tmp5 = add double %tmp2, %tmp4         ; <double> [#uses=1]
        %tmp6 = tail call double @fabs( double %tmp5 )          ; <double>
[#uses=1]
        ret double %tmp6
}

declare double @fabs(double)

This stops some optimizations from working (GVN in particular) because it
doesn't know that fabs() won't be writing to one of the double* arguments.


-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to