summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/ARM64/ARM64ISelLowering.cpp7
-rw-r--r--llvm/test/CodeGen/ARM64/illegal-float-ops.ll48
2 files changed, 54 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp b/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp
index 66207790c8a..7bea3d1b724 100644
--- a/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp
+++ b/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp
@@ -1812,7 +1812,12 @@ SDValue ARM64TargetLowering::LowerFP_TO_INT(SDValue Op,
else
LC = RTLIB::getFPTOUINT(Op.getOperand(0).getValueType(), Op.getValueType());
- return LowerF128Call(Op, DAG, LC);
+ SmallVector<SDValue, 2> Ops;
+ for (unsigned i = 0, e = Op->getNumOperands(); i != e; ++i)
+ Ops.push_back(Op.getOperand(i));
+
+ return makeLibCall(DAG, LC, Op.getValueType(), &Ops[0], Ops.size(), false,
+ SDLoc(Op)).first;
}
static SDValue LowerVectorINT_TO_FP(SDValue Op, SelectionDAG &DAG) {
diff --git a/llvm/test/CodeGen/ARM64/illegal-float-ops.ll b/llvm/test/CodeGen/ARM64/illegal-float-ops.ll
index a1220797449..9a35fe54d32 100644
--- a/llvm/test/CodeGen/ARM64/illegal-float-ops.ll
+++ b/llvm/test/CodeGen/ARM64/illegal-float-ops.ll
@@ -245,3 +245,51 @@ define void @test_fmuladd(fp128 %fp128) {
ret void
}
+
+define i32 @test_fptosi32(fp128 %a) {
+; CHECK-LABEL: test_fptosi32:
+; CHECK: bl __fixtfsi
+ %conv.i = fptosi fp128 %a to i32
+ %b = add nsw i32 %conv.i, 48
+ ret i32 %b
+}
+
+define i64 @test_fptosi64(fp128 %a) {
+; CHECK-LABEL: test_fptosi64:
+; CHECK: bl __fixtfdi
+ %conv.i = fptosi fp128 %a to i64
+ %b = add nsw i64 %conv.i, 48
+ ret i64 %b
+}
+
+define i128 @test_fptosi128(fp128 %a) {
+; CHECK-LABEL: test_fptosi128:
+; CHECK: bl __fixtfti
+ %conv.i = fptosi fp128 %a to i128
+ %b = add nsw i128 %conv.i, 48
+ ret i128 %b
+}
+
+define i32 @test_fptoui32(fp128 %a) {
+; CHECK-LABEL: test_fptoui32:
+; CHECK: bl __fixunstfsi
+ %conv.i = fptoui fp128 %a to i32
+ %b = add nsw i32 %conv.i, 48
+ ret i32 %b
+}
+
+define i64 @test_fptoui64(fp128 %a) {
+; CHECK-LABEL: test_fptoui64:
+; CHECK: bl __fixunstfdi
+ %conv.i = fptoui fp128 %a to i64
+ %b = add nsw i64 %conv.i, 48
+ ret i64 %b
+}
+
+define i128 @test_fptoui128(fp128 %a) {
+; CHECK-LABEL: test_fptoui128:
+; CHECK: bl __fixunstfti
+ %conv.i = fptoui fp128 %a to i128
+ %b = add nsw i128 %conv.i, 48
+ ret i128 %b
+}
OpenPOWER on IntegriCloud