[llvm] r234898 - The code that originally made me discover this is:

Daniel Jasper djasper at google.com
Tue Apr 14 16:44:03 PDT 2015


Nevermind. I figured it out.

On Wed, Apr 15, 2015 at 1:38 AM, Daniel Jasper <djasper at google.com> wrote:

> What made you think it was this change that broke it? The test passed fine
> locally and still does if I re-apply the patch.
>
> On Tue, Apr 14, 2015 at 6:00 PM, Rafael EspĂ­ndola <
> rafael.espindola at gmail.com> wrote:
>
>> reverted because CodeGen/ARM/2013-10-11-select-stalls.ll was failing.
>>
>> On 14 April 2015 at 16:20, Daniel Jasper <djasper at google.com> wrote:
>> > Author: djasper
>> > Date: Tue Apr 14 10:20:37 2015
>> > New Revision: 234898
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=234898&view=rev
>> > Log:
>> > The code that originally made me discover this is:
>> >
>> >   if ((a & 0x1) == 0x1) {
>> >     ..
>> >   }
>> >
>> > In this case we don't actually have any branch probability information
>> and
>> > should not assume to have any. LLVM transforms this into:
>> >
>> >   %and = and i32 %a, 1
>> >   %tobool = icmp eq i32 %and, 0
>> >
>> > So, in this case, the result of a bitwise and is compared against 0,
>> > but nevertheless, we should not assume to have probability
>> > information.
>> >
>> > Modified:
>> >     llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
>> >     llvm/trunk/test/Analysis/BranchProbabilityInfo/basic.ll
>> >     llvm/trunk/test/CodeGen/AArch64/arm64-call-tailcalls.ll
>> >     llvm/trunk/test/CodeGen/Mips/octeon.ll
>> >
>> > Modified: llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp?rev=234898&r1=234897&r2=234898&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp (original)
>> > +++ llvm/trunk/lib/Analysis/BranchProbabilityInfo.cpp Tue Apr 14
>> 10:20:37 2015
>> > @@ -379,6 +379,14 @@ bool BranchProbabilityInfo::calcZeroHeur
>> >    if (!CV)
>> >      return false;
>> >
>> > +  // If the LHS is the result of AND'ing a value with a single bit
>> bitmask,
>> > +  // we don't have information about probabilities.
>> > +  if (Instruction *LHS = dyn_cast<Instruction>(CI->getOperand(0)))
>> > +    if (LHS->getOpcode() == Instruction::And)
>> > +      if (ConstantInt *AndRHS =
>> dyn_cast<ConstantInt>(LHS->getOperand(1)))
>> > +        if (AndRHS->getUniqueInteger().isPowerOf2())
>> > +          return false;
>> > +
>> >    bool isProb;
>> >    if (CV->isZero()) {
>> >      switch (CI->getPredicate()) {
>> >
>> > Modified: llvm/trunk/test/Analysis/BranchProbabilityInfo/basic.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BranchProbabilityInfo/basic.ll?rev=234898&r1=234897&r2=234898&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/Analysis/BranchProbabilityInfo/basic.ll (original)
>> > +++ llvm/trunk/test/Analysis/BranchProbabilityInfo/basic.ll Tue Apr 14
>> 10:20:37 2015
>> > @@ -212,3 +212,31 @@ exit:
>> >    ret i32 %result
>> >  }
>> >
>> > +define i32 @zero3(i32 %i, i32 %a, i32 %b) {
>> > +; CHECK: Printing analysis {{.*}} for function 'zero3'
>> > +entry:
>> > +; AND'ing with a single bit bitmask essentially leads to a bool
>> comparison,
>> > +; meaning we don't have probability information.
>> > +  %and = and i32 %i, 2
>> > +  %tobool = icmp eq i32 %and, 0
>> > +  br i1 %tobool, label %then, label %else
>> > +; CHECK: edge entry -> then probability is 16 / 32
>> > +; CHECK: edge entry -> else probability is 16 / 32
>> > +
>> > +then:
>> > +; AND'ing with other bitmask might be something else, so we still
>> assume the
>> > +; usual probabilities.
>> > +  %and2 = and i32 %i, 5
>> > +  %tobool2 = icmp eq i32 %and2, 0
>> > +  br i1 %tobool2, label %else, label %exit
>> > +; CHECK: edge then -> else probability is 12 / 32
>> > +; CHECK: edge then -> exit probability is 20 / 32
>> > +
>> > +else:
>> > +  br label %exit
>> > +
>> > +exit:
>> > +  %result = phi i32 [ %a, %then ], [ %b, %else ]
>> > +  ret i32 %result
>> > +}
>> > +
>> >
>> > Modified: llvm/trunk/test/CodeGen/AArch64/arm64-call-tailcalls.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-call-tailcalls.ll?rev=234898&r1=234897&r2=234898&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/AArch64/arm64-call-tailcalls.ll (original)
>> > +++ llvm/trunk/test/CodeGen/AArch64/arm64-call-tailcalls.ll Tue Apr 14
>> 10:20:37 2015
>> > @@ -53,9 +53,9 @@ bb:
>> >
>> >  define i32 @t8(i32 %x) nounwind ssp {
>> >  ; CHECK-LABEL: t8:
>> > +; CHECK: b     _c
>> >  ; CHECK: b     _a
>> >  ; CHECK: b     _b
>> > -; CHECK: b     _c
>> >    %and = and i32 %x, 1
>> >    %tobool = icmp eq i32 %and, 0
>> >    br i1 %tobool, label %if.end, label %if.then
>> >
>> > Modified: llvm/trunk/test/CodeGen/Mips/octeon.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/octeon.ll?rev=234898&r1=234897&r2=234898&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/Mips/octeon.ll (original)
>> > +++ llvm/trunk/test/CodeGen/Mips/octeon.ll Tue Apr 14 10:20:37 2015
>> > @@ -93,7 +93,7 @@ entry:
>> >  ; ALL-LABEL: bbit0:
>> >  ; OCTEON: bbit0   $4, 3, $[[BB0:BB[0-9_]+]]
>> >  ; MIPS64: andi  $[[T0:[0-9]+]], $4, 8
>> > -; MIPS64: beqz  $[[T0]], $[[BB0:BB[0-9_]+]]
>> > +; MIPS64: bnez  $[[T0]], $[[BB0:BB[0-9_]+]]
>> >    %bit = and i64 %a, 8
>> >    %res = icmp eq i64 %bit, 0
>> >    br i1 %res, label %endif, label %if
>> > @@ -111,7 +111,7 @@ entry:
>> >  ; MIPS64: daddiu  $[[T0:[0-9]+]], $zero, 1
>> >  ; MIPS64: dsll    $[[T1:[0-9]+]], $[[T0]], 35
>> >  ; MIPS64: and     $[[T2:[0-9]+]], $4, $[[T1]]
>> > -; MIPS64: beqz    $[[T2]], $[[BB0:BB[0-9_]+]]
>> > +; MIPS64: bnez    $[[T2]], $[[BB0:BB[0-9_]+]]
>> >    %bit = and i64 %a, 34359738368
>> >    %res = icmp eq i64 %bit, 0
>> >    br i1 %res, label %endif, label %if
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at cs.uiuc.edu
>> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150415/fff9d151/attachment.html>


More information about the llvm-commits mailing list