--- a/hotspot/src/share/vm/opto/callnode.hpp Tue Jun 10 10:00:59 2014 +0000
+++ b/hotspot/src/share/vm/opto/callnode.hpp Tue Jun 10 13:37:16 2014 +0200
@@ -30,6 +30,7 @@
#include "opto/multnode.hpp"
#include "opto/opcodes.hpp"
#include "opto/phaseX.hpp"
+#include "opto/replacednodes.hpp"
#include "opto/type.hpp"
// Portions of code courtesy of Clifford Click
@@ -335,6 +336,7 @@
OopMap* _oop_map; // Array of OopMap info (8-bit char) for GC
JVMState* const _jvms; // Pointer to list of JVM State objects
const TypePtr* _adr_type; // What type of memory does this node produce?
+ ReplacedNodes _replaced_nodes; // During parsing: list of pair of nodes from calls to GraphKit::replace_in_map()
// Many calls take *all* of memory as input,
// but some produce a limited subset of that memory as output.
@@ -426,6 +428,37 @@
void set_next_exception(SafePointNode* n);
bool has_exceptions() const { return next_exception() != NULL; }
+ // Helper methods to operate on replaced nodes
+ ReplacedNodes replaced_nodes() const {
+ return _replaced_nodes;
+ }
+
+ void set_replaced_nodes(ReplacedNodes replaced_nodes) {
+ _replaced_nodes = replaced_nodes;
+ }
+
+ void clone_replaced_nodes() {
+ _replaced_nodes.clone();
+ }
+ void record_replaced_node(Node* initial, Node* improved) {
+ _replaced_nodes.record(initial, improved);
+ }
+ void transfer_replaced_nodes_from(SafePointNode* sfpt, uint idx = 0) {
+ _replaced_nodes.transfer_from(sfpt->_replaced_nodes, idx);
+ }
+ void delete_replaced_nodes() {
+ _replaced_nodes.reset();
+ }
+ void apply_replaced_nodes() {
+ _replaced_nodes.apply(this);
+ }
+ void merge_replaced_nodes_with(SafePointNode* sfpt) {
+ _replaced_nodes.merge_with(sfpt->_replaced_nodes);
+ }
+ bool has_replaced_nodes() const {
+ return !_replaced_nodes.is_empty();
+ }
+
// Standard Node stuff
virtual int Opcode() const;
virtual bool pinned() const { return true; }