mirror of
https://github.com/open-goal/jak-project
synced 2026-07-08 22:45:00 -04:00
fix use def issues (#629)
This commit is contained in:
@@ -350,14 +350,15 @@ std::vector<FormElement*> FormStack::rewrite(FormPool& pool, const Env& env) con
|
||||
return result;
|
||||
}
|
||||
|
||||
void rewrite_to_get_var(std::vector<FormElement*>& default_result,
|
||||
FormPool& pool,
|
||||
const RegisterAccess& var,
|
||||
const Env& env) {
|
||||
std::optional<RegisterAccess> rewrite_to_get_var(std::vector<FormElement*>& default_result,
|
||||
FormPool& pool,
|
||||
const RegisterAccess& var,
|
||||
const Env& env) {
|
||||
bool keep_going = true;
|
||||
RegisterAccess var_to_get = var;
|
||||
|
||||
std::vector<FormElement*> result;
|
||||
std::optional<RegisterAccess> result_access;
|
||||
|
||||
bool first = true;
|
||||
while (keep_going && !default_result.empty()) {
|
||||
@@ -386,26 +387,33 @@ void rewrite_to_get_var(std::vector<FormElement*>& default_result,
|
||||
} else {
|
||||
result = last_op_as_set->src()->elts();
|
||||
}
|
||||
result_access = last_op_as_set->dst();
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
if (result.empty()) {
|
||||
default_result.push_back(pool.alloc_element<SimpleAtomElement>(SimpleAtom::make_var(var)));
|
||||
return {};
|
||||
} else {
|
||||
for (auto x : result) {
|
||||
x->parent_form = nullptr;
|
||||
default_result.push_back(x);
|
||||
}
|
||||
return result_access;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<FormElement*> rewrite_to_get_var(FormStack& stack,
|
||||
FormPool& pool,
|
||||
const RegisterAccess& var,
|
||||
const Env& env) {
|
||||
const Env& env,
|
||||
std::optional<RegisterAccess>* used_var) {
|
||||
auto default_result = stack.rewrite(pool, env);
|
||||
rewrite_to_get_var(default_result, pool, var, env);
|
||||
auto uv = rewrite_to_get_var(default_result, pool, var, env);
|
||||
if (used_var) {
|
||||
*used_var = uv;
|
||||
}
|
||||
return default_result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user