[PATCH] D11866: transform fmin/fmax calls when possible (PR24314)

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 15 05:39:39 PDT 2015


spatel added a comment.

In http://reviews.llvm.org/D11866#219873, @jmolloy wrote:

> This will be important when my latest patches finally land and x86 uses the new ISD::FMINNAN nodes (which represent the semantics of minss precisely).


It doesn't affect this patch, but unfortunately, I don't think x86 can use the new DAG nodes. The x86 min/max insts don't conform to either DAG node definition. The hardware instructions may or may not return a NaN operand. From the Intel manual:

  MAX(SRC1, SRC2)
  {
     IF ((SRC1 = 0.0) and (SRC2 = 0.0)) THEN DEST <- SRC2;
     ELSE IF (SRC1 = SNaN) THEN DEST <- SRC2; FI; 
     ELSE IF SRC2 = SNaN) THEN DEST <- SRC2; FI; 
     ELSE IF (SRC1 > SRC2) THEN DEST <- SRC1; 
     ELSE DEST <- SRC2;
     FI;
   }

The precise behavior of these instructions is tested quite thoroughly in:
test/CodeGen/X86/sse-minmax.ll


http://reviews.llvm.org/D11866





More information about the llvm-commits mailing list