summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2019-08-29 05:13:56 +0000
committerCraig Topper <craig.topper@intel.com>2019-08-29 05:13:56 +0000
commit1aadf6f39f41e350a1ba93968dca980647da0b89 (patch)
tree34f5fa7198399b4fb916d3f39857985afc14a749 /llvm/lib/CodeGen/SelectionDAG
parent3177b92231ae9b350909deea32109a7f2a58b022 (diff)
downloadbcm5719-llvm-1aadf6f39f41e350a1ba93968dca980647da0b89.tar.gz
bcm5719-llvm-1aadf6f39f41e350a1ba93968dca980647da0b89.zip
[X86] Make inline assembly 'x' and 'v' constraints work for f128.
Including a type legalizer fix to make bitcast operand promotion work correctly when getSoftenedFloat returns f128 instead of i128. Fixes PR43157 llvm-svn: 370293
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
index 9c99de35c89..6686b871582 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
@@ -895,8 +895,12 @@ bool DAGTypeLegalizer::CanSkipSoftenFloatOperand(SDNode *N, unsigned OpNo) {
}
SDValue DAGTypeLegalizer::SoftenFloatOp_BITCAST(SDNode *N) {
- return DAG.getNode(ISD::BITCAST, SDLoc(N), N->getValueType(0),
- GetSoftenedFloat(N->getOperand(0)));
+ SDValue Op0 = GetSoftenedFloat(N->getOperand(0));
+
+ if (Op0 == N->getOperand(0))
+ return SDValue();
+
+ return DAG.getNode(ISD::BITCAST, SDLoc(N), N->getValueType(0), Op0);
}
SDValue DAGTypeLegalizer::SoftenFloatOp_COPY_TO_REG(SDNode *N) {
OpenPOWER on IntegriCloud