llvm-project/llvm/lib/CodeGen/SelectionDAG
Nirav Dave fa250cad37 Prevent construction of cycle in DAG store merge
When merging stores in DAGCombiner, add check to ensure that no
dependenices exist that would cause the construction of a cycle in our
DAG.  This may happen if one store has a data dependence on another
instruction (e.g. a load) which itself has a (chain) dependence on
another store being merged. These stores cannot be merged safely and
doing so results in a cycle that is discovered in LegalizeDAG.

This test is only done in cases where Antialias analysis is used (UseAA)
as non-AA store merge candidates will be merged logically after all
loads which have been checked to not alias.

Reviewers: ahatanak, spatel, niravd, arsenm, hfinkel, tstellarAMD, jyknight

Subscribers: llvm-commits, tberghammer, danalbert, srhines

Differential Revision: http://reviews.llvm.org/D18336

llvm-svn: 264461
2016-03-25 21:06:30 +00:00
..
CMakeLists.txt Rename TargetSelectionDAGInfo into SelectionDAGTargetInfo and move it to CodeGen/ 2016-01-27 16:32:26 +00:00
DAGCombiner.cpp Prevent construction of cycle in DAG store merge 2016-03-25 21:06:30 +00:00
FastISel.cpp Add "first class" lowering for deopt operand bundles 2016-03-22 00:59:13 +00:00
FunctionLoweringInfo.cpp [Statepoints] Fix yet another issue around gc pointer uniqueing 2016-03-24 18:57:39 +00:00
InstrEmitter.cpp [X86] Part 1 to fix x86-64 fp128 calling convention. 2015-12-03 22:02:40 +00:00
InstrEmitter.h [SDAG] Give InstrEmitter hidden visibility 2015-07-01 14:55:10 +00:00
LLVMBuild.txt
LegalizeDAG.cpp Prevent construction of cycle in DAG store merge 2016-03-25 21:06:30 +00:00
LegalizeFloatTypes.cpp Do not try to use i8 and i16 versions of FP_TO_U/SINT soft float library calls 2015-12-15 12:55:50 +00:00
LegalizeIntegerTypes.cpp Remove unsafe AssertZext after promoting result of FP_TO_FP16 2016-03-24 14:06:03 +00:00
LegalizeTypes.cpp Revert "[mips] Promote the result of SETCC nodes to GPR width." 2016-03-01 20:25:43 +00:00
LegalizeTypes.h [X86][SSE] Reapplied: Simplify vector LOAD + EXTEND on pre-SSE41 hardware 2016-03-22 16:22:08 +00:00
LegalizeTypesGeneric.cpp [X86] Part 1 to fix x86-64 fp128 calling convention. 2015-12-03 22:02:40 +00:00
LegalizeVectorOps.cpp [X86][SSE] Reapplied: Improve vector ZERO_EXTEND by combining to ZERO_EXTEND_VECTOR_INREG 2016-03-10 20:40:26 +00:00
LegalizeVectorTypes.cpp [X86][SSE] Reapplied: Simplify vector LOAD + EXTEND on pre-SSE41 hardware 2016-03-22 16:22:08 +00:00
ResourcePriorityQueue.cpp Fix some comment typos. 2015-08-08 18:27:36 +00:00
SDNodeDbgValue.h Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC) 2015-06-23 09:49:53 +00:00
ScheduleDAGFast.cpp Replace uint16_t with the MCPhysReg typedef in many places. A lot of physical register arrays already use this typedef. 2015-12-05 07:13:35 +00:00
ScheduleDAGRRList.cpp rangify; NFCI 2016-02-03 22:44:14 +00:00
ScheduleDAGSDNodes.cpp Avoid overly large SmallPtrSet/SmallSet 2016-01-30 01:24:31 +00:00
ScheduleDAGSDNodes.h [SelectionDAG] Remove dead code. NFC. 2015-10-15 17:54:06 +00:00
ScheduleDAGVLIW.cpp Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
SelectionDAG.cpp Prevent construction of cycle in DAG store merge 2016-03-25 21:06:30 +00:00
SelectionDAGBuilder.cpp Add lowering support for llvm.experimental.deoptimize 2016-03-24 20:23:29 +00:00
SelectionDAGBuilder.h Reduce code duplication by extracting out a helper function; NFC 2016-03-24 22:51:49 +00:00
SelectionDAGDumper.cpp Avoid overly large SmallPtrSet/SmallSet 2016-01-30 01:24:31 +00:00
SelectionDAGISel.cpp CXX TLS: collect return blocks after SelectAllBasicBlocks. 2016-03-24 23:21:29 +00:00
SelectionDAGPrinter.cpp Make the SelectionDAG graph printer use SDNode::PersistentId labels. 2015-10-27 23:09:03 +00:00
SelectionDAGTargetInfo.cpp Rename TargetSelectionDAGInfo into SelectionDAGTargetInfo and move it to CodeGen/ 2016-01-27 16:32:26 +00:00
StatepointLowering.cpp Reduce code duplication by extracting out a helper function; NFC 2016-03-24 22:51:49 +00:00
StatepointLowering.h [StatepointLowering] Don't do two DenseMap lookups; nfci 2016-03-23 02:24:15 +00:00
TargetLowering.cpp [DAG] use !isUndef() ; NFCI 2016-03-14 18:09:43 +00:00