Default instruction output type to Any

If we're adding a bunch of instructions in the middle of an optimization
pass, we don't want to use their (currently uninitialized) types because
they start as Empty, and Empty is a subtype of everything. This breaks
some optimizations.

This Any will get refined the next time we call infer_types.
This commit is contained in:
Max Bernstein 2025-04-29 12:27:10 -04:00 committed by Takashi Kokubun
parent 608fe6ee53
commit b970ff1850
Notes: git 2025-04-29 18:01:49 +00:00

View File

@ -666,8 +666,12 @@ impl Function {
// Add an instruction to the function without adding it to any block
fn new_insn(&mut self, insn: Insn) -> InsnId {
let id = InsnId(self.insns.len());
if insn.has_output() {
self.insn_types.push(types::Any);
} else {
self.insn_types.push(types::Empty);
}
self.insns.push(insn);
self.insn_types.push(types::Empty);
id
}
@ -2854,8 +2858,8 @@ mod opt_tests {
bb0():
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
PatchPoint BOPRedefined(INTEGER_REDEFINED_OP_FLAG, BOP_PLUS)
v14:Fixnum[6] = Const Value(6)
Return v14
v15:Fixnum[6] = Const Value(6)
Return v15
"#]]);
}