Mercurial > hg > graal-compiler
comparison src/share/vm/opto/lcm.cpp @ 1151:1271af4ec18c
6912517: JIT bug compiles out (and stops running) code that needs to be run. Causes NPE.
Summary: Add missing check that value is used in memory expression in instructions with embedded load.
Reviewed-by: never, jrose
author | kvn |
---|---|
date | Thu, 07 Jan 2010 16:26:31 -0800 |
parents | 97125851f396 |
children | c18cbe5936b8 3657cb01ffc5 |
comparison
equal
deleted
inserted
replaced
1150:f62a22282a47 | 1151:1271af4ec18c |
---|---|
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; |