search for: propagatesiblingvalu

Displaying 7 results from an estimated 7 matches for "propagatesiblingvalu".

Did you mean: propagatesiblingvalue
2012 Sep 19
2
[LLVMdev] InlineSpiller Questions
...d). 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? Does that information exist anywhere or is it lost after traceSiblingValue terminates? What does propagateSiblingValue have to do with all of this? The comment is not very helpful: /// propagateSiblingValue - Propagate the value in SVI to dependents if it is /// known. Otherwise remember the dependency for later. Thanks for your help! -Dave
2012 Sep 19
0
[LLVMdev] InlineSpiller Questions
...have the > value information from r2 as far as I can tell. > > Is that correct? Sounds right. > 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. > 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. It's cheap enough to search up the dominator tree until you hit a PHI, but it can be very expensive to enumerate all the PHI predecessor...
2014 Nov 21
2
[LLVMdev] InlineSpiller.cpp bug?
...al target, but failed. It seems to be a rare case. To do it, I added the 'else' clause in the following: ... if (VNI->def == OrigVNI->def) { DEBUG(dbgs() << "orig phi value\n"); SVI->second.DefByOrigPHI = true; SVI->second.AllDefsAreReloads = false; propagateSiblingValue(SVI); continue; } // check if the valno is actually an orig PHI, but is not OrigVNI else { LiveInterval &OrigLI = LIS.getInterval(Original); VNInfo *OrigVNI_curr = OrigLI.getVNInfoAt(VNI->def); if (OrigVNI_curr->def == VNI->def) assert(0 && "OrigLI contained...
2014 Dec 05
2
[LLVMdev] InlineSpiller.cpp bug?
...al target, but failed. It seems to be a rare case. To do it, I added the 'else' clause in the following: ... if (VNI->def == OrigVNI->def) { DEBUG(dbgs() << "orig phi value\n"); SVI->second.DefByOrigPHI = true; SVI->second.AllDefsAreReloads = false; propagateSiblingValue(SVI); continue; } // check if the valno is actually an orig PHI, but is not OrigVNI else { LiveInterval &OrigLI = LIS.getInterval(Original); VNInfo *OrigVNI_curr = OrigLI.getVNInfoAt(VNI->def); if (OrigVNI_curr->def == VNI->def) assert(0 && "OrigLI contained...
2014 Dec 09
2
[LLVMdev] InlineSpiller.cpp bug?
...do it, I added the ‘else’ clause in the following: >> >> … >> if (VNI->def == OrigVNI->def) { >> DEBUG(dbgs() << "orig phi value\n"); >> SVI->second.DefByOrigPHI = true; >> SVI->second.AllDefsAreReloads = false; >> propagateSiblingValue(SVI); >> continue; >> } >> // check if the valno is actually an orig PHI, but is not OrigVNI >> else { >> LiveInterval &OrigLI = LIS.getInterval(Original); >> VNInfo *OrigVNI_curr = OrigLI.getVNInfoAt(VNI->def); >> if (OrigVNI_curr->def...
2012 Sep 19
2
[LLVMdev] InlineSpiller Questions
...alue 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
2014 Nov 18
3
[LLVMdev] InlineSpiller.cpp bug?
Hi, I have encountered a test case where InlineSpiller generates bad code. A register is reloaded but never spilled, and I suspect a bug in InlineSpiller. A register is live over a loop that also have two inner loops. It is not used or defined over the inner loops. It is split into two sibling registers, where one covers just the inner loops interval, which is then spilled. In spill(),