@@ -16279,40 +16279,6 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
16279
16279
// because targets may prefer a wider type during later combines and invert
16280
16280
// this transform.
16281
16281
switch (N0.getOpcode()) {
16282
- case ISD::AVGCEILU:
16283
- case ISD::AVGFLOORU:
16284
- if (!LegalOperations && N0.hasOneUse() &&
16285
- TLI.isOperationLegal(N0.getOpcode(), VT)) {
16286
- SDValue X = N0.getOperand(0);
16287
- SDValue Y = N0.getOperand(1);
16288
- unsigned SrcBits = X.getScalarValueSizeInBits();
16289
- unsigned DstBits = VT.getScalarSizeInBits();
16290
- APInt UpperBits = APInt::getBitsSetFrom(SrcBits, DstBits);
16291
- if (DAG.MaskedValueIsZero(X, UpperBits) &&
16292
- DAG.MaskedValueIsZero(Y, UpperBits)) {
16293
- SDValue Tx = DAG.getNode(ISD::TRUNCATE, DL, VT, X);
16294
- SDValue Ty = DAG.getNode(ISD::TRUNCATE, DL, VT, Y);
16295
- return DAG.getNode(N0.getOpcode(), DL, VT, Tx, Ty);
16296
- }
16297
- }
16298
- break;
16299
- case ISD::AVGCEILS:
16300
- case ISD::AVGFLOORS:
16301
- if (!LegalOperations && N0.hasOneUse() &&
16302
- TLI.isOperationLegal(N0.getOpcode(), VT)) {
16303
- SDValue X = N0.getOperand(0);
16304
- SDValue Y = N0.getOperand(1);
16305
- unsigned SrcBits = X.getScalarValueSizeInBits();
16306
- unsigned DstBits = VT.getScalarSizeInBits();
16307
- unsigned NeededSignBits = SrcBits - DstBits + 1;
16308
- if (DAG.ComputeNumSignBits(X) >= NeededSignBits &&
16309
- DAG.ComputeNumSignBits(Y) >= NeededSignBits) {
16310
- SDValue Tx = DAG.getNode(ISD::TRUNCATE, DL, VT, X);
16311
- SDValue Ty = DAG.getNode(ISD::TRUNCATE, DL, VT, Y);
16312
- return DAG.getNode(N0.getOpcode(), DL, VT, Tx, Ty);
16313
- }
16314
- }
16315
- break;
16316
16282
case ISD::ADD:
16317
16283
case ISD::SUB:
16318
16284
case ISD::MUL:
@@ -16361,10 +16327,15 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
16361
16327
DAG, DL);
16362
16328
}
16363
16329
break;
16364
- case ISD::ABDU:
16330
+ case ISD::AVGFLOORS:
16331
+ case ISD::AVGFLOORU:
16332
+ case ISD::AVGCEILS:
16333
+ case ISD::AVGCEILU:
16365
16334
case ISD::ABDS:
16335
+ case ISD::ABDU:
16336
+ // (trunc (avg a, b)) -> (avg (trunc a), (trunc b))
16366
16337
// (trunc (abdu/abds a, b)) -> (abdu/abds (trunc a), (trunc b))
16367
- if (( !LegalOperations || N0.hasOneUse() ) &&
16338
+ if (!LegalOperations && N0.hasOneUse() &&
16368
16339
TLI.isOperationLegal(N0.getOpcode(), VT)) {
16369
16340
EVT TruncVT = VT;
16370
16341
unsigned SrcBits = SrcVT.getScalarSizeInBits();
@@ -16374,7 +16345,8 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
16374
16345
SDValue B = N0.getOperand(1);
16375
16346
bool CanFold = false;
16376
16347
16377
- if (N0.getOpcode() == ISD::ABDU) {
16348
+ if (N0.getOpcode() == ISD::AVGFLOORU || N0.getOpcode() == ISD::AVGCEILU ||
16349
+ N0.getOpcode() == ISD::ABDU) {
16378
16350
APInt UpperBits = APInt::getBitsSetFrom(SrcBits, TruncBits);
16379
16351
CanFold = DAG.MaskedValueIsZero(B, UpperBits) &&
16380
16352
DAG.MaskedValueIsZero(A, UpperBits);
0 commit comments