It's not safe to fold (fptrunc (sqrt (fpext x))) to (sqrtf x) if there is another use of sqrt. rdar://9763193

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135058 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng
2011-07-13 19:08:16 +00:00
parent 59642c2600
commit 93a635c82c
3 changed files with 23 additions and 3 deletions

View File

@@ -14,8 +14,6 @@ entry:
ret float %conv1
}
declare double @sqrt(double)
; PR8096
define float @test2(float %x) nounwind readnone ssp {
entry:
@@ -30,3 +28,22 @@ entry:
; CHECK: ret float
ret float %conv1
}
; rdar://9763193
; Can't fold (fptrunc (sqrt (fpext x))) -> (sqrtf x) since there is another
; use of sqrt result.
define float @test3(float* %v) nounwind uwtable ssp {
entry:
; CHECK: @test3
; CHECK: sqrt(
; CHECK-NOT: sqrtf(
; CHECK: fptrunc
%call34 = call double @sqrt(double undef) nounwind readnone
%call36 = call i32 (double)* @foo(double %call34) nounwind
%conv38 = fptrunc double %call34 to float
ret float %conv38
}
declare i32 @foo(double)
declare double @sqrt(double) readnone