[TwoAddressInstructionPass] When looking for a 3 addr conversion after commuting...
[oota-llvm.git] / test / CodeGen / X86 / fdiv.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -enable-unsafe-fp-math | FileCheck %s
2
3 define double @exact(double %x) {
4 ; Exact division by a constant converted to multiplication.
5 ; CHECK-LABEL: exact:
6 ; CHECK:       # BB#0:
7 ; CHECK-NEXT:    mulsd {{.*}}(%rip), %xmm0
8 ; CHECK-NEXT:    retq
9   %div = fdiv double %x, 2.0
10   ret double %div
11 }
12
13 define double @inexact(double %x) {
14 ; Inexact division by a constant converted to multiplication.
15 ; CHECK-LABEL: inexact:
16 ; CHECK:       # BB#0:
17 ; CHECK-NEXT:    mulsd {{.*}}(%rip), %xmm0
18 ; CHECK-NEXT:    retq
19   %div = fdiv double %x, 0x41DFFFFFFFC00000
20   ret double %div
21 }
22
23 define double @funky(double %x) {
24 ; No conversion to multiplication if too funky.
25 ; CHECK-LABEL: funky:
26 ; CHECK:       # BB#0:
27 ; CHECK-NEXT:    xorpd %xmm1, %xmm1
28 ; CHECK-NEXT:    divsd %xmm1, %xmm0
29 ; CHECK-NEXT:    retq
30   %div = fdiv double %x, 0.0
31   ret double %div
32 }
33
34 define double @denormal1(double %x) {
35 ; Don't generate multiplication by a denormal.
36 ; CHECK-LABEL: denormal1:
37 ; CHECK:       # BB#0:
38 ; CHECK-NEXT:    divsd {{.*}}(%rip), %xmm0
39 ; CHECK-NEXT:    retq
40   %div = fdiv double %x, 0x7FD0000000000001
41   ret double %div
42 }
43
44 define double @denormal2(double %x) {
45 ; Don't generate multiplication by a denormal.
46 ; CHECK-LABEL: denormal2:
47 ; CHECK:       # BB#0:
48 ; CHECK-NEXT:    divsd {{.*}}(%rip), %xmm0
49 ; CHECK-NEXT:    retq
50   %div = fdiv double %x, 0x7FEFFFFFFFFFFFFF
51   ret double %div
52 }
53
54 ; Deleting the negates does not require unsafe-fp-math.
55
56 define float @double_negative(float %x, float %y) #0 {
57 ; CHECK-LABEL: double_negative:
58 ; CHECK:       # BB#0:
59 ; CHECK-NEXT:    divss %xmm1, %xmm0
60 ; CHECK-NEXT:    retq
61   %neg1 = fsub float -0.0, %x
62   %neg2 = fsub float -0.0, %y
63   %div = fdiv float %neg1, %neg2
64   ret float %div
65 }
66
67 attributes #0 = { "unsafe-fp-math"="false" }
68