mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
When lowering an inreg sext first shift left, then right arithmetically.
Shifting right two times will only yield zero. Should fix SingleSource/UnitTests/SignlessTypes/factor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172322 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -508,9 +508,9 @@ SDValue VectorLegalizer::ExpandSELECT(SDValue Op) {
|
||||
SDValue VectorLegalizer::ExpandSEXTINREG(SDValue Op) {
|
||||
EVT VT = Op.getValueType();
|
||||
|
||||
// Make sure that the SRA and SRL instructions are available.
|
||||
// Make sure that the SRA and SHL instructions are available.
|
||||
if (TLI.getOperationAction(ISD::SRA, VT) == TargetLowering::Expand ||
|
||||
TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Expand)
|
||||
TLI.getOperationAction(ISD::SHL, VT) == TargetLowering::Expand)
|
||||
return DAG.UnrollVectorOp(Op.getNode());
|
||||
|
||||
DebugLoc DL = Op.getDebugLoc();
|
||||
@ -521,7 +521,7 @@ SDValue VectorLegalizer::ExpandSEXTINREG(SDValue Op) {
|
||||
SDValue ShiftSz = DAG.getConstant(BW - OrigBW, VT);
|
||||
|
||||
Op = Op.getOperand(0);
|
||||
Op = DAG.getNode(ISD::SRL, DL, VT, Op, ShiftSz);
|
||||
Op = DAG.getNode(ISD::SHL, DL, VT, Op, ShiftSz);
|
||||
return DAG.getNode(ISD::SRA, DL, VT, Op, ShiftSz);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user