mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
AArch64: More correctly constrain target vector extend lowering.
The AArch64 target lowering for [zs]ext of vectors is set up to handle input simple types and expects the generic SDag path to do something reasonable with anything that's not a simple type. The code, however, was only checking that the result type was a simple type and assuming that implied that the source type would also be a simple type. That's not a valid assumption, as operations like "zext <1 x i1> %0 to <1 x i32>" demonstrate. The fix is to simply explicitly validate the source type as well as the result type. PR20791 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216689 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
179b5ee8a8
commit
0d34b1ed26
@ -7514,11 +7514,11 @@ static SDValue performExtendCombine(SDNode *N,
|
||||
// If the vector type isn't a simple VT, it's beyond the scope of what
|
||||
// we're worried about here. Let legalization do its thing and hope for
|
||||
// the best.
|
||||
if (!ResVT.isSimple())
|
||||
SDValue Src = N->getOperand(0);
|
||||
EVT SrcVT = Src->getValueType(0);
|
||||
if (!ResVT.isSimple() || !SrcVT.isSimple())
|
||||
return SDValue();
|
||||
|
||||
SDValue Src = N->getOperand(0);
|
||||
MVT SrcVT = Src->getValueType(0).getSimpleVT();
|
||||
// If the source VT is a 64-bit vector, we can play games and get the
|
||||
// better results we want.
|
||||
if (SrcVT.getSizeInBits() != 64)
|
||||
|
@ -14,3 +14,14 @@ define void @func30(%T0_30 %v0, %T1_30* %p1) {
|
||||
store %T1_30 %r, %T1_30* %p1
|
||||
ret void
|
||||
}
|
||||
|
||||
; Extend from v1i1 was crashing things (PR20791). Make sure we do something
|
||||
; sensible instead.
|
||||
define <1 x i32> @autogen_SD7918() {
|
||||
; CHECK-LABEL: autogen_SD7918
|
||||
; CHECK: movi d0, #0000000000000000
|
||||
; CHECK-NEXT: ret
|
||||
%I29 = insertelement <1 x i1> zeroinitializer, i1 false, i32 0
|
||||
%ZE = zext <1 x i1> %I29 to <1 x i32>
|
||||
ret <1 x i32> %ZE
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user