diff options
author | Arnold Schwaighofer <aschwaighofer@apple.com> | 2014-01-02 03:31:36 +0000 |
---|---|---|
committer | Arnold Schwaighofer <aschwaighofer@apple.com> | 2014-01-02 03:31:36 +0000 |
commit | 1bdb320daea95b65bf5a5293132a8911ca1a7524 (patch) | |
tree | cddcf3638496f46dbc431c7b4afda26e49958ac8 /utils/TableGen/X86RecognizableInstr.h | |
parent | f8735544dc5c75a0b0de7ff13e130ad93d9a1ac1 (diff) | |
download | llvm-1bdb320daea95b65bf5a5293132a8911ca1a7524.tar.gz llvm-1bdb320daea95b65bf5a5293132a8911ca1a7524.tar.bz2 llvm-1bdb320daea95b65bf5a5293132a8911ca1a7524.tar.xz |
BasicAA: Fix value equality and phi cycles
When there are cycles in the value graph we have to be careful interpreting
"Value*" identity as "value" equivalence. We interpret the value of a phi node
as the value of its operands.
When we check for value equivalence now we make sure that the "Value*" dominates
all cycles (phis).
%0 = phi [%noaliasval, %addr2]
%l = load %ptr
%addr1 = gep @a, 0, %l
%addr2 = gep @a, 0, (%l + 1)
store %ptr ...
Before this patch we would return NoAlias for (%0, %addr1) which is wrong
because the value of the load is from different iterations of the loop.
Tested on x86_64 -mavx at O3 and O3 -flto with no performance or compile time
regressions.
PR18068
radar://15653794
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198290 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/X86RecognizableInstr.h')
0 files changed, 0 insertions, 0 deletions