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)
commit4fc09b36de0fb3c4a99e7ea9adc9af0a03ed14ee
treea262ca4624850e3b603dc7f169f0d4876288d3df
parentc69b5160567234ccc0d286f37059d52c63343c11
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

llvm-svn: 214322
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/X86/x86-mixed-alignment-dagcombine.ll [new file with mode: 0644]