[llvm-commits] [llvm] r63474/r63475

Mon Ping Wang wangmp at apple.com
Fri Jan 30 22:59:32 PST 2009


Hi,

My change in r63474 broke llvm/test/CodeGen/CellSPU/sp_arith.ll  
because it is testing for the floating point transformation
   - (a * b -c) = c - a *b.
If a*b == c, this transformation is illegal since -0.0 is not the same  
as +0.0.

To avoid this test failing, I have changed the test in r63475 to use "- 
enable-unsafe-fp-math" that would allow that transformation. Please  
let me know if someone has a problem with changing the test in this way.

Sorry that I didn't notice this before checking in as I didn't build  
the cell backend before running the basic test.  I have corrected that  
oversight.

-- Mon Ping


On Jan 30, 2009, at 10:07 PM, Mon P Wang wrote:

> Author: wangmp
> Date: Sat Jan 31 00:07:45 2009
> New Revision: 63474
>
> URL: http://llvm.org/viewvc/llvm-project?rev=63474&view=rev
> Log:
> If unsafe FP optimization is not set, don't allow -(A-B) => B-A  
> because
> when A==B, -0.0 != +0.0.
>
> Added:
>    llvm/trunk/test/CodeGen/X86/neg_fp.ll
> Modified:
>    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=63474&r1=63473&r2=63474&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat Jan 31  
> 00:07:45 2009
> @@ -2357,7 +2357,8 @@
>       return Operand.getOperand(0);
>     break;
>   case ISD::FNEG:
> -    if (OpOpcode == ISD::FSUB)   // -(X-Y) -> (Y-X)
> +    // -(X-Y) -> (Y-X) is unsafe because when X==Y, -0.0 != +0.0
> +    if (UnsafeFPMath && OpOpcode == ISD::FSUB)
>       return getNode(ISD::FSUB, VT, Operand.getNode()->getOperand(1),
>                      Operand.getNode()->getOperand(0));
>     if (OpOpcode == ISD::FNEG)  // --X -> X
>
> Added: llvm/trunk/test/CodeGen/X86/neg_fp.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/neg_fp.ll?rev=63474&view=auto
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/X86/neg_fp.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/neg_fp.ll Sat Jan 31 00:07:45 2009
> @@ -0,0 +1,12 @@
> +; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse41 -o %t -f
> +; RUN: grep xorps %t | count 1
> +
> +; Test that when we don't -enable-unsafe-fp-math, we don't do the  
> optimization
> +; -0 - (A - B) to (B - A) because A==B, -0 != 0
> +
> +define float @negfp(float %a, float %b) {
> +entry:
> +	%sub = sub float %a, %b		; <float> [#uses=1]
> +	%neg = sub float -0.000000e+00, %sub		; <float> [#uses=1]
> +	ret float %neg
> +}
> \ No newline at end of file
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list