diff --git a/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp b/llvm/lib/Target/ARM64/ARM64ISelLowering.cpp index 66207790c8a1..7bea3d1b7249 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 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 a12207974495..9a35fe54d32e 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 +}