[SimplifyCFG] Optimize CFG when null is passed to a function with nonnull argument
authorDávid Bolvanský <david.bolvansky@gmail.com>
Fri, 15 Jan 2021 22:07:29 +0000 (23:07 +0100)
committerDávid Bolvanský <david.bolvansky@gmail.com>
Fri, 15 Jan 2021 22:53:43 +0000 (23:53 +0100)
commita1500105ee6074f992f376c916dcfa3a54acb717
tree534f84a79b0a42c9b5fbf2784db8eb426b2f1d90
parent76f5c5a7b059929f0e0352ad4ff5ec1b78511868
[SimplifyCFG] Optimize CFG when null is passed to a function with nonnull argument

Example:

```
__attribute__((nonnull,noinline)) char * pinc(char *p)  {
  return ++p;
}

char * foo(bool b, char *a) {
       return pinc(b ? 0 : a);

}
```

optimize to

```
char * foo(bool b, char *a) {
       return pinc(a);

}
```

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D94180
llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll