Retain alignment requirements for load->selects modified by DAGCombine
authorLouis Gerbarg <lgg@apple.com>
Wed, 30 Jul 2014 18:24:41 +0000 (18:24 +0000)
committerLouis Gerbarg <lgg@apple.com>
Wed, 30 Jul 2014 18:24:41 +0000 (18:24 +0000)
commit5fb3c84898395b275623152904abd16188d1db1e
tree0f8cd693bfd803172b32b329fc12d56ad98d09fe
parent43b54db2a4db4648441f2887f4fb02412b815981
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
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/X86/x86-mixed-alignment-dagcombine.ll [new file with mode: 0644]