Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/matcher.hpp @ 729:04fa5affa478
6709742: find_base_for_derived's use of Ideal NULL is unsafe causing crashes during register allocation
Summary: Create a mach node corresponding to ideal node ConP #NULL specifically for derived pointers.
Reviewed-by: never
author | kvn |
---|---|
date | Wed, 22 Apr 2009 17:03:18 -0700 |
parents | 4d9884b01ba6 |
children | 93c14e5562c4 |
comparison
equal
deleted
inserted
replaced
728:85656c8fa13f | 729:04fa5affa478 |
---|---|
107 void verify_new_nodes_only(Node* root); | 107 void verify_new_nodes_only(Node* root); |
108 | 108 |
109 Node* _mem_node; // Ideal memory node consumed by mach node | 109 Node* _mem_node; // Ideal memory node consumed by mach node |
110 #endif | 110 #endif |
111 | 111 |
112 // Mach node for ConP #NULL | |
113 MachNode* _mach_null; | |
114 | |
112 public: | 115 public: |
113 int LabelRootDepth; | 116 int LabelRootDepth; |
114 static const int base2reg[]; // Map Types to machine register types | 117 static const int base2reg[]; // Map Types to machine register types |
115 // Convert ideal machine register to a register mask for spill-loads | 118 // Convert ideal machine register to a register mask for spill-loads |
116 static const RegMask *idealreg2regmask[]; | 119 static const RegMask *idealreg2regmask[]; |
119 void init_spill_mask( Node *ret ); | 122 void init_spill_mask( Node *ret ); |
120 // Convert machine register number to register mask | 123 // Convert machine register number to register mask |
121 static uint mreg2regmask_max; | 124 static uint mreg2regmask_max; |
122 static RegMask mreg2regmask[]; | 125 static RegMask mreg2regmask[]; |
123 static RegMask STACK_ONLY_mask; | 126 static RegMask STACK_ONLY_mask; |
127 | |
128 MachNode* mach_null() const { return _mach_null; } | |
124 | 129 |
125 bool is_shared( Node *n ) { return _shared.test(n->_idx) != 0; } | 130 bool is_shared( Node *n ) { return _shared.test(n->_idx) != 0; } |
126 void set_shared( Node *n ) { _shared.set(n->_idx); } | 131 void set_shared( Node *n ) { _shared.set(n->_idx); } |
127 bool is_visited( Node *n ) { return _visited.test(n->_idx) != 0; } | 132 bool is_visited( Node *n ) { return _visited.test(n->_idx) != 0; } |
128 void set_visited( Node *n ) { _visited.set(n->_idx); } | 133 void set_visited( Node *n ) { _visited.set(n->_idx); } |