]> granicus.if.org Git - llvm/commit
[NFC][InstSimplify] Some tests for dropping null check after uadd.with.overflow of...
authorRoman Lebedev <lebedev.ri@gmail.com>
Sun, 8 Sep 2019 17:50:40 +0000 (17:50 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Sun, 8 Sep 2019 17:50:40 +0000 (17:50 +0000)
commitaeb864ee776312ca3496021587b57d8483047305
treeb2e46a9d5475980259de96754dde5a788cd52978
parentfbe2300a9bdcc95a12cc1e29c0e0b752f3e15538
[NFC][InstSimplify] Some tests for dropping null check after uadd.with.overflow of non-null (PR43246)

https://rise4fun.com/Alive/WRzq

Name: C <= Y && Y != 0  -->  C <= Y  iff C != 0
Pre: C != 0
  %y_is_nonnull = icmp ne i64 %y, 0
  %no_overflow = icmp ule i64 C, %y
  %r = and i1 %y_is_nonnull, %no_overflow
=>
  %r = %no_overflow

Name: C <= Y || Y != 0  -->  Y != 0  iff C != 0
Pre: C != 0
  %y_is_nonnull = icmp ne i64 %y, 0
  %no_overflow = icmp ule i64 C, %y
  %r = or i1 %y_is_nonnull, %no_overflow
=>
  %r = %y_is_nonnull

Name: C > Y || Y == 0  -->  C > Y  iff C != 0
Pre: C != 0
  %y_is_null = icmp eq i64 %y, 0
  %overflow = icmp ugt i64 C, %y
  %r = or i1 %y_is_null, %overflow
=>
  %r = %overflow

Name: C > Y && Y == 0  -->  Y == 0  iff C != 0
Pre: C != 0
  %y_is_null = icmp eq i64 %y, 0
  %overflow = icmp ugt i64 C, %y
  %r = and i1 %y_is_null, %overflow
=>
  %r = %y_is_null

https://bugs.llvm.org/show_bug.cgi?id=43246

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371339 91177308-0d34-0410-b5e6-96231b3b80d8
test/Transforms/InstSimplify/redundant-null-check-in-uadd_with_overflow-of-nonnull-ptr.ll [new file with mode: 0644]