@@ -41404,6 +41404,7 @@ static SDValue canonicalizeShuffleWithOp(SDValue N, SelectionDAG &DAG,
41404
41404
N->isOnlyUserOf(N.getOperand(0).getNode())) {
41405
41405
SDValue N0 = peekThroughOneUseBitcasts(N.getOperand(0));
41406
41406
unsigned SrcOpcode = N0.getOpcode();
41407
+ EVT OpVT = N0.getValueType();
41407
41408
if (TLI.isBinOp(SrcOpcode) && IsSafeToMoveShuffle(N0, SrcOpcode)) {
41408
41409
SDValue Op00 = peekThroughOneUseBitcasts(N0.getOperand(0));
41409
41410
SDValue Op01 = peekThroughOneUseBitcasts(N0.getOperand(1));
@@ -41421,13 +41422,23 @@ static SDValue canonicalizeShuffleWithOp(SDValue N, SelectionDAG &DAG,
41421
41422
LHS = DAG.getNode(Opc, DL, ShuffleVT, Op00);
41422
41423
RHS = DAG.getNode(Opc, DL, ShuffleVT, Op01);
41423
41424
}
41424
- EVT OpVT = N0.getValueType();
41425
41425
return DAG.getBitcast(ShuffleVT,
41426
41426
DAG.getNode(SrcOpcode, DL, OpVT,
41427
41427
DAG.getBitcast(OpVT, LHS),
41428
41428
DAG.getBitcast(OpVT, RHS)));
41429
41429
}
41430
41430
}
41431
+ if (SrcOpcode == ISD::SINT_TO_FP && IsSafeToMoveShuffle(N0, SrcOpcode) &&
41432
+ OpVT.getScalarSizeInBits() ==
41433
+ N0.getOperand(0).getScalarValueSizeInBits()) {
41434
+ SDValue Op00 = DAG.getBitcast(ShuffleVT, N0.getOperand(0));
41435
+ SDValue Res =
41436
+ N.getNumOperands() == 2
41437
+ ? DAG.getNode(Opc, DL, ShuffleVT, Op00, N.getOperand(1))
41438
+ : DAG.getNode(Opc, DL, ShuffleVT, Op00);
41439
+ Res = DAG.getBitcast(N0.getOperand(0).getValueType(), Res);
41440
+ return DAG.getBitcast(ShuffleVT, DAG.getNode(SrcOpcode, DL, OpVT, Res));
41441
+ }
41431
41442
}
41432
41443
break;
41433
41444
}
0 commit comments