forked from OSchip/llvm-project
[Power9] Add __float128 library call for frem
Power 9 does not have a hardware instruction for frem but we can call fmodf128. Differential Revision: https://reviews.llvm.org/D48552 llvm-svn: 336406
This commit is contained in:
parent
1f200adfa7
commit
b351f09c9e
|
@ -820,6 +820,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
|
|||
setOperationAction(ISD::FCOS , MVT::f128, Expand);
|
||||
setOperationAction(ISD::FPOW, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FPOWI, MVT::f128, Expand);
|
||||
setOperationAction(ISD::FREM, MVT::f128, Expand);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1070,6 +1071,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
|
|||
setLibcallName(RTLIB::FMIN_F128, "fminf128");
|
||||
setLibcallName(RTLIB::FMAX_F128, "fmaxf128");
|
||||
setLibcallName(RTLIB::POWI_F128, "__powikf2");
|
||||
setLibcallName(RTLIB::REM_F128, "fmodf128");
|
||||
}
|
||||
|
||||
// With 32 condition bits, we don't need to sink (and duplicate) compares
|
||||
|
|
|
@ -293,3 +293,17 @@ entry:
|
|||
ret void
|
||||
}
|
||||
declare fp128 @llvm.powi.f128(fp128 %Val, i32 %power)
|
||||
|
||||
@a = common global fp128 0xL00000000000000000000000000000000, align 16
|
||||
@b = common global fp128 0xL00000000000000000000000000000000, align 16
|
||||
|
||||
define fp128 @qp_frem() #0 {
|
||||
entry:
|
||||
%0 = load fp128, fp128* @a, align 16
|
||||
%1 = load fp128, fp128* @b, align 16
|
||||
%rem = frem fp128 %0, %1
|
||||
ret fp128 %rem
|
||||
; CHECK-LABEL: qp_frem
|
||||
; CHECK: bl fmodf128
|
||||
; CHECK: blr
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue