Refactor: Separate LocalRef
variant for not-evaluated-yet operands
This commit is contained in:
parent
d012d2f96e
commit
49798605a0
7 changed files with 26 additions and 20 deletions
|
@ -123,7 +123,10 @@ enum LocalRef<'tcx, V> {
|
|||
/// Every time it is initialized, we have to reallocate the place
|
||||
/// and update the fat pointer. That's the reason why it is indirect.
|
||||
UnsizedPlace(PlaceRef<'tcx, V>),
|
||||
Operand(Option<OperandRef<'tcx, V>>),
|
||||
/// The backend [`OperandValue`] has already been generated.
|
||||
Operand(OperandRef<'tcx, V>),
|
||||
/// Will be a `Self::Operand` once we get to its definition.
|
||||
PendingOperand,
|
||||
}
|
||||
|
||||
impl<'a, 'tcx, V: CodegenObject> LocalRef<'tcx, V> {
|
||||
|
@ -135,9 +138,9 @@ impl<'a, 'tcx, V: CodegenObject> LocalRef<'tcx, V> {
|
|||
// Zero-size temporaries aren't always initialized, which
|
||||
// doesn't matter because they don't contain data, but
|
||||
// we need something in the operand.
|
||||
LocalRef::Operand(Some(OperandRef::new_zst(bx, layout)))
|
||||
LocalRef::Operand(OperandRef::new_zst(bx, layout))
|
||||
} else {
|
||||
LocalRef::Operand(None)
|
||||
LocalRef::PendingOperand
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -337,7 +340,7 @@ fn arg_local_refs<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
|
|||
// We don't have to cast or keep the argument in the alloca.
|
||||
// FIXME(eddyb): We should figure out how to use llvm.dbg.value instead
|
||||
// of putting everything in allocas just so we can use llvm.dbg.declare.
|
||||
let local = |op| LocalRef::Operand(Some(op));
|
||||
let local = |op| LocalRef::Operand(op);
|
||||
match arg.mode {
|
||||
PassMode::Ignore => {
|
||||
return local(OperandRef::new_zst(bx, arg.layout));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue