Modifying other AbstractAttributes to use Liveness AA and skip dead instructions.
SmallPtrSetImpl<ReturnInst *> &
Do not modify UniqueRV and do return true to indicate this return value was handled and all is OK. The idea is, when dead then ignore the return value.
Move into a helper function.
- adding instruction-wise is Assumed/Known Dead checks. This resolves FIXME in TEST 2.
- addressing comments
It should be noted that there is still a problem in AAReturnedValues. I will have to do a debug build, which will take quiet a lot of time, to investigate further.
some comments, no major problem though.
Maybe move this as a member into AAIsDead with the argument beeing a ArrayRef<Instruction *> so we can reuse it
I'll commit these changes as a fix today.
Let's move this logic into the checkForAllCallSites call so all users benefit.
please add an assert (also above) to verify I (or BB) is in the AnchoredScope.
return getKnown() && isAssumedDead(I)
to reduce duplication of logic.
// At least one new instruction encountered.
|751 ↗||(On Diff #212298)|
Please keep these and add the additional attribute sets instead.
Almost there. I added a last set of comments, most minor.
Could you add one more test case:
internal function foo, called 2 times but one call site is dead. We want to derive something about foo from the call site.
Thanks for this generic version. Please add doxygen documentation as well.
If you want LivenessAA might not be available, check for null.
Test for nullptr.
Comments here and elsewhere say "blocks" but check instructions.
Pass this as reference (as we always do in the Attributor).
Nit: CS->getFunction() or CS.getInstruction()->getFunction()
not return true but continue! Only this call site is OK if it is dead.
remove the comment.
One minor thing and one change request + test. Other than that, LGTM.
Please pass this as a reference not pointer.
Move the liveness stuff before the CallSite CS stuff. If the user is dead, it does not matter if it is a call site, a direct call site, etc., it is dead after all.
Also add a test for this please, e.g., pass the function pointer to a another unknown function or store it away but the instruction that does so is dead.