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
10define float @none(float %x, float %y) {
11entry:
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
44define float @no_nan(float %x, float %y) {
45entry:
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
78define float @no_nan_inf(float %x, float %y) {
79entry:
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
112define float @mixed_flags(float %x, float %y) {
113entry:
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}
144