Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:>> If we decide to spill r3, we call traceSiblingValue to find the original >> def (the load). After traceSiblingValue we have the load instruction to >> define r1 and the value number information for r3. We don't have the >> value information from r2 as far as I can tell. >> >> Is that correct? > > Sounds right.Oh good, I'm understanding something. :)>> Does that information exist anywhere or is it lost after >> traceSiblingValue terminates? > > The r2 value would be cached in the SibValueInfo Deps array for the r1 > value.So if there are multiple values between r2 and r3 (r2.1, r2.2, etc.) I would just follow the chains implied by the SibValueInfo Deps array? Basically, I want to find all of the live ranges related to r1.>> What does propagateSiblingValue have to do with all of this? > > It's a performance optimization to handle the quadratic number of CFG > edges appearing after tail-duplicating an indirectbr.Ok, so it just makes traceSiblingValue faster. Thanks for your help Jakob! -Dave
On Sep 19, 2012, at 10:49 AM, <dag at cray.com> wrote:> Jakob Stoklund Olesen <stoklund at 2pi.dk> writes: > > So if there are multiple values between r2 and r3 (r2.1, r2.2, etc.) I > would just follow the chains implied by the SibValueInfo Deps array? > Basically, I want to find all of the live ranges related to r1.It really depends on what you're trying to do. The whole sibling value machinery is only concerned with tracking different virtual register value numbers that are known to have the same value. It doesn't really apply to anything else. /jakob
Jakob Stoklund Olesen <stoklund at 2pi.dk> writes:> On Sep 19, 2012, at 10:49 AM, <dag at cray.com> wrote: > >> Jakob Stoklund Olesen <stoklund at 2pi.dk> writes: >> >> So if there are multiple values between r2 and r3 (r2.1, r2.2, etc.) I >> would just follow the chains implied by the SibValueInfo Deps array? >> Basically, I want to find all of the live ranges related to r1. > > It really depends on what you're trying to do. > > The whole sibling value machinery is only concerned with tracking > different virtual register value numbers that are known to have the > same value. It doesn't really apply to anything else.Are all of those sibling values guaranteed to ultimately derive from the same def, in the sense that they can be traced through copies, phis, etc. back to a single instruction? I'm looking at scheduling the load in my example and I need to be able to check for conflicting stores within relevant live ranges. Is there a design document for the new InlineSpiller and SplitKit somewhere? -Dave