RFR (M): 7173340: C2: code cleanup: use PhaseIterGVN::replace_edge(Node*, int, Node*) where applicable (original) (raw)
Vladimir Ivanov vladimir.x.ivanov at oracle.com
Thu Jun 7 10:27:35 PDT 2012
- Previous message: RFR (M): 7173340: C2: code cleanup: use PhaseIterGVN::replace_edge(Node*, int, Node*) where applicable
- Next message: RFR (M): 7173340: C2: code cleanup: use PhaseIterGVN::replace_edge(Node*, int, Node*) where applicable
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Vladimir,
FYI, CTW testing is finished. Results are clean.
Best regards, Vladimir Ivanov
On 06/07/12 03:35, Vladimir Ivanov wrote:
Vladimir,
Thanks for the review and for catching the wrong code! It was caused by a last minute change to eliminate multiple rehash requests from consequent replaceinputof calls. I was sure I couldn't break anything. How wrong I was... =) Updated webrev with all your suggestions incorporated: http://cr.openjdk.java.net/~vi/7173340/webrev.02/ Testing of the latest changes are in progress. Will notify you when it's finished. Best regards, Vladimir Ivanov On 6/6/12 10:15 PM, Vladimir Kozlov wrote: Vladimir,
Next code is wrong, useclone edge update should be after use node update since it is used there: ! igvn.replaceedgeof(useclone, LoopNode::LoopBackControl, C->top()); ! igvn.rehashnodedelayed(use); // Multiple edge updates use->setreq(LoopNode::EntryControl, useclone->in(LoopNode::LoopBackControl)); use->setreq(LoopNode::LoopBackControl, C->top()); Could you also define rehashnodedelayed() first and use it in replaceedgeof() and deleteedgeof() methods since it is not required to have setreq() and delreq() before worklist.push()? It was my suggestion to use 'edge' in new methods name but I think it is not accurate. Methods update only input edges so it would be better to call methods replaceinputof() and deleteinputof(). Thanks, Vladimir Vladimir Ivanov wrote: http://cr.openjdk.java.net/~vi/7173340/webrev.01/
The idea is to replace the following patterns with a single call to a corresponding method from PhaseIterGVN: 1) igvn.hashdelete(n); n->setreq(i, in); igvn.worklist.push(n); 2) hashdelete(n); n->delreq(i); worklist.push(n); 3) hashdelete(n); worklist.push(n); to 1) PhaseIterGVN::replaceedgeof(Node*, int, Node*) 2) PhaseIterGVN::deleteedgeof(Node*, int) 3) PhaseIterGVN::rehashnodedelayed(Node*) I reordered code in some places, but it should be safe. Please, confirm. Testing: VM tests, VM regression tests Thanks! Best regards, Vladimir Ivanov
- Previous message: RFR (M): 7173340: C2: code cleanup: use PhaseIterGVN::replace_edge(Node*, int, Node*) where applicable
- Next message: RFR (M): 7173340: C2: code cleanup: use PhaseIterGVN::replace_edge(Node*, int, Node*) where applicable
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the hotspot-compiler-dev mailing list