mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 23:18:58 +00:00
6f93f61542
Summary: Readnone attribute would cause CSE of two barriers with the same argument, which is invalid by example: struct Base { virtual int foo() { return 42; } }; struct Derived1 : Base { int foo() override { return 50; } }; struct Derived2 : Base { int foo() override { return 100; } }; void foo() { Base *x = new Base{}; new (x) Derived1{}; int a = std::launder(x)->foo(); new (x) Derived2{}; int b = std::launder(x)->foo(); } Here 2 calls of std::launder will produce @llvm.invariant.group.barrier, which would be merged into one call, causing devirtualization to devirtualize second call into Derived1::foo() instead of Derived2::foo() Reviewers: chandlerc, dberlin, hfinkel Subscribers: llvm-commits, rsmith, amharc Differential Revision: https://reviews.llvm.org/D31531 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300101 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
assume.ll | ||
atomic-clobber.ll | ||
basicaa-memcpy.ll | ||
constant-memory.ll | ||
cyclicphi.ll | ||
forward-unreachable.ll | ||
function-clobber.ll | ||
function-mem-attrs.ll | ||
invariant-groups.ll | ||
lifetime-simple.ll | ||
load-invariant.ll | ||
many-dom-backedge.ll | ||
many-doms.ll | ||
multi-edges.ll | ||
multiple-backedges-hal.ll | ||
multiple-locations.ll | ||
no-disconnected.ll | ||
optimize-use.ll | ||
phi-translation.ll | ||
pr28880.ll | ||
ptr-const-mem.ll | ||
volatile-clobber.ll |