summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2017-01-19 18:18:32 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2017-01-19 18:18:32 +0000
commitdb101e4d579944652a58232f3c9d139d4f9eac1d (patch)
treed71280933ed721cd0a68fd03977d499d1c4e4093 /llvm
parent650fca5f287d9c1ab9e79f57663c158cf48824b2 (diff)
downloadbcm5719-llvm-db101e4d579944652a58232f3c9d139d4f9eac1d.tar.gz
bcm5719-llvm-db101e4d579944652a58232f3c9d139d4f9eac1d.zip
[X86][SSE] Improve comments describing combineTruncatedArithmetic. NFCI.
llvm-svn: 292502
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 4e4b2b1a6d3..0d65c277725 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -32350,9 +32350,14 @@ static SDValue combineTruncatedArithmetic(SDNode *N, SelectionDAG &DAG,
auto IsRepeatedOpOrFreeTruncation = [VT](SDValue Op0, SDValue Op1) {
unsigned TruncSizeInBits = VT.getScalarSizeInBits();
+
+ // Repeated operand, so we are only trading one output truncation for
+ // one input truncation.
if (Op0 == Op1)
return true;
+ // See if either operand has been extended from a smaller/equal size to
+ // the truncation size, allowing a truncation to combine with the extend.
unsigned Opcode0 = Op0.getOpcode();
if ((Opcode0 == ISD::ANY_EXTEND || Opcode0 == ISD::SIGN_EXTEND ||
Opcode0 == ISD::ZERO_EXTEND) &&
@@ -32365,6 +32370,8 @@ static SDValue combineTruncatedArithmetic(SDNode *N, SelectionDAG &DAG,
Op1.getOperand(0).getScalarValueSizeInBits() <= TruncSizeInBits)
return true;
+ // See if either operand is a single use constant which can be constant
+ // folded.
SDValue BC0 = peekThroughOneUseBitcasts(Op0);
SDValue BC1 = peekThroughOneUseBitcasts(Op1);
return ISD::isBuildVectorOfConstantSDNodes(BC0.getNode()) ||
OpenPOWER on IntegriCloud