1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00
llvm-mirror/test/Transforms/NewGVN
Dan Gohman 39c48b9d3e Add an @llvm.sideeffect intrinsic
This patch implements Chandler's idea [0] for supporting languages that
require support for infinite loops with side effects, such as Rust, providing
part of a solution to bug 965 [1].

Specifically, it adds an `llvm.sideeffect()` intrinsic, which has no actual
effect, but which appears to optimization passes to have obscure side effects,
such that they don't optimize away loops containing it. It also teaches
several optimization passes to ignore this intrinsic, so that it doesn't
significantly impact optimization in most cases.

As discussed on llvm-dev [2], this patch is the first of two major parts.
The second part, to change LLVM's semantics to have defined behavior
on infinite loops by default, with a function attribute for opting into
potential-undefined-behavior, will be implemented and posted for review in
a separate patch.

[0] http://lists.llvm.org/pipermail/llvm-dev/2015-July/088103.html
[1] https://bugs.llvm.org/show_bug.cgi?id=965
[2] http://lists.llvm.org/pipermail/llvm-dev/2017-October/118632.html

Differential Revision: https://reviews.llvm.org/D38336

llvm-svn: 317729
2017-11-08 21:59:51 +00:00
..
2007-07-25-DominatedLoop.ll
2007-07-25-InfiniteLoop.ll
2007-07-25-Loop.ll
2007-07-25-NestedLoop.ll
2007-07-25-SinglePredecessor.ll
2007-07-26-InterlockingLoops.ll
2007-07-26-NonRedundant.ll
2007-07-26-PhiErasure.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
2007-07-30-PredIDom.ll
2007-07-31-NoDomInherit.ll
2007-07-31-RedundantPhi.ll
2008-02-12-UndefLoad.ll
2008-02-13-NewPHI.ll
2008-07-02-Unreachable.ll
2008-12-09-SelfRemove.ll Revert "NewGVN: Make unreachable blocks be marked with unreachable" 2017-01-30 17:06:55 +00:00
2008-12-12-RLE-Crash.ll
2008-12-14-rle-reanalyze.ll
2008-12-15-CacheVisited.ll
2009-01-21-SortInvalidation.ll
2009-01-22-SortInvalidation.ll
2009-03-10-PREOnVoid.ll
2009-07-13-MemDepSortFail.ll
2009-11-12-MemDepMallocBitCast.ll
2010-03-31-RedundantPHIs.ll
2010-05-08-OneBit.ll
2010-11-13-Simplify.ll
2011-04-27-phioperands.ll
2011-07-07-MatchIntrinsicExtract.ll NewGVN: We were not really failing this testcase, because the instructions it was looking for are unused. GVN value numbers unused instructions, NewGVN does not. Fix the instructions to be used, so we eliminate the redundancies it's checking for, and un-XFAIL it 2017-03-06 20:01:31 +00:00
2011-09-07-TypeIdFor.ll
2012-05-22-PreCrash.ll
2016-08-30-MaskedScatterGather.ll Support arbitrary address space pointers in masked gather/scatter intrinsics. 2017-05-03 12:28:54 +00:00
assume-equal.ll [Devirtualization] MemDep returns non-local !invariant.group dependencies 2017-01-12 11:33:58 +00:00
basic-cyclic-opt.ll NewGVN: Clean up how we handle the INITIAL class so that everything in 2017-02-11 12:48:50 +00:00
basic-undef-test.ll
basic.ll NewGVN: We weren't properly simplifying selects with equal arguments due to a thinko. 2017-08-24 02:43:17 +00:00
big-endian.ll
bitcast-of-call.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
br-identical.ll
calloc-load-removal.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
calls-nonlocal.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
calls-readonly.ll
commute.ll
completeness.ll NewGVN: Fix PR 34473, by not using ExactlyEqualsExpression for finding 2017-09-30 23:51:55 +00:00
cond_br2.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
cond_br.ll
condprop-xfail.ll Add missing condprop-xfail.ll that contains the remaining xfail'd tests 2017-03-14 01:46:51 +00:00
condprop.ll PredicateInfo: Support switch statements 2017-02-22 22:20:58 +00:00
crash-no-aa.ll
crash.ll
cyclic-phi-handling.ll NewGVN: Fix PR 31501. 2017-01-07 00:01:42 +00:00
dbg-redundant-load.ll
deadstore.ll NewGVN: Add basic dead and redundant store elimination 2017-01-27 02:37:11 +00:00
debugloc.ll Do not propagate DebugLoc across basic blocks 2017-01-31 20:57:13 +00:00
edge.ll PredicateInfo: Support switch statements 2017-02-22 22:20:58 +00:00
equivalent-phi.ll NewGVN: Add a test case for equivalent phis. 2017-01-02 19:55:13 +00:00
fence.ll [AliasAnalysis] Fences do not modify constant memory location 2017-01-20 00:21:33 +00:00
flags.ll NewGVN: Apply the fast math flags fix in r267113 to NewGVN as well. 2017-02-12 22:25:20 +00:00
fold-const-expr.ll [NewGVN] Now that load coercion is enable, we pass this test. 2017-08-02 19:47:37 +00:00
fpmath.ll
funclet.ll
int_sideeffect.ll Add an @llvm.sideeffect intrinsic 2017-11-08 21:59:51 +00:00
invariant.group.ll [Devirtualization] MemDep returns non-local !invariant.group dependencies 2017-01-12 11:33:58 +00:00
invariant.start.ll
lifetime-simple.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
load-constant-mem.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
load-from-unreachable-predecessor.ll
loadforward.ll [InstSimplify] Constant fold the new GEP in SimplifyGEPInst. 2017-06-06 10:17:14 +00:00
malloc-load-removal.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
MemdepMiscompile.ll
memory-handling.ll NewGVN: Make sure we properly lookup operand leaders while creating 2017-01-07 16:55:14 +00:00
no_speculative_loads_with_asan.ll
noalias.ll
non-integral-pointers.ll [GVN] Don't coerce non-integral pointers to integers or vice versa 2017-04-19 18:21:09 +00:00
non-local-offset.ll
nonescaping-malloc.ll
null-aliases-nothing.ll
opt-remarks.ll Keep Optimization Remark Yaml in NewPM 2017-08-20 01:30:45 +00:00
phi-edge-handling.ll NewGVN: Fix PHI evaluation bug exposed by new verifier. We were checking whether the incoming block was reachable instead of whether the specific edge was reachable 2017-03-18 15:41:36 +00:00
phi-translate-partial-alias.ll
pr10820.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
pr12979.ll
pr14166.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
pr17732.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
pr17852.ll
pr24397.ll
pr24426.ll
pr25440.ll
pr28562.ll
pr31472.ll Don't use our own incorrect version of isTriviallyDeadInstruction in NewGVN. Fixes PR/31472 2016-12-26 18:44:36 +00:00
pr31483.ll NewGVN: Add forgotten testcase for PR 31483 2017-01-02 19:49:20 +00:00
pr31491.ll NewGVN: Fix PR 31491 by ensuring that we touch the right instructions. Change to one based numbering so we can assert we don't cause the same bug again. 2016-12-29 22:15:12 +00:00
pr31501.ll NewGVN: Fix PR 31501. 2017-01-07 00:01:42 +00:00
pr31573.ll NewGVN: Fix PR 31573, a failure to verify memory congruency due to 2017-01-09 05:34:29 +00:00
pr31594.ll NewGVN: Instead of changeToUnreachable, insert an instruction SimplifyCFG will turn into unreachable when it runs 2017-01-30 18:12:56 +00:00
pr31613.ll NewGVN: This patch makes memory congruence work for all types of 2017-04-06 18:52:50 +00:00
pr31682.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
pr31758.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
pr32403.ll NewGVN: Fix PR/33187. This is a bug caused by two things: 2017-06-06 17:15:28 +00:00
pr32607.ll NewGVN: Don't propagate over phi backedges where undef causes us to 2017-04-14 02:53:37 +00:00
pr32836.ll [NewGVN] Update additionalUsers when we simplify to a value. 2017-05-24 02:30:24 +00:00
pr32838.ll NewGVN: Fix PR32838. 2017-05-19 20:22:20 +00:00
pr32845.ll [NewGVN] Actually check the NewGVN output. 2017-05-21 20:55:53 +00:00
pr32852.ll [NewGVN] Don't derive incorrect implications. 2017-05-01 22:26:28 +00:00
pr32897.ll NewGVN: Fix PR/33187. This is a bug caused by two things: 2017-06-06 17:15:28 +00:00
pr32934.ll [NewGVN] Re-enable test now that the nondeterminism has been fixed. 2017-05-16 22:27:06 +00:00
pr32945.ll [NewGVN] Replace predicate info leftovers. 2017-05-18 21:43:23 +00:00
pr32952.ll [NewGVN] Fix a consistent order for phi nodes operands. 2017-05-09 16:58:28 +00:00
pr33014.ll [NewGVN] Break infinite recursion in singleReachablePHIPath(). 2017-05-18 23:22:44 +00:00
pr33086.ll [NewGVN] Delete the old store when we find congruent to a load. 2017-05-19 04:06:10 +00:00
pr33116.ll NewGVN: Fix PR 33116, the memoryphi version of bug 32838. 2017-05-21 23:41:58 +00:00
pr33185.ll Fix PR/33305. caused by trying to simplify expressions in phi of ops that should have no leaders. 2017-09-02 02:18:44 +00:00
pr33187.ll NewGVN: Fix PR/33187. This is a bug caused by two things: 2017-06-06 17:15:28 +00:00
pr33196.ll [NewGVN] Fix the case where we have a phi-of-ops which goes away. 2017-08-03 21:17:49 +00:00
pr33204.ll NewGVN: Fix PR33204 - We need to add memory users when we bypass memorydefs for loads, not just when we do it for stores. 2017-08-26 07:37:11 +00:00
pr33305.ll Fix PR/33305. caused by trying to simplify expressions in phi of ops that should have no leaders. 2017-09-02 02:18:44 +00:00
pr33432.ll Fix PR/33305. caused by trying to simplify expressions in phi of ops that should have no leaders. 2017-09-02 02:18:44 +00:00
pr33461.ll NewGVN: Evaluate phi of ops expressions before creating phi node 2017-09-30 23:51:54 +00:00
pr33720.ll [NewGVN] Check for congruency of memory accesses. 2017-07-11 19:49:12 +00:00
pr34135.ll NewGVN: Make sure we don't incorrectly use PredicateInfo when doing PHI of ops 2017-09-01 19:20:18 +00:00
pr34430.ll NewGVN: Fix PR 34430 - we need to look through predicateinfo copies to detect self-cycles of phi nodes. We also need to not ignore certain types of arguments when testing whether the phi has a backedge or was originally constant. 2017-09-05 02:17:43 +00:00
pr34452.ll NewGVN: Fix PR 34452 by passing instruction all the way down when we do aggregate value simplification 2017-09-05 02:17:42 +00:00
pr35125.ll [NewGVN] Stop assuming PHI args ordering when looking at phi-of-ops. 2017-10-30 20:20:16 +00:00
pre-compare.ll
pre-new-inst.ll
predicates.ll NewGVN: Start making use of predicateinfo pass. 2017-02-18 23:06:50 +00:00
propagate-ir-flags.ll NewGVN: Fix PR 31686 and PR 31698 by rewriting store leader handling. 2017-01-20 21:04:30 +00:00
range.ll
readattrs.ll [BasicAA] Take attributes into account when requesting modref info for a call site 2017-03-01 13:19:51 +00:00
refine-stores.ll NewGVN: This patch makes memory congruence work for all types of 2017-04-06 18:52:50 +00:00
rle-must-alias.ll
rle-no-phi-translate.ll
rle-nonlocal.ll NewGVN: We pass rle-nonlocal, we just perform the replacement in a way that keeps the old name instead of the new one 2017-03-13 22:43:30 +00:00
rle.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
stale-loop-info.ll
storeoverstore.ll NewGVN: Evaluate phi of ops expressions before creating phi node 2017-09-30 23:51:54 +00:00
tbaa.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
unreachable_block_infinite_loop.ll
verify-memoryphi.ll [NewGVN] Fix verification of MemoryPhis in verifyMemoryCongruency(). 2017-05-15 18:50:53 +00:00
volatile-nonvolatile.ll AliasAnalysis: Be less conservative about volatile than atomic. 2017-04-07 01:28:36 +00:00