summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-10-05 00:31:41 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-10-05 00:31:41 +0000
commitb648122c5f4dfa651d46c10c39ddf4f2f8cf1170 (patch)
treeb334a6e82e1b796d4d4ae02e1951183e9e0ae93b
parenteee74fbbb64e5a4fd3af90611128ded5d759c82f (diff)
downloadllvm-b648122c5f4dfa651d46c10c39ddf4f2f8cf1170.tar.gz
llvm-b648122c5f4dfa651d46c10c39ddf4f2f8cf1170.tar.bz2
llvm-b648122c5f4dfa651d46c10c39ddf4f2f8cf1170.tar.xz
[Sparc] Respect hasHardQuad parameter correctly when lowering SINT_TO_FP with fp128 operand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192015 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/Sparc/SparcISelLowering.cpp2
-rw-r--r--test/CodeGen/SPARC/fp128.ll13
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/Target/Sparc/SparcISelLowering.cpp b/lib/Target/Sparc/SparcISelLowering.cpp
index cdba998244..32e02698f3 100644
--- a/lib/Target/Sparc/SparcISelLowering.cpp
+++ b/lib/Target/Sparc/SparcISelLowering.cpp
@@ -2046,7 +2046,7 @@ static SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG,
assert(Op.getOperand(0).getValueType() == MVT::i32);
SDValue Tmp = DAG.getNode(ISD::BITCAST, dl, MVT::f32, Op.getOperand(0));
// Convert the int value to FP in an FP register.
- if (Op.getValueType() == MVT::f128 && hasHardQuad)
+ if (Op.getValueType() == MVT::f128 && !hasHardQuad)
return TLI.LowerF128Op(Op, DAG,
TLI.getLibcallName(RTLIB::SINTTOFP_I32_F128), 1);
return DAG.getNode(SPISD::ITOF, dl, Op.getValueType(), Tmp);
diff --git a/test/CodeGen/SPARC/fp128.ll b/test/CodeGen/SPARC/fp128.ll
index e3d361335d..2406af753f 100644
--- a/test/CodeGen/SPARC/fp128.ll
+++ b/test/CodeGen/SPARC/fp128.ll
@@ -113,3 +113,16 @@ entry:
}
declare fp128 @llvm.fabs.f128(fp128) nounwind readonly
+
+; HARD-LABEL: int_to_f128
+; HARD: fitoq
+
+; SOFT-LABEL: int_to_f128
+; SOFT: _Q_itoq
+
+define void @int_to_f128(fp128* noalias sret %scalar.result, i32 %i) {
+entry:
+ %0 = sitofp i32 %i to fp128
+ store fp128 %0, fp128* %scalar.result, align 8
+ ret void
+}