mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
[X86] Return UNDEF from LowerScalarImmediateShift when the shift amount is out of range.
I think we only turn out of range shiftss to undef when all elements are out of range or the shift amount is a splat out of range. I'm not sure which, I didn't check. During lowering we can split a shift where some elements are out of range into multiple shifts. This can create a new shift with a splat shift amount that is out of range. This patch returns undef for this case. Fixes PR42615. Differential Revision: https://reviews.llvm.org/D64699 llvm-svn: 366096
This commit is contained in:
parent
8f74f32e3e
commit
c34f81ed6b
@ -25033,8 +25033,11 @@ static SDValue LowerScalarImmediateShift(SDValue Op, SelectionDAG &DAG,
|
||||
APInt APIntShiftAmt;
|
||||
if (!isConstantSplat(Amt, APIntShiftAmt))
|
||||
return SDValue();
|
||||
assert(APIntShiftAmt.ult(VT.getScalarSizeInBits()) &&
|
||||
"Out of range shift amount");
|
||||
|
||||
// If the shift amount is out of range, return undef.
|
||||
if (APIntShiftAmt.uge(VT.getScalarSizeInBits()))
|
||||
return DAG.getUNDEF(VT);
|
||||
|
||||
uint64_t ShiftAmt = APIntShiftAmt.getZExtValue();
|
||||
|
||||
if (SupportedVectorShiftWithImm(VT, Subtarget, Op.getOpcode()))
|
||||
|
Loading…
Reference in New Issue
Block a user