[llvm-dev] Path condition propagation

Daniel Berlin via llvm-dev llvm-dev at lists.llvm.org
Thu Jun 30 18:45:13 PDT 2016


On Thu, Jun 30, 2016 at 6:09 PM, Carlos Liam via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi all,
>
> Consider this C code:
>
> #include <stdbool.h>
>
> bool func(int n1, int n2, bool b) {
>     bool greater = n1 > n2;
>     if (greater && b) {
>         if (n1 == n2) {
>             return false; // unreachable
>         }
>     }
>     return true;
> }
>
> The line marked unreachable cannot be reached, however currently LLVM does
> not optimize it out

?????
Yes it does.
[dannyb at dannyb-macbookpro3 18:39:18] ~/sources/llvm
(git-svn)-[newgvn-predicates]- :( $ clang -c -emit-llvm ~/greater.c -O1
[dannyb at dannyb-macbookpro3 18:39:22] ~/sources/llvm
(git-svn)-[newgvn-predicates]- :) $ debug-build/bin/llvm-dis greater.bc
[dannyb at dannyb-macbookpro3 18:39:24] ~/sources/llvm
(git-svn)-[newgvn-predicates]- :) $ cat greater.ll
; Function Attrs: norecurse nounwind readnone ssp uwtable
define zeroext i1 @func(i32, i32, i1 zeroext) #0 {
  ret i1 true
}


opt -simplifycfg -instcombine does the same thing to it if you use -O0 with
clang

>

I believe this is because LLVM does not recognize that meeting path
> conditions like, for example, X && Y logically means that X is true and Y
> is true.
>


Yes it does. See both GVN's propagateequality and
correlatedvaluepropagation, among other things :)

In this case, simplifycfg +instcombine will do it

The new predicate support i'm building for GVN will also do it.


>
> I'm interested in creating a patch to remedy this; is there a file or
> function I should look at?
>
> Thanks in advance.
>
>  - CL
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160630/9ded0663/attachment.html>


More information about the llvm-dev mailing list