llvm/test/Analysis/MemorySSA
Piotr Padlewski 6f93f61542 Remove readnone from invariant.group.barrier
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
2017-04-12 20:45:12 +00:00
..
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