[llvm] r274098 - [ValueTracking] Teach computeKnownBits for PHI nodes to compute sign bit for a recurrence with a NSW addition.
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 29 00:34:46 PDT 2016
I think I have to redact my "I suspect this isn't anything
complicated" tone. :)
To do the right thing in cases like the one you pastebinned, we'll
have to track `IsSigned` on individual `NarrowIVDefUse` instances.
Then for instance, in
%i.050 = phi i32 [ %add15, %for.body ], [ 0, %for.body.preheader ]
%idxprom45 = zext i32 %i.050 to i64
%arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom45
%0 = load i32, i32* %arrayidx, align 4
%sub = add nsw i32 %i.050, -1
%idxprom1 = sext i32 %sub to i64
%arrayidx2 = getelementptr inbounds i32, i32* %B, i64 %idxprom1
%1 = load i32, i32* %arrayidx2, align 4
we'll first replace `%idxprom45` with the zero extended wide IV, and
then when we get to `%sub`, we'll replace it with `add
%wide.zexted.iv, -1` but the corresponding `NarrowIVDefUse` we push to
the worklist will have to remember that this new wide add instruction
is really a `sext` of `%sub` (and accordingly handle its users).
I'll be on vacation from 30th June to 10th of July, but I should be
able to get to this once I'm back (unfortunately, I probably won't
have time before I leave). If you want to fix this and have someone
else or me (once I'm back) review it that's fine too.
Thanks,
-- Sanjoy
More information about the llvm-commits
mailing list