[PATCH] D54121: [FPEnv] Add constrained FCMP intrinsic

Cameron McInally via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 6 07:18:02 PST 2018


cameron.mcinally added a comment.

All good points.

Here's another data point. The X86 builtins for compares explicitly list all the condition codes:

  v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
  v4sf __builtin_ia32_cmpordps (v4sf, v4sf)

So that's one way we could handle this. Although, these don't appear to cover both the quiet and signaling variants that IEEE-754 requires (I'm not sure how the X86 builtins handle that??).

In total, IEEE-754 specifies 22 compares that we need to cover:

  boolean compareQuietEqual(source1, source2)
  boolean compareQuietNotEqual(source1, source2) 
  boolean compareSignalingEqual(source1, source2) 
  boolean compareSignalingGreater(source1, source2) 
  boolean compareSignalingGreaterEqual(source1, source2) 
  boolean compareSignalingLess(source1, source2)
  boolean compareSignalingLessEqual(source1, source2)
  boolean compareSignalingNotEqual(source1, source2)
  boolean compareSignalingNotGreater(source1, source2) 
  boolean compareSignalingLessUnordered(source1, source2) 
  boolean compareSignalingNotLess(source1, source2)
  boolean compareSignalingGreaterUnordered(source1, source2) 
  boolean compareQuietGreater(source1, source2)
  boolean compareQuietGreaterEqual(source1, source2) 
  boolean compareQuietLess(source1, source2)
  boolean compareQuietLessEqual(source1, source2)
  boolean compareQuietUnordered(source1, source2) 
  boolean compareQuietNotGreater(source1, source2) 
  boolean compareQuietLessUnordered(source1, source2) 
  boolean compareQuietNotLess(source1, source2)
  boolean compareQuietGreaterUnordered(source1, source2) 
  boolean compareQuietOrdered(source1, source2).


Repository:
  rL LLVM

https://reviews.llvm.org/D54121





More information about the llvm-commits mailing list