diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-02-27 22:44:41 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-02-27 22:44:41 +0000 |
| commit | 2373f8fcf3a4eae520228e2e753575953954f3dc (patch) | |
| tree | 91da3c93e5e5120013d5f5f3f259def085d8f1be /llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp | |
| parent | 2d79017d85a3e788cf32a8ce1602c2994bfc4ecb (diff) | |
| download | bcm5719-llvm-2373f8fcf3a4eae520228e2e753575953954f3dc.tar.gz bcm5719-llvm-2373f8fcf3a4eae520228e2e753575953954f3dc.zip | |
[Hexagon] Recognize more sign-extensions as inputs to 32x32-bit multiply
llvm-svn: 326263
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp index e618f64c00e..54e501a6638 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp @@ -1275,9 +1275,13 @@ bool HexagonDAGToDAGISel::DetectUseSxtw(SDValue &N, SDValue &R) { EVT T = Opc == ISD::SIGN_EXTEND ? N.getOperand(0).getValueType() : cast<VTSDNode>(N.getOperand(1))->getVT(); - if (T.getSizeInBits() != 32) + unsigned SW = T.getSizeInBits(); + if (SW == 32) + R = N.getOperand(0); + else if (SW < 32) + R = N; + else return false; - R = N.getOperand(0); break; } case ISD::LOAD: { @@ -1291,6 +1295,13 @@ bool HexagonDAGToDAGISel::DetectUseSxtw(SDValue &N, SDValue &R) { R = N; break; } + case ISD::SRA: { + auto *S = dyn_cast<ConstantSDNode>(N.getOperand(1)); + if (!S || S->getZExtValue() != 32) + return false; + R = N; + break; + } default: return false; } |

