> 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
