Kill a Node with no uses , by setting all of its defs to null. This may recursively kill more Nodes, and is basically dead code elimination.
( )
| 257 | * code elimination. |
| 258 | */ |
| 259 | public void kill( ) { |
| 260 | assert isUnused(); // Has no uses, so it is dead |
| 261 | unlock(); |
| 262 | moveDepsToWorklist(); |
| 263 | _type=null; // Flag as dead |
| 264 | while( nIns()>0 ) { // Set all inputs to null, recursively killing unused Nodes |
| 265 | Node old_def = _inputs.removeLast(); |
| 266 | // Revisit neighbor because removed use |
| 267 | if( old_def != null && CODE.add(old_def).delUse(this) ) |
| 268 | old_def.kill(); // If we removed the last use, the old def is now dead |
| 269 | } |
| 270 | assert isDead(); // Really dead now |
| 271 | } |
| 272 | |
| 273 | // Preserve CFG use-ordering when killing |
| 274 | public void killOrdered() { |
no test coverage detected