[LLVMdev] Jump Theading/GVN bug - moving discussion to llvm-dev

Daniel Berlin dberlin at dberlin.org
Wed Feb 25 10:22:47 PST 2015


On Wed, Feb 25, 2015 at 9:35 AM, Rafael EspĂ­ndola <
rafael.espindola at gmail.com> wrote:

> On 25 February 2015 at 10:58, Daniel Berlin <dberlin at dberlin.org> wrote:
> >
> >
> > On Wed, Feb 25, 2015 at 6:26 AM, Rafael EspĂ­ndola
> > <rafael.espindola at gmail.com> wrote:
> >>
> >> > Maybe.
> >> > My view is the ideal is either no-unreachable code, or unreachable
> >> > blocks
> >> > only contain terminators.
> >>
> >> I am definitely happy with both. What worries me is introducing a
> >> special dominance rule for unreachable blocks.
> >>
> >> >> I don't think that rejecting
> >> >>
> >> >>   %a = getelementptr inbounds i8* %a, i64 1
> >> >>
> >> >> but accepting
> >> >>
> >> >>   %a = getelementptr inbounds i8* %b, i64 1
> >> >>   %b = getelementptr inbounds i8* %a, i64 1
> >> >>
> >> >
> >> > Does the verifier accept the latter right now?
> >>
> >> Yes. %a dominates %b and %b dominates %a, so it is valid.
> >>
> >
> > So i'm confused.
> >
> > How does %b dominate %a?
>
> all the zero paths from entry to %a pass by %b.
>

That is a graph-wise definition, sure.
So, this is an interesting definition, and maybe this is part of the source
of the problem.

For SSA, at least GCC requires that both "definition block dominates use
block" (which would be true here), *and*
that "definition appears before use in block" (IE definition locally
dominates use).

IE it has to pass both DT->dominates(block(%b), block(%a)) and
DT->dominates(%b, %a).

LLVM special cases "not reachable from entry", and says that no matter
what, #2 is true if %a is unreachable.

The code is, IMHO, not even self-consistent


   // Any unreachable use is dominated, even if Def == User.
   if (!isReachableFromEntry(UseBB))
     return true;

   // Unreachable definitions don't dominate anything.
   if (!isReachableFromEntry(DefBB))
     return false;



Riddle me this: If unreachable definitions dominate nothing, how are
unreachable uses always dominated by their unreachable defs?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150225/483df572/attachment.html>


More information about the llvm-dev mailing list