[all-commits] [llvm/llvm-project] ea014c: [Inline] Fix noalias addition on simplified instru...
Nikita Popov via All-commits
all-commits at lists.llvm.org
Tue Jul 20 10:53:01 PDT 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: ea014c5bbfa7bff4ebf4631204ca2d6d129a94d7
https://github.com/llvm/llvm-project/commit/ea014c5bbfa7bff4ebf4631204ca2d6d129a94d7
Author: Nikita Popov <nikita.ppv at gmail.com>
Date: 2021-07-20 (Tue, 20 Jul 2021)
Changed paths:
M llvm/include/llvm/Transforms/Utils/Cloning.h
M llvm/lib/Transforms/Utils/CloneFunction.cpp
M llvm/lib/Transforms/Utils/InlineFunction.cpp
M llvm/test/Transforms/Inline/pr50589.ll
Log Message:
-----------
[Inline] Fix noalias addition on simplified instructions (PR50589)
When adding noalias/alias.scope metadata, we analyze the instructions
of the original callee, and then place metadata on the corresponding
inlined instructions in the caller as provided by VMap. However, this
assumes that this actually a clone of the instruction, rather than
the result of simplification. If simplification occurred, the
instruction that VMap points to may not have any relationship as far
as ModRef behavior is concerned.
Fix this by tracking simplified instructions during cloning and then
only processing instructions that have not been simplified. This is
done with an additional map form original to cloned instruction,
into which we only insert if no simplification is performed. The
mapping in VMap can then be compared to this map. If they're the
same, the instruction hasn't been simplified. (I originally wanted
to only track a set of simplified instructions, but that wouldn't
work if the instruction only gets simplified afterwards, e.g. based
on rewritten phis.)
Fixes https://bugs.llvm.org/show_bug.cgi?id=50589.
Differential Revision: https://reviews.llvm.org/D106242
More information about the All-commits
mailing list