llvm-6502/test/Transforms/InstCombine/fdiv.ll
Owen Anderson 1e1446bf84 Fix all the remaining lost-fast-math-flags bugs I've been able to find. The most important of these are cases in the generic logic for combining BinaryOperators.
This logic hadn't been updated to handle FastMathFlags, and it took me a while to detect it because it doesn't show up in a simple search for CreateFAdd.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199629 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-20 07:44:53 +00:00

52 lines
1.2 KiB
LLVM

; RUN: opt -S -instcombine < %s | FileCheck %s
define float @test1(float %x) nounwind readnone ssp {
%div = fdiv float %x, 0x3810000000000000
ret float %div
; CHECK-LABEL: @test1(
; CHECK-NEXT: fmul float %x, 0x47D0000000000000
}
define float @test2(float %x) nounwind readnone ssp {
%div = fdiv float %x, 0x47E0000000000000
ret float %div
; CHECK-LABEL: @test2(
; CHECK-NEXT: fdiv float %x, 0x47E0000000000000
}
define float @test3(float %x) nounwind readnone ssp {
%div = fdiv float %x, 0x36A0000000000000
ret float %div
; CHECK-LABEL: @test3(
; CHECK-NEXT: fdiv float %x, 0x36A0000000000000
}
define float @test4(float %x) nounwind readnone ssp {
%div = fdiv fast float %x, 8.0
ret float %div
; CHECK-LABEL: @test4(
; CHECK-NEXT: fmul fast float %x, 1.250000e-01
}
define float @test5(float %x, float %y, float %z) nounwind readnone ssp {
%div1 = fdiv fast float %x, %y
%div2 = fdiv fast float %div1, %z
ret float %div2
; CHECK-LABEL: @test5(
; CHECK-NEXT: fmul fast
; CHECK-NEXT: fdiv fast
}
define float @test6(float %x, float %y, float %z) nounwind readnone ssp {
%div1 = fdiv fast float %x, %y
%div2 = fdiv fast float %z, %div1
ret float %div2
; CHECK-LABEL: @test6(
; CHECK-NEXT: fmul fast
; CHECK-NEXT: fdiv fast
}