mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Enable (sext x) == C --> x == (trunc C) combine
Extend the existing code which handles this for zext. This makes this more useful for targets with ZeroOrNegativeOne BooleanContent and obsoletes a custom combine SI uses for i1 setcc (sext(i1), 0, setne) since the constant will now be shrunk to i1. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224691 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1361,29 +1361,10 @@ SDValue SITargetLowering::PerformDAGCombine(SDNode *N,
|
||||
DAGCombinerInfo &DCI) const {
|
||||
SelectionDAG &DAG = DCI.DAG;
|
||||
SDLoc DL(N);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
switch (N->getOpcode()) {
|
||||
default: return AMDGPUTargetLowering::PerformDAGCombine(N, DCI);
|
||||
case ISD::SETCC: {
|
||||
SDValue Arg0 = N->getOperand(0);
|
||||
SDValue Arg1 = N->getOperand(1);
|
||||
SDValue CC = N->getOperand(2);
|
||||
ConstantSDNode * C = nullptr;
|
||||
ISD::CondCode CCOp = dyn_cast<CondCodeSDNode>(CC)->get();
|
||||
|
||||
// i1 setcc (sext(i1), 0, setne) -> i1 setcc(i1, 0, setne)
|
||||
if (VT == MVT::i1
|
||||
&& Arg0.getOpcode() == ISD::SIGN_EXTEND
|
||||
&& Arg0.getOperand(0).getValueType() == MVT::i1
|
||||
&& (C = dyn_cast<ConstantSDNode>(Arg1))
|
||||
&& C->isNullValue()
|
||||
&& CCOp == ISD::SETNE) {
|
||||
return SimplifySetCC(VT, Arg0.getOperand(0),
|
||||
DAG.getConstant(0, MVT::i1), CCOp, true, DCI, DL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return AMDGPUTargetLowering::PerformDAGCombine(N, DCI);
|
||||
case ISD::FMAXNUM: // TODO: What about fmax_legacy?
|
||||
case ISD::FMINNUM:
|
||||
case AMDGPUISD::SMAX:
|
||||
|
||||
Reference in New Issue
Block a user