summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2019-08-12 19:26:30 +0000
committerCraig Topper <craig.topper@intel.com>2019-08-12 19:26:30 +0000
commit1b02909847ce3b82b1c3a0b6313b3076a4901f14 (patch)
tree4382b79fe1198fb2a7342d4f96ba3153ca643f8e
parent3f4e9b156d37fe91599bb5d6ec24709d8fc78ec2 (diff)
downloadbcm5719-llvm-1b02909847ce3b82b1c3a0b6313b3076a4901f14.tar.gz
bcm5719-llvm-1b02909847ce3b82b1c3a0b6313b3076a4901f14.zip
[X86] Simplify creation of saturating truncating stores.
We just need to check if the truncating store is legal instead of going through isSATValidOnAVX512Subtarget. llvm-svn: 368607
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp52
1 files changed, 11 insertions, 41 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index bacb7ab74f4..7049a6877a8 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -39021,36 +39021,6 @@ static SDValue detectSSatPattern(SDValue In, EVT VT, bool MatchPackUS = false) {
return SDValue();
}
-/// Detect a pattern of truncation with signed saturation.
-/// The types should allow to use VPMOVSS* instruction on AVX512.
-/// Return the source value to be truncated or SDValue() if the pattern was not
-/// matched.
-static SDValue detectAVX512SSatPattern(SDValue In, EVT VT,
- const X86Subtarget &Subtarget,
- const TargetLowering &TLI) {
- if (!TLI.isTypeLegal(In.getValueType()))
- return SDValue();
- if (!isSATValidOnAVX512Subtarget(In.getValueType(), VT, Subtarget))
- return SDValue();
- return detectSSatPattern(In, VT);
-}
-
-/// Detect a pattern of truncation with saturation:
-/// (truncate (umin (x, unsigned_max_of_dest_type)) to dest_type).
-/// The types should allow to use VPMOVUS* instruction on AVX512.
-/// Return the source value to be truncated or SDValue() if the pattern was not
-/// matched.
-static SDValue detectAVX512USatPattern(SDValue In, EVT VT, SelectionDAG &DAG,
- const SDLoc &DL,
- const X86Subtarget &Subtarget,
- const TargetLowering &TLI) {
- if (!TLI.isTypeLegal(In.getValueType()))
- return SDValue();
- if (!isSATValidOnAVX512Subtarget(In.getValueType(), VT, Subtarget))
- return SDValue();
- return detectUSatPattern(In, VT, DAG, DL);
-}
-
static SDValue combineTruncateWithSat(SDValue In, EVT VT, const SDLoc &DL,
SelectionDAG &DAG,
const X86Subtarget &Subtarget) {
@@ -39653,17 +39623,17 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
St->getPointerInfo(), St->getAlignment(),
St->getMemOperand()->getFlags());
- if (SDValue Val =
- detectAVX512SSatPattern(St->getValue(), St->getMemoryVT(), Subtarget,
- TLI))
- return EmitTruncSStore(true /* Signed saturation */, St->getChain(),
- dl, Val, St->getBasePtr(),
- St->getMemoryVT(), St->getMemOperand(), DAG);
- if (SDValue Val = detectAVX512USatPattern(St->getValue(), St->getMemoryVT(),
- DAG, dl, Subtarget, TLI))
- return EmitTruncSStore(false /* Unsigned saturation */, St->getChain(),
- dl, Val, St->getBasePtr(),
- St->getMemoryVT(), St->getMemOperand(), DAG);
+ if (TLI.isTruncStoreLegal(VT, StVT)) {
+ if (SDValue Val = detectSSatPattern(St->getValue(), St->getMemoryVT()))
+ return EmitTruncSStore(true /* Signed saturation */, St->getChain(),
+ dl, Val, St->getBasePtr(),
+ St->getMemoryVT(), St->getMemOperand(), DAG);
+ if (SDValue Val = detectUSatPattern(St->getValue(), St->getMemoryVT(),
+ DAG, dl))
+ return EmitTruncSStore(false /* Unsigned saturation */, St->getChain(),
+ dl, Val, St->getBasePtr(),
+ St->getMemoryVT(), St->getMemOperand(), DAG);
+ }
return SDValue();
}
OpenPOWER on IntegriCloud