[PATCH] Make it possible for ints/floats to return different values from getBooleanContents()

Daniel Sanders daniel.sanders at imgtec.com
Tue Jul 8 12:45:08 PDT 2014

Comment at: include/llvm/Target/TargetLowering.h:285
@@ -283,1 +284,3 @@
+  /// vectors instead of the way they treat scalars.
+  BooleanContent getBooleanContentsOLD(bool isVec) const {
     return isVec ? BooleanVectorContents : BooleanContents;
hfinkel at anl.gov wrote:
> Please remove this (we don't need the OLD version any more).

Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:4524
@@ -4523,1 +4523,3 @@
+  // We can't do this reliably if integer based booleans have different contents
+  // to floating point based booleans.
   if (VT.isInteger() &&
hfinkel at anl.gov wrote:
> I'm missing something here... why not?
We can't tell whether we have an integer-based boolean or a floating-point-based boolean unless we can find the SETCC that produced it and inspect its operands. This is fairly easy if C is the SETCC node, but it can potentially be undiscoverable (or not reasonably discoverable). For example, it could be in another basic block or it could require searching a complicated expression.

Comment at: lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp:265
@@ +264,3 @@
+  // If integer and float booleans have different contents then we can't
+  // reliably optimize in all cases.
+  if (TLI.getBooleanContents(false, false) !=
hfinkel at anl.gov wrote:
> Again, please explain.
It's the same reason as the other one but here I attempt to cover the most likely case where Cond is a SETCC.


More information about the llvm-commits mailing list