// return true if any element of vars is an argument bool BCEscapeAnalyzer::is_argument(ArgumentMap vars) { for (int i = 0; i < _arg_size; i++) { if (vars.contains(i)) return true; } return false; }
void BCEscapeAnalyzer::clear_bits(ArgumentMap vars, BitMap &bm) { for (int i = 0; i <= _arg_size; i++) { if (vars.contains(i)) { bm.clear_bit(i); } } }
// return true if all argument elements of vars are returned bool BCEscapeAnalyzer::returns_all(ArgumentMap vars) { for (int i = 0; i < _arg_size; i++) { if (vars.contains(i) && !_arg_returned.test(i)) { return false; } } return true; }
void BCEscapeAnalyzer::set_returned(ArgumentMap vars) { for (int i = 0; i < _arg_size; i++) { if (vars.contains(i)) _arg_returned.set(i); } _return_local = _return_local && !(vars.contains_unknown() || vars.contains_allocated()); _return_allocated = _return_allocated && vars.contains_allocated() && !(vars.contains_unknown() || vars.contains_vars()); }
// return true if any element of vars is an arg_stack argument bool BCEscapeAnalyzer::is_arg_stack(ArgumentMap vars){ if (_conservative) return true; for (int i = 0; i < _arg_size; i++) { if (vars.contains(i) && _arg_stack.test(i)) return true; } return false; }
void BCEscapeAnalyzer::clear_bits(ArgumentMap vars, VectorSet &bm) { for (int i = 0; i < _arg_size; i++) { if (vars.contains(i)) { bm >>= i; } }