8007294: ReduceFieldZeroing doesn't check for dependent load and can lead to incorrect execution

InitializeNode::can_capture_store() must check that the captured store doesn't overwrite a memory location that is loaded before the store.

Reviewed-by: kvn
This commit is contained in:
Roland Westrelin 2013-02-25 14:13:04 +01:00
parent c444c1faea
commit fe92862089
5 changed files with 206 additions and 7 deletions

View file

@ -1072,11 +1072,11 @@ public:
// See if this store can be captured; return offset where it initializes.
// Return 0 if the store cannot be moved (any sort of problem).
intptr_t can_capture_store(StoreNode* st, PhaseTransform* phase);
intptr_t can_capture_store(StoreNode* st, PhaseTransform* phase, bool can_reshape);
// Capture another store; reformat it to write my internal raw memory.
// Return the captured copy, else NULL if there is some sort of problem.
Node* capture_store(StoreNode* st, intptr_t start, PhaseTransform* phase);
Node* capture_store(StoreNode* st, intptr_t start, PhaseTransform* phase, bool can_reshape);
// Find captured store which corresponds to the range [start..start+size).
// Return my own memory projection (meaning the initial zero bits)