mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[X86] Don't use SplitOpsAndApply for ISD::USUBSAT.
Target independent type legalization and custom lowering should be able to handle it. llvm-svn: 368537
This commit is contained in:
parent
4106ff59bf
commit
729c0388ca
@ -42896,16 +42896,10 @@ static SDValue combineSubToSubus(SDNode *N, SelectionDAG &DAG,
|
||||
} else
|
||||
return SDValue();
|
||||
|
||||
auto USUBSATBuilder = [](SelectionDAG &DAG, const SDLoc &DL,
|
||||
ArrayRef<SDValue> Ops) {
|
||||
return DAG.getNode(ISD::USUBSAT, DL, Ops[0].getValueType(), Ops);
|
||||
};
|
||||
|
||||
// PSUBUS doesn't support v8i32/v8i64/v16i32, but it can be enabled with
|
||||
// special preprocessing in some cases.
|
||||
if (VT != MVT::v8i32 && VT != MVT::v16i32 && VT != MVT::v8i64)
|
||||
return SplitOpsAndApply(DAG, Subtarget, SDLoc(N), VT,
|
||||
{ SubusLHS, SubusRHS }, USUBSATBuilder);
|
||||
return DAG.getNode(ISD::USUBSAT, SDLoc(N), VT, SubusLHS, SubusRHS);
|
||||
|
||||
// Special preprocessing case can be only applied
|
||||
// if the value was zero extended from 16 bit,
|
||||
@ -42934,9 +42928,9 @@ static SDValue combineSubToSubus(SDNode *N, SelectionDAG &DAG,
|
||||
SDValue NewSubusLHS =
|
||||
DAG.getZExtOrTrunc(SubusLHS, SDLoc(SubusLHS), ShrinkedType);
|
||||
SDValue NewSubusRHS = DAG.getZExtOrTrunc(UMin, SDLoc(SubusRHS), ShrinkedType);
|
||||
SDValue Psubus =
|
||||
SplitOpsAndApply(DAG, Subtarget, SDLoc(N), ShrinkedType,
|
||||
{ NewSubusLHS, NewSubusRHS }, USUBSATBuilder);
|
||||
SDValue Psubus = DAG.getNode(ISD::USUBSAT, SDLoc(N), ShrinkedType,
|
||||
NewSubusLHS, NewSubusRHS);
|
||||
|
||||
// Zero extend the result, it may be used somewhere as 32 bit,
|
||||
// if not zext and following trunc will shrink.
|
||||
return DAG.getZExtOrTrunc(Psubus, SDLoc(N), ExtType);
|
||||
|
Loading…
Reference in New Issue
Block a user