Mercurial > hg > graal-jvmci-8
comparison src/share/vm/ci/bcEscapeAnalyzer.cpp @ 11163:c90c698831d7
8020215: Different execution plan when using JIT vs interpreter
Summary: fix bytecode analyzer
Reviewed-by: twisti
author | kvn |
---|---|
date | Fri, 12 Jul 2013 14:01:37 -0700 |
parents | bb33c6fdcf0d |
children | de6a9e811145 |
comparison
equal
deleted
inserted
replaced
11111:dec841e0c9aa | 11163:c90c698831d7 |
---|---|
136 return true; | 136 return true; |
137 } | 137 } |
138 return false; | 138 return false; |
139 } | 139 } |
140 | 140 |
141 // return true if all argument elements of vars are returned | |
142 bool BCEscapeAnalyzer::returns_all(ArgumentMap vars) { | |
143 for (int i = 0; i < _arg_size; i++) { | |
144 if (vars.contains(i) && !_arg_returned.test(i)) { | |
145 return false; | |
146 } | |
147 } | |
148 return true; | |
149 } | |
150 | |
141 void BCEscapeAnalyzer::clear_bits(ArgumentMap vars, VectorSet &bm) { | 151 void BCEscapeAnalyzer::clear_bits(ArgumentMap vars, VectorSet &bm) { |
142 for (int i = 0; i < _arg_size; i++) { | 152 for (int i = 0; i < _arg_size; i++) { |
143 if (vars.contains(i)) { | 153 if (vars.contains(i)) { |
144 bm >>= i; | 154 bm >>= i; |
145 } | 155 } |
163 if (vars.contains_unknown() || vars.contains_allocated()) { | 173 if (vars.contains_unknown() || vars.contains_allocated()) { |
164 _return_local = false; | 174 _return_local = false; |
165 } | 175 } |
166 if (vars.contains_unknown() || vars.contains_vars()) { | 176 if (vars.contains_unknown() || vars.contains_vars()) { |
167 _return_allocated = false; | 177 _return_allocated = false; |
178 } | |
179 if (_return_local && vars.contains_vars() && !returns_all(vars)) { | |
180 // Return result should be invalidated if args in new | |
181 // state are not recorded in return state. | |
182 _return_local = false; | |
168 } | 183 } |
169 } | 184 } |
170 } | 185 } |
171 | 186 |
172 void BCEscapeAnalyzer::set_dirty(ArgumentMap vars) { | 187 void BCEscapeAnalyzer::set_dirty(ArgumentMap vars) { |