> On Dec 4, 2015, at 9:06 AM, Erik Eckstein <[email protected]> wrote:
> Hi,
> 
> currently some instructions, like alloc_stack and alloc_box (I think they are 
> the only ones) return 2 values. For this we have the "result number" in 
> SILValue, e.g. %3#0, %3#1
> 
> We could represent the same by using a projection instruction, e.g.
> 
> %3 = alloc_stack $Type  // == the old %3#0
> %4 = project_stack %1   // == the old %3#1
> 
> And actually we already have the project_box instruction.
> 
> This would simplify SILValues and many places in optimization 
> passes/analysis. Yesterday I spent several hours to debug a problem where in 
> some pass the wrong result number was used.
> 
> What do you think?

This would mean generating a lot of extra instructions for a lot of very common 
cases, like alloc_stack.

Was your bug related to the implicit conversion of a SILInstruction* -> 
SILValue that silently uses result 0?  I’ve been thinking for a while that we 
should make that conditional on the SILInstruction having exactly one result.

John.
_______________________________________________
swift-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to