mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Fix incorrect check for sign-extended constant BUILD_VECTOR.
<rdar://problem/10298332> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142371 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
db2b18feba
commit
ad952ad8f0
@ -4527,7 +4527,7 @@ static bool isExtendedBUILD_VECTOR(SDNode *N, SelectionDAG &DAG,
|
|||||||
unsigned HalfSize = EltSize / 2;
|
unsigned HalfSize = EltSize / 2;
|
||||||
if (isSigned) {
|
if (isSigned) {
|
||||||
int64_t SExtVal = C->getSExtValue();
|
int64_t SExtVal = C->getSExtValue();
|
||||||
if ((SExtVal >> HalfSize) != (SExtVal >> EltSize))
|
if (SExtVal != SExtVal << (64 - HalfSize) >> (64 - HalfSize))
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
if ((C->getZExtValue() >> HalfSize) != 0)
|
if ((C->getZExtValue() >> HalfSize) != 0)
|
||||||
|
@ -514,3 +514,14 @@ entry:
|
|||||||
store <8 x i8> %10, <8 x i8>* %11, align 8
|
store <8 x i8> %10, <8 x i8>* %11, align 8
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; If one operand has a zero-extend and the other a sign-extend, vmull
|
||||||
|
; cannot be used.
|
||||||
|
define i16 @vmullWithInconsistentExtensions(<8 x i8> %vec) {
|
||||||
|
; CHECK: vmullWithInconsistentExtensions
|
||||||
|
; CHECK-NOT: vmull.s8
|
||||||
|
%1 = sext <8 x i8> %vec to <8 x i16>
|
||||||
|
%2 = mul <8 x i16> %1, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
|
||||||
|
%3 = extractelement <8 x i16> %2, i32 0
|
||||||
|
ret i16 %3
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user