mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 04:09:45 +00:00
AMDGPU: Fold rcp/rsq of undef to undef
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298725 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a640c061b8
commit
f9d04c6fdc
@ -3065,9 +3065,14 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Intrinsic::amdgcn_rcp: {
|
||||
if (const ConstantFP *C = dyn_cast<ConstantFP>(II->getArgOperand(0))) {
|
||||
Value *Src = II->getArgOperand(0);
|
||||
|
||||
// TODO: Move to ConstantFolding/InstSimplify?
|
||||
if (isa<UndefValue>(Src))
|
||||
return replaceInstUsesWith(CI, Src);
|
||||
|
||||
if (const ConstantFP *C = dyn_cast<ConstantFP>(Src)) {
|
||||
const APFloat &ArgVal = C->getValueAPF();
|
||||
APFloat Val(ArgVal.getSemantics(), 1.0);
|
||||
APFloat::opStatus Status = Val.divide(ArgVal,
|
||||
@ -3080,6 +3085,14 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
||||
|
||||
break;
|
||||
}
|
||||
case Intrinsic::amdgcn_rsq: {
|
||||
Value *Src = II->getArgOperand(0);
|
||||
|
||||
// TODO: Move to ConstantFolding/InstSimplify?
|
||||
if (isa<UndefValue>(Src))
|
||||
return replaceInstUsesWith(CI, Src);
|
||||
break;
|
||||
}
|
||||
case Intrinsic::amdgcn_frexp_mant:
|
||||
case Intrinsic::amdgcn_frexp_exp: {
|
||||
Value *Src = II->getArgOperand(0);
|
||||
|
@ -7,6 +7,12 @@
|
||||
declare float @llvm.amdgcn.rcp.f32(float) nounwind readnone
|
||||
declare double @llvm.amdgcn.rcp.f64(double) nounwind readnone
|
||||
|
||||
; CHECK-LABEL: @test_constant_fold_rcp_f32_undef
|
||||
; CHECK-NEXT: ret float undef
|
||||
define float @test_constant_fold_rcp_f32_undef() nounwind {
|
||||
%val = call float @llvm.amdgcn.rcp.f32(float undef) nounwind readnone
|
||||
ret float %val
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test_constant_fold_rcp_f32_1
|
||||
; CHECK-NEXT: ret float 1.000000e+00
|
||||
@ -50,6 +56,18 @@ define double @test_constant_fold_rcp_f64_43() nounwind {
|
||||
ret double %val
|
||||
}
|
||||
|
||||
; --------------------------------------------------------------------
|
||||
; llvm.amdgcn.rsq
|
||||
; --------------------------------------------------------------------
|
||||
|
||||
declare float @llvm.amdgcn.rsq.f32(float) nounwind readnone
|
||||
|
||||
; CHECK-LABEL: @test_constant_fold_rsq_f32_undef
|
||||
; CHECK-NEXT: ret float undef
|
||||
define float @test_constant_fold_rsq_f32_undef() nounwind {
|
||||
%val = call float @llvm.amdgcn.rsq.f32(float undef) nounwind readnone
|
||||
ret float %val
|
||||
}
|
||||
|
||||
; --------------------------------------------------------------------
|
||||
; llvm.amdgcn.frexp.mant
|
||||
|
Loading…
Reference in New Issue
Block a user