llvm-6502/lib/CodeGen/SelectionDAG
Louis Gerbarg 5fb3c84898 Retain alignment requirements for load->selects modified by DAGCombine
DAGCombine may choose to rewrite graphs where two loads feed a select into
graphs where a select of two addresses feed a load. While it sanity checks the
loads to make sure they are broadly equivalent it currently just uses the
alignment restriction of the left node. In cases where the right node has
stronger alignment requiresment this may lead to bad codegen, such as generating
an aligned load where an unaligned load is required. This patch makes the
combine generate a load with an alignment that is the same as whichever is more
restrictive of the two alignments.

Tests included.

rdar://17762530

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214322 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-30 18:24:41 +00:00
..
CMakeLists.txt
DAGCombiner.cpp Retain alignment requirements for load->selects modified by DAGCombine 2014-07-30 18:24:41 +00:00
FastISel.cpp AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
FunctionLoweringInfo.cpp [Modules] Remove potential ODR violations by sinking the DEBUG_TYPE 2014-04-22 02:02:50 +00:00
InstrEmitter.cpp [SDAG] Don't insert the VRBase into a mapping from SDValues when the def 2014-07-25 09:19:18 +00:00
InstrEmitter.h Revert "Give internal classes hidden visibility." 2013-09-11 18:05:11 +00:00
LegalizeDAG.cpp [SDAG] Add DEBUG logging to the legalizer, fixing a "bug" found by 2014-07-28 17:55:07 +00:00
LegalizeFloatTypes.cpp ARM: fix @llvm.convert.from.fp16 on softfloat targets. 2014-07-29 09:56:38 +00:00
LegalizeIntegerTypes.cpp AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
LegalizeTypes.cpp Make it possible for ints/floats to return different values from getBooleanContents() 2014-07-10 10:18:12 +00:00
LegalizeTypes.h ARM: support legalisation of "fptrunc ... to half" operations. 2014-07-18 13:01:19 +00:00
LegalizeTypesGeneric.cpp AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
LegalizeVectorOps.cpp [x86] Make vector legalization of extloads work more like the "normal" 2014-07-24 22:09:56 +00:00
LegalizeVectorTypes.cpp Add support for scalarizing ctlz_zero_undef 2014-07-30 00:44:03 +00:00
LLVMBuild.txt
Makefile
ResourcePriorityQueue.cpp Fix indenting. 2014-07-23 22:34:13 +00:00
ScheduleDAGFast.cpp [Modules] Remove potential ODR violations by sinking the DEBUG_TYPE 2014-04-22 02:02:50 +00:00
ScheduleDAGRRList.cpp fixed typo 2014-07-14 18:21:07 +00:00
ScheduleDAGSDNodes.cpp Convert SelectionDAG::MorphNodeTo to use ArrayRef. 2014-04-27 19:21:16 +00:00
ScheduleDAGSDNodes.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-16 04:21:27 +00:00
ScheduleDAGVLIW.cpp The hazard recognizer only needs a subtarget, not a target machine 2014-06-13 22:38:52 +00:00
SDNodeDbgValue.h This reapplies r207235 with an additional bugfixes caught by the msan 2014-04-25 20:49:25 +00:00
SelectionDAG.cpp Add alignment value to allowsUnalignedMemoryAccess 2014-07-27 17:46:40 +00:00
SelectionDAGBuilder.cpp Add alignment value to allowsUnalignedMemoryAccess 2014-07-27 17:46:40 +00:00
SelectionDAGBuilder.h [stack protector] Fix a potential security bug in stack protector where the 2014-07-25 19:31:34 +00:00
SelectionDAGDumper.cpp CodeGen: extend f16 conversions to permit types > float. 2014-07-17 10:51:23 +00:00
SelectionDAGISel.cpp Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges." 2014-07-21 17:06:51 +00:00
SelectionDAGPrinter.cpp Revert "Introduce a string_ostream string builder facilty" 2014-06-26 22:52:05 +00:00
TargetLowering.cpp SelectionDAG: Factor FP_TO_SINT lower code out of DAGLegalizer 2014-07-10 22:40:18 +00:00
TargetSelectionDAGInfo.cpp Have TargetSelectionDAGInfo take a DataLayout initializer rather than 2014-06-06 19:04:48 +00:00