summaryrefslogtreecommitdiffstats
path: root/lld/ELF/LinkerScript.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2015-10-07 00:20:07 +0000
committerHans Wennborg <hans@hanshq.net>2015-10-07 00:20:07 +0000
commitf1f36517b7c6c17a132532db331461797892012c (patch)
treef93b9cf903d466e1bf0645d8b3895272fab735e0 /lld/ELF/LinkerScript.cpp
parent534ff2caca13dec67a8507dbfb4a75c83f752a5e (diff)
downloadbcm5719-llvm-f1f36517b7c6c17a132532db331461797892012c.tar.gz
bcm5719-llvm-f1f36517b7c6c17a132532db331461797892012c.zip
InstCombine: Fold comparisons between unguessable allocas and other pointers
This will allow us to optimize code such as: int f(int *p) { int x; return p == &x; } as well as: int *allocate(void); int f() { int x; int *p = allocate(); return p == &x; } The folding can only be done under certain circumstances. Even though p and &x cannot alias, the comparison must still return true if the pointer representations are equal. If a user successfully generates a p that's a correct guess for &x, comparison should return true even though p is an invalid pointer. This patch argues that if the address of the alloca isn't observable outside the function, the function can act as-if the address is impossible to guess from the outside. The tricky part is keeping the act consistent: if we fold p == &x to false in one place, we must make sure to fold any other comparisons based on those pointers similarly. To ensure that, we only fold when &x is involved exactly once in comparison instructions. Differential Revision: http://reviews.llvm.org/D13358 llvm-svn: 249490
Diffstat (limited to 'lld/ELF/LinkerScript.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud