I Added a triple flag for x86-evenDirective test.
[oota-llvm.git] / test / Assembler / fast-math-flags.ll
1 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
2 ; RUN: opt -S < %s | FileCheck %s
3 ; RUN: verify-uselistorder %s
4
5 @addr   = external global i64
6 @select = external global i1
7 @vec    = external global <3 x float>
8 @arr    = external global [3 x float]
9
10 define float @none(float %x, float %y) {
11 entry:
12 ; CHECK:  %vec = load  <3 x float>,  <3 x float>* @vec
13   %vec    = load  <3 x float>,  <3 x float>* @vec
14 ; CHECK:  %select = load i1, i1* @select
15   %select = load i1, i1* @select
16 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
17   %arr    = load [3 x float], [3 x float]* @arr
18
19 ; CHECK:  %a = fadd  float %x, %y
20   %a = fadd  float %x, %y
21 ; CHECK:  %a_vec = fadd  <3 x float> %vec, %vec
22   %a_vec = fadd  <3 x float> %vec, %vec
23 ; CHECK:  %b = fsub  float %x, %y
24   %b = fsub  float %x, %y
25 ; CHECK:  %b_vec = fsub  <3 x float> %vec, %vec
26   %b_vec = fsub  <3 x float> %vec, %vec
27 ; CHECK:  %c = fmul  float %x, %y
28   %c = fmul  float %x, %y
29 ; CHECK:  %c_vec = fmul  <3 x float> %vec, %vec
30   %c_vec = fmul  <3 x float> %vec, %vec
31 ; CHECK:  %d = fdiv  float %x, %y
32   %d = fdiv  float %x, %y
33 ; CHECK:  %d_vec = fdiv  <3 x float> %vec, %vec
34   %d_vec = fdiv  <3 x float> %vec, %vec
35 ; CHECK:  %e = frem  float %x, %y
36   %e = frem  float %x, %y
37 ; CHECK:  %e_vec = frem  <3 x float> %vec, %vec
38   %e_vec = frem  <3 x float> %vec, %vec
39 ; CHECK:  ret  float %e
40   ret  float %e
41 }
42
43 ; CHECK: no_nan
44 define float @no_nan(float %x, float %y) {
45 entry:
46 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
47   %vec    = load  <3 x float>,  <3 x float>* @vec
48 ; CHECK:  %select = load i1, i1* @select
49   %select = load i1, i1* @select
50 ; CHECK:  %arr = load  [3 x float],  [3 x float]* @arr
51   %arr    = load  [3 x float],  [3 x float]* @arr
52
53 ; CHECK:  %a = fadd nnan  float %x, %y
54   %a = fadd nnan  float %x, %y
55 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
56   %a_vec = fadd nnan  <3 x float> %vec, %vec
57 ; CHECK:  %b = fsub nnan  float %x, %y
58   %b = fsub nnan  float %x, %y
59 ; CHECK:  %b_vec = fsub nnan  <3 x float> %vec, %vec
60   %b_vec = fsub nnan  <3 x float> %vec, %vec
61 ; CHECK:  %c = fmul nnan  float %x, %y
62   %c = fmul nnan  float %x, %y
63 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
64   %c_vec = fmul nnan <3 x float> %vec, %vec
65 ; CHECK:  %d = fdiv nnan  float %x, %y
66   %d = fdiv nnan float %x, %y
67 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
68   %d_vec = fdiv nnan <3 x float> %vec, %vec
69 ; CHECK:  %e = frem nnan  float %x, %y
70   %e = frem nnan  float %x, %y
71 ; CHECK:  %e_vec = frem nnan  <3 x float> %vec, %vec
72   %e_vec = frem nnan  <3 x float> %vec, %vec
73 ; CHECK:  ret float %e
74   ret float %e
75 }
76
77 ; CHECK: no_nan_inf
78 define float @no_nan_inf(float %x, float %y) {
79 entry:
80 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
81   %vec    = load <3 x float>, <3 x float>* @vec
82 ; CHECK:  %select = load i1, i1* @select
83   %select = load i1, i1* @select
84 ; CHECK:  %arr = load [3 x float], [3 x float]* @arr
85   %arr    = load [3 x float], [3 x float]* @arr
86
87 ; CHECK:  %a = fadd nnan ninf  float %x, %y
88   %a = fadd ninf nnan  float %x, %y
89 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
90   %a_vec = fadd nnan  <3 x float> %vec, %vec
91 ; CHECK:  %b = fsub nnan  float %x, %y
92   %b = fsub nnan  float %x, %y
93 ; CHECK:  %b_vec = fsub nnan ninf  <3 x float> %vec, %vec
94   %b_vec = fsub ninf nnan  <3 x float> %vec, %vec
95 ; CHECK:  %c = fmul nnan  float %x, %y
96   %c = fmul nnan  float %x, %y
97 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
98   %c_vec = fmul nnan <3 x float> %vec, %vec
99 ; CHECK:  %d = fdiv nnan ninf  float %x, %y
100   %d = fdiv ninf nnan float %x, %y
101 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
102   %d_vec = fdiv nnan <3 x float> %vec, %vec
103 ; CHECK:  %e = frem nnan  float %x, %y
104   %e = frem nnan  float %x, %y
105 ; CHECK:  %e_vec = frem nnan ninf  <3 x float> %vec, %vec
106   %e_vec = frem ninf nnan  <3 x float> %vec, %vec
107 ; CHECK:  ret  float %e
108   ret  float %e
109 }
110
111 ; CHECK: mixed_flags
112 define float @mixed_flags(float %x, float %y) {
113 entry:
114 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
115   %vec    = load <3 x float>, <3 x float>* @vec
116 ; CHECK:  %select = load i1, i1* @select
117   %select = load i1, i1* @select
118 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
119   %arr    = load [3 x float], [3 x float]* @arr
120
121 ; CHECK:  %a = fadd nnan ninf float %x, %y
122   %a = fadd ninf nnan float %x, %y
123 ; CHECK:  %a_vec = fadd nnan <3 x float> %vec, %vec
124   %a_vec = fadd nnan <3 x float> %vec, %vec
125 ; CHECK:  %b = fsub fast float %x, %y
126   %b = fsub nnan nsz fast float %x, %y
127 ; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
128   %b_vec = fsub nnan <3 x float> %vec, %vec
129 ; CHECK:  %c = fmul fast float %x, %y
130   %c = fmul nsz fast arcp float %x, %y
131 ; CHECK:  %c_vec = fmul nsz <3 x float> %vec, %vec
132   %c_vec = fmul nsz <3 x float> %vec, %vec
133 ; CHECK:  %d = fdiv nnan ninf arcp float %x, %y
134   %d = fdiv arcp ninf nnan float %x, %y
135 ; CHECK:  %d_vec = fdiv fast <3 x float> %vec, %vec
136   %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
137 ; CHECK:  %e = frem nnan nsz float %x, %y
138   %e = frem nnan nsz float %x, %y
139 ; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
140   %e_vec = frem nnan <3 x float> %vec, %vec
141 ; CHECK:  ret  float %e
142   ret  float %e
143 }