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 define float @none(float %x, float %y) {
12 ; CHECK: %vec = load <3 x float>* @vec
13 %vec = load <3 x float>* @vec
14 ; CHECK: %select = load i1* @select
15 %select = load i1* @select
16 ; CHECK: %arr = load [3 x float]* @arr
17 %arr = load [3 x float]* @arr
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
44 define float @no_nan(float %x, float %y) {
46 ; CHECK: %vec = load <3 x float>* @vec
47 %vec = load <3 x float>* @vec
48 ; CHECK: %select = load i1* @select
49 %select = load i1* @select
50 ; CHECK: %arr = load [3 x float]* @arr
51 %arr = load [3 x float]* @arr
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
78 define float @no_nan_inf(float %x, float %y) {
80 ; CHECK: %vec = load <3 x float>* @vec
81 %vec = load <3 x float>* @vec
82 ; CHECK: %select = load i1* @select
83 %select = load i1* @select
84 ; CHECK: %arr = load [3 x float]* @arr
85 %arr = load [3 x float]* @arr
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
112 define float @mixed_flags(float %x, float %y) {
114 ; CHECK: %vec = load <3 x float>* @vec
115 %vec = load <3 x float>* @vec
116 ; CHECK: %select = load i1* @select
117 %select = load i1* @select
118 ; CHECK: %arr = load [3 x float]* @arr
119 %arr = load [3 x float]* @arr
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