diff options
author | Tim Northover <tnorthover@apple.com> | 2014-04-16 09:03:09 +0000 |
---|---|---|
committer | Tim Northover <tnorthover@apple.com> | 2014-04-16 09:03:09 +0000 |
commit | 863a789a990a26df68f6412ad0959d08b9f2dd5b (patch) | |
tree | 4e530bd88cc4abced44e1e2892eb241483dd05e2 /llvm/lib/CodeGen | |
parent | 28940af2bf5c854c5cf3dcd8b6464d3d5dcc83f3 (diff) | |
download | bcm5719-llvm-863a789a990a26df68f6412ad0959d08b9f2dd5b.tar.gz bcm5719-llvm-863a789a990a26df68f6412ad0959d08b9f2dd5b.zip |
DAGCombiner: don't optimise non-existant litpool load
This particular DAG combine is designed to kick in when both ConstantFPs will
end up being loaded via a litpool, however those nodes have a semi-legal
status, dictated by isFPImmLegal so in some cases there wouldn't have been a
litpool in the first place. Don't try to be clever in those circumstances.
Picked up while merging some AArch64 tests.
llvm-svn: 206365
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index b6b0341dc93..1a92c2f59a9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -10942,7 +10942,9 @@ SDValue DAGCombiner::SimplifySelectCC(SDLoc DL, SDValue N0, SDValue N1, if (ConstantFPSDNode *FV = dyn_cast<ConstantFPSDNode>(N3)) { if (TLI.isTypeLegal(N2.getValueType()) && (TLI.getOperationAction(ISD::ConstantFP, N2.getValueType()) != - TargetLowering::Legal) && + TargetLowering::Legal && + !TLI.isFPImmLegal(TV->getValueAPF(), TV->getValueType(0)) && + !TLI.isFPImmLegal(FV->getValueAPF(), FV->getValueType(0))) && // If both constants have multiple uses, then we won't need to do an // extra load, they are likely around in registers for other users. (TV->hasOneUse() || FV->hasOneUse())) { |