Mercurial > hg > truffle
comparison src/share/vm/opto/chaitin.hpp @ 295:ea18057223c4
6732194: Data corruption dependent on -server/-client/-Xbatch
Summary: rematerializing nodes results in incorrect inputs
Reviewed-by: rasbold
author | never |
---|---|
date | Mon, 18 Aug 2008 23:17:51 -0700 |
parents | d1605aabd0a1 |
children | 91263420e1c6 |
comparison
equal
deleted
inserted
replaced
294:616a07a75c3c | 295:ea18057223c4 |
---|---|
154 _at_risk:1; // Simplify says this guy is at risk to spill | 154 _at_risk:1; // Simplify says this guy is at risk to spill |
155 | 155 |
156 | 156 |
157 // Alive if non-zero, dead if zero | 157 // Alive if non-zero, dead if zero |
158 bool alive() const { return _def != NULL; } | 158 bool alive() const { return _def != NULL; } |
159 bool is_multidef() const { return _def == NodeSentinel; } | |
160 bool is_singledef() const { return _def != NodeSentinel; } | |
159 | 161 |
160 #ifndef PRODUCT | 162 #ifndef PRODUCT |
161 void dump( ) const; | 163 void dump( ) const; |
162 #endif | 164 #endif |
163 }; | 165 }; |
318 | 320 |
319 // Helper functions for Split() | 321 // Helper functions for Split() |
320 uint split_DEF( Node *def, Block *b, int loc, uint max, Node **Reachblock, Node **debug_defs, GrowableArray<uint> splits, int slidx ); | 322 uint split_DEF( Node *def, Block *b, int loc, uint max, Node **Reachblock, Node **debug_defs, GrowableArray<uint> splits, int slidx ); |
321 uint split_USE( Node *def, Block *b, Node *use, uint useidx, uint max, bool def_down, bool cisc_sp, GrowableArray<uint> splits, int slidx ); | 323 uint split_USE( Node *def, Block *b, Node *use, uint useidx, uint max, bool def_down, bool cisc_sp, GrowableArray<uint> splits, int slidx ); |
322 int clone_projs( Block *b, uint idx, Node *con, Node *copy, uint &maxlrg ); | 324 int clone_projs( Block *b, uint idx, Node *con, Node *copy, uint &maxlrg ); |
323 Node *split_Rematerialize( Node *def, Block *b, uint insidx, uint &maxlrg, GrowableArray<uint> splits, int slidx, uint *lrg2reach, Node **Reachblock, bool walkThru ); | 325 Node *split_Rematerialize(Node *def, Block *b, uint insidx, uint &maxlrg, GrowableArray<uint> splits, |
326 int slidx, uint *lrg2reach, Node **Reachblock, bool walkThru); | |
324 // True if lidx is used before any real register is def'd in the block | 327 // True if lidx is used before any real register is def'd in the block |
325 bool prompt_use( Block *b, uint lidx ); | 328 bool prompt_use( Block *b, uint lidx ); |
326 Node *get_spillcopy_wide( Node *def, Node *use, uint uidx ); | 329 Node *get_spillcopy_wide( Node *def, Node *use, uint uidx ); |
327 // Insert the spill at chosen location. Skip over any interveneing Proj's or | 330 // Insert the spill at chosen location. Skip over any interveneing Proj's or |
328 // Phis. Skip over a CatchNode and projs, inserting in the fall-through block | 331 // Phis. Skip over a CatchNode and projs, inserting in the fall-through block |