mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Fix PR40644: miscompile indexed FP constant store
Summary: Functions replaceStoreOfFPConstant() and OptimizeFloatStore() both replace store of float by a store of an integer unconditionally. However this generates wrong code when the store that is replaced is an indexed or truncating store. This commit solves this issue by adding an early return in these functions when the store being considered is not a normal store. Bug was only observed on out of tree targets, hence the lack of testcase in this commit. Reviewers: efriedma Subscribers: hiraditya, arphaman, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D68420
This commit is contained in:
parent
eebf5e9394
commit
857bdbdda2
@ -16065,6 +16065,9 @@ SDValue DAGCombiner::replaceStoreOfFPConstant(StoreSDNode *ST) {
|
||||
if (Value.getOpcode() == ISD::TargetConstantFP)
|
||||
return SDValue();
|
||||
|
||||
if (!ISD::isNormalStore(ST))
|
||||
return SDValue();
|
||||
|
||||
SDLoc DL(ST);
|
||||
|
||||
SDValue Chain = ST->getChain();
|
||||
|
@ -421,6 +421,9 @@ SDValue SelectionDAGLegalize::ExpandINSERT_VECTOR_ELT(SDValue Vec, SDValue Val,
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::OptimizeFloatStore(StoreSDNode* ST) {
|
||||
if (!ISD::isNormalStore(ST))
|
||||
return SDValue();
|
||||
|
||||
LLVM_DEBUG(dbgs() << "Optimizing float store operations\n");
|
||||
// Turn 'store float 1.0, Ptr' -> 'store int 0x12345678, Ptr'
|
||||
// FIXME: We shouldn't do this for TargetConstantFP's.
|
||||
|
Loading…
x
Reference in New Issue
Block a user