SelectionDAG: Don't constant fold target-specific nodes.
authorJim Grosbach <grosbach@apple.com>
Wed, 9 Apr 2014 23:28:11 +0000 (23:28 +0000)
committerJim Grosbach <grosbach@apple.com>
Wed, 9 Apr 2014 23:28:11 +0000 (23:28 +0000)
commite9915738beed0d8b4b50dca8c0ed8c76e7d320db
tree246222ddaa0805566f60a11dbe446b3b0828efca
parent34d14bb5343753b6418dd2302349497c48db95eb
SelectionDAG: Don't constant fold target-specific nodes.

FoldConstantArithmetic() only knows how to deal with a few target independent
ISD opcodes. Bail early if it sees a target-specific ISD node. These node do
funny things with operand types which may break the assumptions of the code
that follows, and there's no actual folding that can be done anyway. For example,
non-constant 256 bit vector shifts on X86 have a shift-amount operand that's a
128-bit v4i32 vector regardless of what the first operand type is and that breaks
the assumption that the operand types must match.

rdar://16530923

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205937 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/SelectionDAG.cpp
test/CodeGen/X86/avx2-vector-shifts.ll