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