[ConstraintElimination] Use simplified constraint for == 0.
authorFlorian Hahn <flo@fhahn.com>
Thu, 27 Jan 2022 13:31:23 +0000 (13:31 +0000)
committerFlorian Hahn <flo@fhahn.com>
Thu, 27 Jan 2022 13:31:23 +0000 (13:31 +0000)
commit258a0a3a551745e7250d7831e6b477e49708a08c
tree474dc81fabdda40436ea5fa22d91eeaa9cce7519
parent389ae775e44ea0c8cd42a3ae518e79b837af4990
[ConstraintElimination] Use simplified constraint for == 0.

When checking x == 0, checking x u<= 0 is sufficient and simpler than
x u>= 0 && x u<= 0.

https://alive2.llvm.org/ce/z/btM7d3

    ----------------------------------------
    define i1 @src(i4 %a) {
    %0:
      %c = icmp eq i4 %a, 0
      ret i1 %c
    }
    =>
    define i1 @tgt(i4 %a) {
    %0:
       %c = icmp ule i4 %a, 0
       ret i1 %c
    }
    Transformation seems to be correct!
llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
llvm/test/Transforms/ConstraintElimination/ne.ll