diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-10-04 22:18:12 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-10-04 22:18:12 +0000 |
commit | dbc7a8a8a34b5b8ddc0e69bf9df29bfd6e1b3409 (patch) | |
tree | 5bfb1366819d07c799c940b0afd76e297b534355 /llvm/lib/CodeGen | |
parent | 79710108a46896420fce3eab8ee8e1459aa7e978 (diff) | |
download | bcm5719-llvm-dbc7a8a8a34b5b8ddc0e69bf9df29bfd6e1b3409.tar.gz bcm5719-llvm-dbc7a8a8a34b5b8ddc0e69bf9df29bfd6e1b3409.zip |
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.
llvm-svn: 191989
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 5dd4376de7b..72e001af5f8 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -6731,7 +6731,7 @@ SDValue DAGCombiner::visitFP_EXTEND(SDNode *N) { } // 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); |