[LLVMdev] LazyValueInfo.getPredicateAt

Hal Finkel hfinkel at anl.gov
Thu Apr 16 19:35:31 PDT 2015


----- Original Message -----
> From: "Philip Reames" <listmail at philipreames.com>
> To: "Hal Finkel" <hfinkel at anl.gov>, "Artur Pilipenko" <apilipenko at azulsystems.com>
> Cc: llvmdev at cs.uiuc.edu
> Sent: Thursday, April 16, 2015 8:46:23 PM
> Subject: Re: [LLVMdev] LazyValueInfo.getPredicateAt
> 
> On 04/16/2015 10:27 AM, Hal Finkel wrote:
> > ----- Original Message -----
> >> From: "Artur Pilipenko" <apilipenko at azulsystems.com>
> >> To: llvmdev at cs.uiuc.edu
> >> Sent: Thursday, April 16, 2015 7:22:03 AM
> >> Subject: [LLVMdev] LazyValueInfo.getPredicateAt
> >>
> >> Hi,
> >>
> >> Is it intentional that LazyValueInfo.getPredicateAt doesn't solve
> >> for
> >> the value and only takes assumptions into account?
> > Yes. That function is used from only one place in JumpThreading:
> >
> >      } else if (CondBr && CondConst && CondBr->isConditional()) {
> >        // There might be an invariant in the same block with the
> >        conditional
> >        // that can determine the predicate.
> >
> >        LazyValueInfo::Tristate Ret =
> >          LVI->getPredicateAt(CondCmp->getPredicate(),
> >          CondCmp->getOperand(0),
> >                              CondConst, CondCmp);
> >        if (Ret != LazyValueInfo::Unknown) {
> > ...
> >
> > and handles a situation that can only happen with @llvm.assume
> > (where new information regarding a value's range is introduced in
> > the block containing the conditional; normally this can only
> > happen on edges and is picked up by getValueOnEdge, etc.)
> Hal, independent of Artur's question, I was a bit confused by the
> code
> you mention in your response.  Reading through the code in
> JumpThreading, it seems like this case could catch any case where LVI
> was able to extract information about the range of a value used in a
> conditional branch.  Looking at the surrounding code, we even seem to
> be
> checking for exactly that just above.  Is there a reason why the edge
> sensative reasoning in the previous if block shouldn't just be sunk
> into
> LVI::getPredicateAt?

Yea, we probably could. getPredicateAt could, if the value being queried and the context instruction have different parents, look for edge ranges from the lattice.

 -Hal

> 
> Philip
> 
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-dev mailing list