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 | 5cd73c9e0a7af4047df073fb5395fe111ea627f6 (patch) | |
| tree | fae4dc3091205a54dbe442efe2cad702c273ffd0 /llvm/lib/Transforms | |
| parent | 63c6b45a5aa86e8279b1582ef79416a59cec3ab0 (diff) | |
| download | bcm5719-llvm-5cd73c9e0a7af4047df073fb5395fe111ea627f6.tar.gz bcm5719-llvm-5cd73c9e0a7af4047df073fb5395fe111ea627f6.zip | |
[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.
llvm-svn: 198582
Diffstat (limited to 'llvm/lib/Transforms')
0 files changed, 0 insertions, 0 deletions

