forked from OSchip/llvm-project
ARM64: fix lowering of fp128 fptosi/fptoui
We were creating libcall nodes that returned an MVT::f128, when these particular operations actually return an int of some stripe. llvm-svn: 205425
This commit is contained in:
parent
670df3d937
commit
0d80f70530
|
@ -1812,7 +1812,12 @@ SDValue ARM64TargetLowering::LowerFP_TO_INT(SDValue Op,
|
||||||
else
|
else
|
||||||
LC = RTLIB::getFPTOUINT(Op.getOperand(0).getValueType(), Op.getValueType());
|
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) {
|
static SDValue LowerVectorINT_TO_FP(SDValue Op, SelectionDAG &DAG) {
|
||||||
|
|
|
@ -245,3 +245,51 @@ define void @test_fmuladd(fp128 %fp128) {
|
||||||
|
|
||||||
ret void
|
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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue