diff options
| author | Craig Topper <craig.topper@intel.com> | 2019-12-17 15:14:44 -0800 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2019-12-17 15:17:43 -0800 |
| commit | c36773c78eb52ae0c549dc286a441af0d1b8b712 (patch) | |
| tree | 5746c06ff82a5d6ccaa6ad3bea6f99ce8c3a56ae /llvm/lib/CodeGen/SelectionDAG | |
| parent | b8ac5894a115987fcc7e871049ec31a8eba66741 (diff) | |
| download | bcm5719-llvm-c36773c78eb52ae0c549dc286a441af0d1b8b712.tar.gz bcm5719-llvm-c36773c78eb52ae0c549dc286a441af0d1b8b712.zip | |
[FPEnv][LegalizeTypes] Make ScalarizeVecOp_STRICT_FP_ROUND do its own replacements and return SDValue()
The caller will assert for nodes with more than 2 results unless
we return a null SDValue.
I tried to test this by copying an AArch64 test for ScalarizeVecOp_FP_ROUND.
While it did hit the assert and this commited fixed that. It also
hit a later problem that couldn't be fixed without adding strict
FP support to AArch64.
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index 11f6688e356..dce2867a3dd 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -777,7 +777,13 @@ SDValue DAGTypeLegalizer::ScalarizeVecOp_STRICT_FP_ROUND(SDNode *N, // Legalize the chain result - switch anything that used the old chain to // use the new one. ReplaceValueWith(SDValue(N, 1), Res.getValue(1)); - return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), N->getValueType(0), Res); + + Res = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), N->getValueType(0), Res); + + // Do our own replacement and return SDValue() to tell the caller that we + // handled all replacements since caller can only handle a single result. + ReplaceValueWith(SDValue(N, 0), Res); + return SDValue(); } SDValue DAGTypeLegalizer::ScalarizeVecOp_VECREDUCE(SDNode *N) { |

