< prev index next >
src/share/vm/opto/superword.hpp
Print this page
@@ -235,23 +235,25 @@
GrowableArray<Node*> _stk; // Stack of nodes
public:
SuperWord(PhaseIdealLoop* phase);
- void transform_loop(IdealLoopTree* lpt);
+ void transform_loop(IdealLoopTree* lpt, bool do_optimization);
// Accessors for SWPointer
PhaseIdealLoop* phase() { return _phase; }
IdealLoopTree* lpt() { return _lpt; }
PhiNode* iv() { return _iv; }
+ bool early_return() { return _early_return; }
private:
IdealLoopTree* _lpt; // Current loop tree node
LoopNode* _lp; // Current LoopNode
Node* _bb; // Current basic block
PhiNode* _iv; // Induction var
bool _race_possible; // In cases where SDMU is true
+ bool _early_return; // True if we do not initialize
// Accessors
Arena* arena() { return _arena; }
Node* bb() { return _bb; }
@@ -441,10 +443,13 @@
Node* _adr; // address pointer
jint _scale; // multipler for iv (in bytes), 0 if no loop iv
jint _offset; // constant offset (in bytes)
Node* _invar; // invariant offset (in bytes), NULL if none
bool _negate_invar; // if true then use: (0 - _invar)
+ Node_Stack* _nstack; // stack used to record a swpointer trace of variants
+ bool _analyze_only; // Used in loop unrolling only for swpointer trace
+ uint _stack_idx; // Used in loop unrolling only for swpointer trace
PhaseIdealLoop* phase() { return _slp->phase(); }
IdealLoopTree* lpt() { return _slp->lpt(); }
PhiNode* iv() { return _slp->iv(); } // Induction var
@@ -467,11 +472,11 @@
Equal = 4,
NotEqual = (Less | Greater),
NotComparable = (Less | Greater | Equal)
};
- SWPointer(MemNode* mem, SuperWord* slp);
+ SWPointer(MemNode* mem, SuperWord* slp, Node_Stack *nstack, bool analyze_only);
// Following is used to create a temporary object during
// the pattern match of an address expression.
SWPointer(SWPointer* p);
bool valid() { return _adr != NULL; }
@@ -483,10 +488,11 @@
int scale_in_bytes() { return _scale; }
Node* invar() { return _invar; }
bool negate_invar() { return _negate_invar; }
int offset_in_bytes() { return _offset; }
int memory_size() { return _mem->memory_size(); }
+ Node_Stack* node_stack() { return _nstack; }
// Comparable?
int cmp(SWPointer& q) {
if (valid() && q.valid() &&
(_adr == q._adr || _base == _adr && q._base == q._adr) &&
< prev index next >