[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