[llvm] r191989 - Fix DAGCombiner::visitFP_EXTEND to ignore indexed loads

Hal Finkel hfinkel at anl.gov
Fri Oct 4 15:18:12 PDT 2013

Author: hfinkel
Date: Fri Oct  4 17:18:12 2013
New Revision: 191989

URL: http://llvm.org/viewvc/llvm-project?rev=191989&view=rev
Fix DAGCombiner::visitFP_EXTEND to ignore indexed loads

DAGCombiner::visitFP_EXTEND will apply the following transformation:

  fold (fpext (load x)) -> (fpext (fptrunc (extload x)))

but the implementation does not handle indexed loads (pre/post inc.), but did
not specifically ignore them either (unlike for extending loads, which it
already ignored), causing an assert when the transformation was applied to an
indexed load. This is the minimal fix for correctness (causing the
transformation to be skipped for indexed loads).

Unfortunately, I don't have an in-tree test case.


Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=191989&r1=191988&r2=191989&view=diff
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fri Oct  4 17:18:12 2013
@@ -6731,7 +6731,7 @@ SDValue DAGCombiner::visitFP_EXTEND(SDNo
   // fold (fpext (load x)) -> (fpext (fptrunc (extload x)))
-  if (ISD::isNON_EXTLoad(N0.getNode()) && N0.hasOneUse() &&
+  if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
       ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
        TLI.isLoadExtLegal(ISD::EXTLOAD, N0.getValueType()))) {
     LoadSDNode *LN0 = cast<LoadSDNode>(N0);

More information about the llvm-commits mailing list