equal
deleted
inserted
replaced
118 case Op_LoadKlass: |
118 case Op_LoadKlass: |
119 case Op_LoadNKlass: |
119 case Op_LoadNKlass: |
120 case Op_LoadRange: |
120 case Op_LoadRange: |
121 case Op_LoadD_unaligned: |
121 case Op_LoadD_unaligned: |
122 case Op_LoadL_unaligned: |
122 case Op_LoadL_unaligned: |
|
123 assert(mach->in(2) == val, "should be address"); |
123 break; |
124 break; |
124 case Op_StoreB: |
125 case Op_StoreB: |
125 case Op_StoreC: |
126 case Op_StoreC: |
126 case Op_StoreCM: |
127 case Op_StoreCM: |
127 case Op_StoreD: |
128 case Op_StoreD: |
144 // embedded loads |
145 // embedded loads |
145 continue; |
146 continue; |
146 default: // Also check for embedded loads |
147 default: // Also check for embedded loads |
147 if( !mach->needs_anti_dependence_check() ) |
148 if( !mach->needs_anti_dependence_check() ) |
148 continue; // Not an memory op; skip it |
149 continue; // Not an memory op; skip it |
|
150 { |
|
151 // Check that value is used in memory address. |
|
152 Node* base; |
|
153 Node* index; |
|
154 const MachOper* oper = mach->memory_inputs(base, index); |
|
155 if (oper == NULL || oper == (MachOper*)-1) { |
|
156 continue; // Not an memory op; skip it |
|
157 } |
|
158 if (val == base || |
|
159 val == index && val->bottom_type()->isa_narrowoop()) { |
|
160 break; // Found it |
|
161 } else { |
|
162 continue; // Skip it |
|
163 } |
|
164 } |
149 break; |
165 break; |
150 } |
166 } |
151 // check if the offset is not too high for implicit exception |
167 // check if the offset is not too high for implicit exception |
152 { |
168 { |
153 intptr_t offset = 0; |
169 intptr_t offset = 0; |