diff options
author | Kevin Qin <Kevin.Qin@arm.com> | 2014-01-06 02:26:10 +0000 |
---|---|---|
committer | Kevin Qin <Kevin.Qin@arm.com> | 2014-01-06 02:26:10 +0000 |
commit | f14f22cebf4608056238fd5e326a6526cb1eef13 (patch) | |
tree | 995346c8e4b4cd139519e137ec103a8c32e8d293 /include/llvm | |
parent | 8cba6039daffc8bb1e8ccd3a1d647c75e87b0c30 (diff) | |
download | llvm-f14f22cebf4608056238fd5e326a6526cb1eef13.tar.gz llvm-f14f22cebf4608056238fd5e326a6526cb1eef13.tar.bz2 llvm-f14f22cebf4608056238fd5e326a6526cb1eef13.tar.xz |
[AArch64 NEON] Fix invalid constant used in vselect condition.
There is a wrong assumption that the vector element type and the
type of each ConstantSDNode in the build_vector were the same.
However, when promoting the integer operand of a legally typed
build_vector, the operand type and the vector element type do not
need to be the same
(See method 'DAGTypeLegalizer::PromoteIntOp_BUILD_VECTOR' in
LegalizeIntegerTypes.cpp).
in AArch64 backend, the following dag sequence:
C0: i1 = Constant<0>
C1: i1 = Constant<-1>
V: v8i1 = BUILD_VECTOR C1, C1, C0, C0, C0, C0, C0, C0
is type-legalized into:
NewC0: i32 = Constant<0>
NewC1: i32 = Constant<1>
V: v8i8 = BUILD_VECTOR NewC1, NewC1, NewC0, NewC0, NewC0, NewC0, NewC0, NewC0
Forcing a getZeroExtend to VTBits to ensure that the new constant
is correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198582 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
0 files changed, 0 insertions, 0 deletions