summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-08-13 05:26:49 +0000
committerCraig Topper <craig.topper@intel.com>2018-08-13 05:26:49 +0000
commit42e32117bb0afbbd40f34ea18e2884bb54d7c9be (patch)
tree2fc9e9fb9ef05a88baa391a41b1404c0cb63350f /llvm/lib
parent8caccc32b5996f55fecead4e348f6646900456df (diff)
downloadbcm5719-llvm-42e32117bb0afbbd40f34ea18e2884bb54d7c9be.tar.gz
bcm5719-llvm-42e32117bb0afbbd40f34ea18e2884bb54d7c9be.zip
[SelectionDAG] In PromoteFloatRes_BITCAST, insert a bitcast before the fp16_to_fp in case the input type isn't an i16.
The bitcast can be further legalized as needed. Fixes PR38533. llvm-svn: 339533
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
index 9aa0ea15f3b..feca1c10f52 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
@@ -1941,8 +1941,10 @@ void DAGTypeLegalizer::PromoteFloatResult(SDNode *N, unsigned ResNo) {
SDValue DAGTypeLegalizer::PromoteFloatRes_BITCAST(SDNode *N) {
EVT VT = N->getValueType(0);
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
- return DAG.getNode(GetPromotionOpcode(VT, NVT), SDLoc(N), NVT,
- N->getOperand(0));
+ // Input type isn't guaranteed to be i16 so bitcast if not. The bitcast
+ // will be legalized further if necessary.
+ SDValue Cast = DAG.getBitcast(MVT::i16, N->getOperand(0));
+ return DAG.getNode(GetPromotionOpcode(VT, NVT), SDLoc(N), NVT, Cast);
}
SDValue DAGTypeLegalizer::PromoteFloatRes_ConstantFP(SDNode *N) {
OpenPOWER on IntegriCloud