[llvm-exegesis] Program should succeed if benchmark returns StringError.
[llvm-core.git] / test / Assembler / fast-math-flags.ll
blob664b1bd271eb585339a4bbcaa0e4a622e13ec4e7
1 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
2 ; RUN: opt -S < %s | FileCheck %s
3 ; RUN: verify-uselistorder %s
5 @addr   = external global i64
6 @select = external global i1
7 @vec    = external global <3 x float>
8 @arr    = external global [3 x float]
10 declare float @foo(float)
12 define float @none(float %x, float %y) {
13 entry:
14 ; CHECK:  %vec = load  <3 x float>,  <3 x float>* @vec
15   %vec    = load  <3 x float>,  <3 x float>* @vec
16 ; CHECK:  %select = load i1, i1* @select
17   %select = load i1, i1* @select
18 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
19   %arr    = load [3 x float], [3 x float]* @arr
21 ; CHECK:  %a = fadd  float %x, %y
22   %a = fadd  float %x, %y
23 ; CHECK:  %a_vec = fadd  <3 x float> %vec, %vec
24   %a_vec = fadd  <3 x float> %vec, %vec
25 ; CHECK:  %b = fsub  float %x, %y
26   %b = fsub  float %x, %y
27 ; CHECK:  %b_vec = fsub  <3 x float> %vec, %vec
28   %b_vec = fsub  <3 x float> %vec, %vec
29 ; CHECK:  %c = fmul  float %x, %y
30   %c = fmul  float %x, %y
31 ; CHECK:  %c_vec = fmul  <3 x float> %vec, %vec
32   %c_vec = fmul  <3 x float> %vec, %vec
33 ; CHECK:  %d = fdiv  float %x, %y
34   %d = fdiv  float %x, %y
35 ; CHECK:  %d_vec = fdiv  <3 x float> %vec, %vec
36   %d_vec = fdiv  <3 x float> %vec, %vec
37 ; CHECK:  %e = frem  float %x, %y
38   %e = frem  float %x, %y
39 ; CHECK:  %e_vec = frem  <3 x float> %vec, %vec
40   %e_vec = frem  <3 x float> %vec, %vec
41 ; CHECK:  ret  float %e
42   ret  float %e
45 ; CHECK: no_nan
46 define float @no_nan(float %x, float %y) {
47 entry:
48 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
49   %vec    = load  <3 x float>,  <3 x float>* @vec
50 ; CHECK:  %select = load i1, i1* @select
51   %select = load i1, i1* @select
52 ; CHECK:  %arr = load  [3 x float],  [3 x float]* @arr
53   %arr    = load  [3 x float],  [3 x float]* @arr
55 ; CHECK:  %a = fadd nnan  float %x, %y
56   %a = fadd nnan  float %x, %y
57 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
58   %a_vec = fadd nnan  <3 x float> %vec, %vec
59 ; CHECK:  %b = fsub nnan  float %x, %y
60   %b = fsub nnan  float %x, %y
61 ; CHECK:  %b_vec = fsub nnan  <3 x float> %vec, %vec
62   %b_vec = fsub nnan  <3 x float> %vec, %vec
63 ; CHECK:  %c = fmul nnan  float %x, %y
64   %c = fmul nnan  float %x, %y
65 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
66   %c_vec = fmul nnan <3 x float> %vec, %vec
67 ; CHECK:  %d = fdiv nnan  float %x, %y
68   %d = fdiv nnan float %x, %y
69 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
70   %d_vec = fdiv nnan <3 x float> %vec, %vec
71 ; CHECK:  %e = frem nnan  float %x, %y
72   %e = frem nnan  float %x, %y
73 ; CHECK:  %e_vec = frem nnan  <3 x float> %vec, %vec
74   %e_vec = frem nnan  <3 x float> %vec, %vec
75 ; CHECK:  ret float %e
76   ret float %e
79 ; CHECK: @contract(
80 define float @contract(float %x, float %y) {
81 entry:
82 ; CHECK: %a = fsub contract float %x, %y
83   %a = fsub contract float %x, %y
84 ; CHECK: %b = fadd contract float %x, %y
85   %b = fadd contract float %x, %y
86 ; CHECK: %c = fmul contract float %a, %b
87   %c = fmul contract float %a, %b
88   ret float %c
91 ; CHECK: @reassoc(
92 define float @reassoc(float %x, float %y) {
93 ; CHECK: %a = fsub reassoc float %x, %y
94   %a = fsub reassoc float %x, %y
95 ; CHECK: %b = fmul reassoc float %x, %y
96   %b = fmul reassoc float %x, %y
97 ; CHECK: %c = call reassoc float @foo(float %b)
98   %c = call reassoc float @foo(float %b)
99   ret float %c
102 ; CHECK: @afn(
103 define float @afn(float %x, float %y) {
104 ; CHECK: %a = fdiv afn float %x, %y
105   %a = fdiv afn float %x, %y
106 ; CHECK: %b = frem afn float %x, %y
107   %b = frem afn float %x, %y
108 ; CHECK: %c = call afn float @foo(float %b)
109   %c = call afn float @foo(float %b)
110   ret float %c
113 ; CHECK: no_nan_inf
114 define float @no_nan_inf(float %x, float %y) {
115 entry:
116 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
117   %vec    = load <3 x float>, <3 x float>* @vec
118 ; CHECK:  %select = load i1, i1* @select
119   %select = load i1, i1* @select
120 ; CHECK:  %arr = load [3 x float], [3 x float]* @arr
121   %arr    = load [3 x float], [3 x float]* @arr
123 ; CHECK:  %a = fadd nnan ninf  float %x, %y
124   %a = fadd ninf nnan  float %x, %y
125 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
126   %a_vec = fadd nnan  <3 x float> %vec, %vec
127 ; CHECK:  %b = fsub nnan  float %x, %y
128   %b = fsub nnan  float %x, %y
129 ; CHECK:  %b_vec = fsub nnan ninf  <3 x float> %vec, %vec
130   %b_vec = fsub ninf nnan  <3 x float> %vec, %vec
131 ; CHECK:  %c = fmul nnan  float %x, %y
132   %c = fmul nnan  float %x, %y
133 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
134   %c_vec = fmul nnan <3 x float> %vec, %vec
135 ; CHECK:  %d = fdiv nnan ninf  float %x, %y
136   %d = fdiv ninf nnan float %x, %y
137 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
138   %d_vec = fdiv nnan <3 x float> %vec, %vec
139 ; CHECK:  %e = frem nnan  float %x, %y
140   %e = frem nnan  float %x, %y
141 ; CHECK:  %e_vec = frem nnan ninf  <3 x float> %vec, %vec
142   %e_vec = frem ninf nnan  <3 x float> %vec, %vec
143 ; CHECK:  ret  float %e
144   ret  float %e
147 ; CHECK: mixed_flags
148 define float @mixed_flags(float %x, float %y) {
149 entry:
150 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
151   %vec    = load <3 x float>, <3 x float>* @vec
152 ; CHECK:  %select = load i1, i1* @select
153   %select = load i1, i1* @select
154 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
155   %arr    = load [3 x float], [3 x float]* @arr
157 ; CHECK:  %a = fadd nnan ninf afn float %x, %y
158   %a = fadd ninf nnan afn float %x, %y
159 ; CHECK:  %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
160   %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
161 ; CHECK:  %b = fsub fast float %x, %y
162   %b = fsub nnan nsz fast float %x, %y
163 ; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
164   %b_vec = fsub nnan <3 x float> %vec, %vec
165 ; CHECK:  %c = fmul fast float %x, %y
166   %c = fmul nsz fast arcp float %x, %y
167 ; CHECK:  %c_vec = fmul nsz <3 x float> %vec, %vec
168   %c_vec = fmul nsz <3 x float> %vec, %vec
169 ; CHECK:  %d = fdiv nnan ninf arcp float %x, %y
170   %d = fdiv arcp ninf nnan float %x, %y
171 ; CHECK:  %d_vec = fdiv fast <3 x float> %vec, %vec
172   %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
173 ; CHECK:  %e = frem nnan nsz float %x, %y
174   %e = frem nnan nsz float %x, %y
175 ; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
176   %e_vec = frem nnan <3 x float> %vec, %vec
177 ; CHECK:  ret  float %e
178   ret  float %e