mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-09 05:31:37 +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 |
||
---|---|---|
.. | ||
Inputs | ||
X86 | ||
2002-01-31-CallGraph.ll | ||
2002-02-24-InlineBrokePHINodes.ll | ||
2002-03-11-ConstPropCrash.ll | ||
2003-02-19-LoopInfoNestingBug.ll | ||
2004-08-16-PackedConstantInlineStore.ll | ||
2004-08-16-PackedGlobalConstant.ll | ||
2004-08-16-PackedSelect.ll | ||
2004-08-16-PackedSimple.ll | ||
2004-08-20-PackedControlFlow.ll | ||
2006-02-05-PassManager.ll | ||
2007-04-24-eliminate-mostly-empty-blocks.ll | ||
2007-06-05-PassID.ll | ||
2007-06-28-PassManager.ll | ||
2007-09-10-PassManager.ll | ||
2008-02-14-PassManager.ll | ||
2008-06-04-FieldSizeInPacked.ll | ||
2008-10-06-RemoveDeadPass.ll | ||
2008-10-15-MissingSpace.ll | ||
2009-03-31-CallGraph.ll | ||
2009-06-05-no-implicit-float.ll | ||
2009-09-14-function-elements.ll | ||
2010-05-06-Printer.ll | ||
attribute-comment.ll | ||
bcanalyzer-block-info.txt | ||
can-execute.txt | ||
cgscc-devirt-iteration.ll | ||
cgscc-iterate-function-mutation.ll | ||
cgscc-observe-devirt.ll | ||
cleanup-lcssa.ll | ||
close-stderr.ll | ||
constant-fold-gep-address-spaces.ll | ||
constant-fold-gep.ll | ||
debugcounter-newgvn.ll | ||
debugcounter-predicateinfo.ll | ||
extract-alias.ll | ||
extract-linkonce.ll | ||
extract-weak-odr.ll | ||
extract.ll | ||
FileCheck-space.txt | ||
invalid-commandline-option.ll | ||
invariant.group.barrier.ll | ||
lint.ll | ||
lit-globbing.ll | ||
lit-quoting.txt | ||
lit-unicode.txt | ||
llvm-nm-without-aliases.ll | ||
loop-pass-ordering.ll | ||
loop-pm-invalidation.ll | ||
new-pass-manager.ll | ||
new-pm-defaults.ll | ||
new-pm-lto-defaults.ll | ||
opt-bisect-helper.py | ||
opt-bisect-legacy-pass-manager.ll | ||
opt-override-mcpu-mattr.ll | ||
opt-twice.ll | ||
optimization-remarks-inline.ll | ||
optimization-remarks-invalidation.ll | ||
optimization-remarks-lazy-bfi.ll | ||
optimize-options.ll | ||
pass-pipeline-parsing.ll | ||
pass-pipelines.ll | ||
pipefail.txt | ||
ResponseFile.ll | ||
spir_cc.ll | ||
statistic.ll | ||
umask.ll | ||
writing-to-stdout.ll |