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
9define float @none(float %x, float %y) {
10entry:
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
43define float @no_nan(float %x, float %y) {
44entry:
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
77define float @no_nan_inf(float %x, float %y) {
78entry:
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
111define float @mixed_flags(float %x, float %y) {
112entry:
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}
143