comparison src/share/vm/opto/chaitin.hpp @ 14498:04e7587c97dc

8032656: Tag the MachSpillCopies with purpose information Summary: Subclassed the MachSpillCopyNode with different subnodes for different spill purposes to enhance debugging / visualization Reviewed-by: kvn, roland
author adlertz
date Tue, 25 Feb 2014 14:09:02 +0100
parents 99fc8c086679
children 4ca6dc0799b6
comparison
equal deleted inserted replaced
14497:9a83b7b3e37c 14498:04e7587c97dc
32 #include "opto/live.hpp" 32 #include "opto/live.hpp"
33 #include "opto/matcher.hpp" 33 #include "opto/matcher.hpp"
34 #include "opto/phase.hpp" 34 #include "opto/phase.hpp"
35 #include "opto/regalloc.hpp" 35 #include "opto/regalloc.hpp"
36 #include "opto/regmask.hpp" 36 #include "opto/regmask.hpp"
37 #include "opto/machnode.hpp"
37 38
38 class LoopTree; 39 class LoopTree;
39 class MachCallNode;
40 class MachSafePointNode;
41 class Matcher; 40 class Matcher;
42 class PhaseCFG; 41 class PhaseCFG;
43 class PhaseLive; 42 class PhaseLive;
44 class PhaseRegAlloc; 43 class PhaseRegAlloc;
45 class PhaseChaitin; 44 class PhaseChaitin;
422 uint _lo_stk_degree; // Head of lo-stk-degree LRGs list 421 uint _lo_stk_degree; // Head of lo-stk-degree LRGs list
423 uint _hi_degree; // Head of hi-degree LRGs list 422 uint _hi_degree; // Head of hi-degree LRGs list
424 uint _simplified; // Linked list head of simplified LRGs 423 uint _simplified; // Linked list head of simplified LRGs
425 424
426 // Helper functions for Split() 425 // Helper functions for Split()
427 uint split_DEF( Node *def, Block *b, int loc, uint max, Node **Reachblock, Node **debug_defs, GrowableArray<uint> splits, int slidx ); 426 uint split_DEF(Node *def, Block *b, int loc, uint max, Node **Reachblock, Node **debug_defs, GrowableArray<uint> splits, int slidx );
428 uint split_USE( Node *def, Block *b, Node *use, uint useidx, uint max, bool def_down, bool cisc_sp, GrowableArray<uint> splits, int slidx ); 427 uint split_USE(MachSpillCopyNode::SpillType spill_type, Node *def, Block *b, Node *use, uint useidx, uint max, bool def_down, bool cisc_sp, GrowableArray<uint> splits, int slidx );
429 428
430 //------------------------------clone_projs------------------------------------ 429 //------------------------------clone_projs------------------------------------
431 // After cloning some rematerialized instruction, clone any MachProj's that 430 // After cloning some rematerialized instruction, clone any MachProj's that
432 // follow it. Example: Intel zero is XOR, kills flags. Sparc FP constants 431 // follow it. Example: Intel zero is XOR, kills flags. Sparc FP constants
433 // use G3 as an address temp. 432 // use G3 as an address temp.
445 444
446 Node *split_Rematerialize(Node *def, Block *b, uint insidx, uint &maxlrg, GrowableArray<uint> splits, 445 Node *split_Rematerialize(Node *def, Block *b, uint insidx, uint &maxlrg, GrowableArray<uint> splits,
447 int slidx, uint *lrg2reach, Node **Reachblock, bool walkThru); 446 int slidx, uint *lrg2reach, Node **Reachblock, bool walkThru);
448 // True if lidx is used before any real register is def'd in the block 447 // True if lidx is used before any real register is def'd in the block
449 bool prompt_use( Block *b, uint lidx ); 448 bool prompt_use( Block *b, uint lidx );
450 Node *get_spillcopy_wide( Node *def, Node *use, uint uidx ); 449 Node *get_spillcopy_wide(MachSpillCopyNode::SpillType spill_type, Node *def, Node *use, uint uidx );
451 // Insert the spill at chosen location. Skip over any intervening Proj's or 450 // Insert the spill at chosen location. Skip over any intervening Proj's or
452 // Phis. Skip over a CatchNode and projs, inserting in the fall-through block 451 // Phis. Skip over a CatchNode and projs, inserting in the fall-through block
453 // instead. Update high-pressure indices. Create a new live range. 452 // instead. Update high-pressure indices. Create a new live range.
454 void insert_proj( Block *b, uint i, Node *spill, uint maxlrg ); 453 void insert_proj( Block *b, uint i, Node *spill, uint maxlrg );
455 454