Simplify the code in make_inst_results_reusing; NFC.
This commit is contained in:
@@ -452,29 +452,15 @@ impl DataFlowGraph {
|
|||||||
I: Iterator<Item = Option<Value>>,
|
I: Iterator<Item = Option<Value>>,
|
||||||
{
|
{
|
||||||
let mut reuse = reuse.fuse();
|
let mut reuse = reuse.fuse();
|
||||||
let constraints = self.insts[inst].opcode().constraints();
|
|
||||||
let fixed_results = constraints.fixed_results();
|
|
||||||
let mut total_results = fixed_results;
|
|
||||||
|
|
||||||
self.results[inst].clear(&mut self.value_lists);
|
self.results[inst].clear(&mut self.value_lists);
|
||||||
|
|
||||||
// The fixed results will appear at the front of the list.
|
|
||||||
for res_idx in 0..fixed_results {
|
|
||||||
let ty = constraints.result_type(res_idx, ctrl_typevar);
|
|
||||||
if let Some(Some(v)) = reuse.next() {
|
|
||||||
debug_assert_eq!(self.value_type(v), ty, "Reused {} is wrong type", ty);
|
|
||||||
self.attach_result(inst, v);
|
|
||||||
} else {
|
|
||||||
self.append_result(inst, ty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the call signature if this is a function call.
|
// Get the call signature if this is a function call.
|
||||||
if let Some(sig) = self.call_signature(inst) {
|
if let Some(sig) = self.call_signature(inst) {
|
||||||
// Create result values corresponding to the call return types.
|
// Create result values corresponding to the call return types.
|
||||||
let var_results = self.signatures[sig].returns.len();
|
debug_assert_eq!(self.insts[inst].opcode().constraints().fixed_results(), 0);
|
||||||
total_results += var_results;
|
let num_results = self.signatures[sig].returns.len();
|
||||||
for res_idx in 0..var_results {
|
for res_idx in 0..num_results {
|
||||||
let ty = self.signatures[sig].returns[res_idx].value_type;
|
let ty = self.signatures[sig].returns[res_idx].value_type;
|
||||||
if let Some(Some(v)) = reuse.next() {
|
if let Some(Some(v)) = reuse.next() {
|
||||||
debug_assert_eq!(self.value_type(v), ty, "Reused {} is wrong type", ty);
|
debug_assert_eq!(self.value_type(v), ty, "Reused {} is wrong type", ty);
|
||||||
@@ -483,9 +469,22 @@ impl DataFlowGraph {
|
|||||||
self.append_result(inst, ty);
|
self.append_result(inst, ty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
num_results
|
||||||
|
} else {
|
||||||
|
// Create result values corresponding to the opcode's constraints.
|
||||||
|
let constraints = self.insts[inst].opcode().constraints();
|
||||||
|
let num_results = constraints.fixed_results();
|
||||||
|
for res_idx in 0..num_results {
|
||||||
|
let ty = constraints.result_type(res_idx, ctrl_typevar);
|
||||||
|
if let Some(Some(v)) = reuse.next() {
|
||||||
|
debug_assert_eq!(self.value_type(v), ty, "Reused {} is wrong type", ty);
|
||||||
|
self.attach_result(inst, v);
|
||||||
|
} else {
|
||||||
|
self.append_result(inst, ty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
num_results
|
||||||
}
|
}
|
||||||
|
|
||||||
total_results
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a `ReplaceBuilder` that will replace `inst` with a new instruction in place.
|
/// Create a `ReplaceBuilder` that will replace `inst` with a new instruction in place.
|
||||||
|
|||||||
Reference in New Issue
Block a user