@@ -48464,7 +48464,7 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48464
48464
TargetLowering::DAGCombinerInfo &DCI,
48465
48465
const X86Subtarget &Subtarget) {
48466
48466
SDLoc DL(N);
48467
-
48467
+ EVT VT = N->getValueType(0);
48468
48468
SDValue FalseOp = N->getOperand(0);
48469
48469
SDValue TrueOp = N->getOperand(1);
48470
48470
X86::CondCode CC = (X86::CondCode)N->getConstantOperandVal(2);
@@ -48483,7 +48483,7 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48483
48483
!Subtarget.canUseCMOV() || hasFPCMov(CC)) {
48484
48484
SDValue Ops[] = {FalseOp, TrueOp, DAG.getTargetConstant(CC, DL, MVT::i8),
48485
48485
Flags};
48486
- return DAG.getNode(X86ISD::CMOV, DL, N->getValueType(0) , Ops);
48486
+ return DAG.getNode(X86ISD::CMOV, DL, VT , Ops);
48487
48487
}
48488
48488
}
48489
48489
@@ -48530,9 +48530,9 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48530
48530
48531
48531
// Optimize cases that will turn into an LEA instruction. This requires
48532
48532
// an i32 or i64 and an efficient multiplier (1, 2, 3, 4, 5, 8, 9).
48533
- if (N->getValueType(0) == MVT::i32 || N->getValueType(0) == MVT::i64) {
48533
+ if (VT == MVT::i32 || VT == MVT::i64) {
48534
48534
APInt Diff = TrueC->getAPIntValue() - FalseC->getAPIntValue();
48535
- assert(Diff.getBitWidth() == N->getValueType(0) .getSizeInBits() &&
48535
+ assert(Diff.getBitWidth() == VT .getSizeInBits() &&
48536
48536
"Implicit constant truncation");
48537
48537
48538
48538
bool isFastMultiplier = false;
@@ -48600,11 +48600,10 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48600
48600
std::swap(TrueOp, FalseOp);
48601
48601
}
48602
48602
48603
- if (CC == X86::COND_E &&
48604
- CmpAgainst == dyn_cast<ConstantSDNode>(TrueOp)) {
48603
+ if (CC == X86::COND_E && CmpAgainst == dyn_cast<ConstantSDNode>(TrueOp)) {
48605
48604
SDValue Ops[] = {FalseOp, Cond.getOperand(0),
48606
48605
DAG.getTargetConstant(CC, DL, MVT::i8), Cond};
48607
- return DAG.getNode(X86ISD::CMOV, DL, N->getValueType(0) , Ops);
48606
+ return DAG.getNode(X86ISD::CMOV, DL, VT , Ops);
48608
48607
}
48609
48608
}
48610
48609
}
@@ -48624,14 +48623,13 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48624
48623
auto *Sub1C = dyn_cast<ConstantSDNode>(Cond.getOperand(1));
48625
48624
if (Cond0 == TrueOp && Sub1C && Sub1C->getZExtValue() == 2) {
48626
48625
EVT CondVT = Cond->getValueType(0);
48627
- EVT OuterVT = N->getValueType(0);
48628
48626
// Subtract 1 and generate a carry.
48629
48627
SDValue NewSub =
48630
48628
DAG.getNode(X86ISD::SUB, DL, Cond->getVTList(), Cond.getOperand(0),
48631
48629
DAG.getConstant(1, DL, CondVT));
48632
48630
SDValue EFLAGS(NewSub.getNode(), 1);
48633
- return DAG.getNode(X86ISD::ADC, DL, DAG.getVTList(OuterVT , MVT::i32),
48634
- TrueOp, DAG.getConstant(0, DL, OuterVT ), EFLAGS);
48631
+ return DAG.getNode(X86ISD::ADC, DL, DAG.getVTList(VT , MVT::i32), TrueOp ,
48632
+ DAG.getConstant(0, DL, VT ), EFLAGS);
48635
48633
}
48636
48634
}
48637
48635
@@ -48665,10 +48663,10 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48665
48663
48666
48664
SDValue LOps[] = {FalseOp, TrueOp,
48667
48665
DAG.getTargetConstant(CC0, DL, MVT::i8), Flags};
48668
- SDValue LCMOV = DAG.getNode(X86ISD::CMOV, DL, N->getValueType(0) , LOps);
48666
+ SDValue LCMOV = DAG.getNode(X86ISD::CMOV, DL, VT , LOps);
48669
48667
SDValue Ops[] = {LCMOV, TrueOp, DAG.getTargetConstant(CC1, DL, MVT::i8),
48670
48668
Flags};
48671
- SDValue CMOV = DAG.getNode(X86ISD::CMOV, DL, N->getValueType(0) , Ops);
48669
+ SDValue CMOV = DAG.getNode(X86ISD::CMOV, DL, VT , Ops);
48672
48670
return CMOV;
48673
48671
}
48674
48672
}
@@ -48696,7 +48694,6 @@ static SDValue combineCMov(SDNode *N, SelectionDAG &DAG,
48696
48694
(Add.getOperand(0).getOpcode() == ISD::CTTZ_ZERO_UNDEF ||
48697
48695
Add.getOperand(0).getOpcode() == ISD::CTTZ) &&
48698
48696
Add.getOperand(0).getOperand(0) == Cond.getOperand(0)) {
48699
- EVT VT = N->getValueType(0);
48700
48697
// This should constant fold.
48701
48698
SDValue Diff = DAG.getNode(ISD::SUB, DL, VT, Const, Add.getOperand(1));
48702
48699
SDValue CMov =
0 commit comments