1.1 --- a/src/share/vm/opto/idealKit.hpp Tue Mar 26 10:05:33 2013 +0100 1.2 +++ b/src/share/vm/opto/idealKit.hpp Tue Mar 26 12:55:26 2013 -0700 1.3 @@ -102,7 +102,6 @@ 1.4 Compile * const C; 1.5 PhaseGVN &_gvn; 1.6 GrowableArray<Node*>* _pending_cvstates; // stack of cvstates 1.7 - GrowableArray<Node*>* _delay_transform; // delay invoking gvn.transform until drain 1.8 Node* _cvstate; // current cvstate (control, memory and variables) 1.9 uint _var_ct; // number of variables 1.10 bool _delay_all_transforms; // flag forcing all transforms to be delayed 1.11 @@ -121,7 +120,7 @@ 1.12 void clear(Node* m); // clear a cvstate 1.13 void stop() { clear(_cvstate); } // clear current cvstate 1.14 Node* delay_transform(Node* n); 1.15 - Node* transform(Node* n); // gvn.transform or push node on delay list 1.16 + Node* transform(Node* n); // gvn.transform or skip it 1.17 Node* promote_to_phi(Node* n, Node* reg);// Promote "n" to a phi on region "reg" 1.18 bool was_promoted_to_phi(Node* n, Node* reg) { 1.19 return (n->is_Phi() && n->in(0) == reg); 1.20 @@ -146,7 +145,6 @@ 1.21 IdealKit(GraphKit* gkit, bool delay_all_transforms = false, bool has_declarations = false); 1.22 ~IdealKit() { 1.23 stop(); 1.24 - drain_delay_transform(); 1.25 } 1.26 void sync_kit(GraphKit* gkit); 1.27 1.28 @@ -173,7 +171,6 @@ 1.29 void bind(Node* lab); 1.30 void goto_(Node* lab, bool bind = false); 1.31 void declarations_done(); 1.32 - void drain_delay_transform(); 1.33 1.34 Node* IfTrue(IfNode* iff) { return transform(new (C) IfTrueNode(iff)); } 1.35 Node* IfFalse(IfNode* iff) { return transform(new (C) IfFalseNode(iff)); } 1.36 @@ -198,7 +195,11 @@ 1.37 Node* thread() { return gvn().transform(new (C) ThreadLocalNode()); } 1.38 1.39 // Pointers 1.40 - Node* AddP(Node *base, Node *ptr, Node *off) { return transform(new (C) AddPNode(base, ptr, off)); } 1.41 + 1.42 + // Raw address should be transformed regardless 'delay_transform' flag 1.43 + // to produce canonical form CastX2P(offset). 1.44 + Node* AddP(Node *base, Node *ptr, Node *off) { return _gvn.transform(new (C) AddPNode(base, ptr, off)); } 1.45 + 1.46 Node* CmpP(Node* l, Node* r) { return transform(new (C) CmpPNode(l, r)); } 1.47 #ifdef _LP64 1.48 Node* XorX(Node* l, Node* r) { return transform(new (C) XorLNode(l, r)); } 1.49 @@ -208,8 +209,6 @@ 1.50 Node* URShiftX(Node* l, Node* r) { return transform(new (C) URShiftXNode(l, r)); } 1.51 Node* ConX(jint k) { return (Node*)gvn().MakeConX(k); } 1.52 Node* CastPX(Node* ctl, Node* p) { return transform(new (C) CastP2XNode(ctl, p)); } 1.53 - // Add a fixed offset to a pointer 1.54 - Node* basic_plus_adr(Node* base, Node* ptr, intptr_t offset); 1.55 1.56 // Memory operations 1.57