[llvm-commits] [llvm] r59150 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
Dale Johannesen
dalej at apple.com
Wed Nov 12 10:38:55 PST 2008
Author: johannes
Date: Wed Nov 12 12:38:44 2008
New Revision: 59150
URL: http://llvm.org/viewvc/llvm-project?rev=59150&view=rev
Log:
Fix unsigned char->ppcf128 conversion.
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp?rev=59150&r1=59149&r2=59150&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp Wed Nov 12 12:38:44 2008
@@ -919,17 +919,22 @@
MVT NVT = TLI.getTypeToTransformTo(VT);
SDValue Src = N->getOperand(0);
MVT SrcVT = Src.getValueType();
+ bool isSigned = N->getOpcode() == ISD::SINT_TO_FP;
// First do an SINT_TO_FP, whether the original was signed or unsigned.
+ // When promoting partial word types to i32 we must honor the signedness,
+ // though.
if (SrcVT.bitsLE(MVT::i32)) {
// The integer can be represented exactly in an f64.
- Src = DAG.getNode(ISD::SIGN_EXTEND, MVT::i32, Src);
+ Src = DAG.getNode(isSigned ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND,
+ MVT::i32, Src);
Lo = DAG.getConstantFP(APFloat(APInt(NVT.getSizeInBits(), 0)), NVT);
Hi = DAG.getNode(ISD::SINT_TO_FP, NVT, Src);
} else {
RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
if (SrcVT.bitsLE(MVT::i64)) {
- Src = DAG.getNode(ISD::SIGN_EXTEND, MVT::i64, Src);
+ Src = DAG.getNode(isSigned ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND,
+ MVT::i64, Src);
LC = RTLIB::SINTTOFP_I64_PPCF128;
} else if (SrcVT.bitsLE(MVT::i128)) {
Src = DAG.getNode(ISD::SIGN_EXTEND, MVT::i128, Src);
@@ -943,7 +948,7 @@
Lo = Hi.getOperand(0); Hi = Hi.getOperand(1);
}
- if (N->getOpcode() == ISD::SINT_TO_FP)
+ if (isSigned)
return;
// Unsigned - fix up the SINT_TO_FP value just calculated.
More information about the llvm-commits
mailing list