blob: 1af2320f0a108658d90ee21c94e57970a6c9c8f9 [file] [log] [blame]
Cameron McInallyb5216e92018-11-01 16:57:52 +00001; RUN: llvm-as < %s | llvm-dis | FileCheck -strict-whitespace %s
2; RUN: opt -S < %s | FileCheck -strict-whitespace %s
Duncan P. N. Exon Smith13f5c582014-08-19 21:08:27 +00003; RUN: verify-uselistorder %s
Michael Ilsemana52f3ae2012-11-27 00:45:08 +00004
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
Sanjay Patel00e900a2017-11-06 16:27:15 +000010declare float @foo(float)
11
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000012define float @none(float %x, float %y) {
13entry:
Cameron McInallyb5216e92018-11-01 16:57:52 +000014; CHECK: %vec = load <3 x float>, <3 x float>* @vec
15 %vec = load <3 x float>, <3 x float>* @vec
David Blaikie7c9c6ed2015-02-27 21:17:42 +000016; CHECK: %select = load i1, i1* @select
17 %select = load i1, i1* @select
Cameron McInallyb5216e92018-11-01 16:57:52 +000018; CHECK: %arr = load [3 x float], [3 x float]* @arr
David Blaikie7c9c6ed2015-02-27 21:17:42 +000019 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000020
Cameron McInallyb5216e92018-11-01 16:57:52 +000021; 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
Cameron McInallyca8cb682018-11-13 18:15:47 +000041; CHECK: %f = fneg float %x
42 %f = fneg float %x
43; CHECK: %f_vec = fneg <3 x float> %vec
44 %f_vec = fneg <3 x float> %vec
45; CHECK: ret float %f
46 ret float %f
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000047}
48
49; CHECK: no_nan
50define float @no_nan(float %x, float %y) {
51entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +000052; CHECK: %vec = load <3 x float>, <3 x float>* @vec
Cameron McInallyb5216e92018-11-01 16:57:52 +000053 %vec = load <3 x float>, <3 x float>* @vec
David Blaikie7c9c6ed2015-02-27 21:17:42 +000054; CHECK: %select = load i1, i1* @select
55 %select = load i1, i1* @select
Cameron McInallyb5216e92018-11-01 16:57:52 +000056; CHECK: %arr = load [3 x float], [3 x float]* @arr
57 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000058
Cameron McInallyb5216e92018-11-01 16:57:52 +000059; CHECK: %a = fadd nnan float %x, %y
60 %a = fadd nnan float %x, %y
61; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
62 %a_vec = fadd nnan <3 x float> %vec, %vec
63; CHECK: %b = fsub nnan float %x, %y
64 %b = fsub nnan float %x, %y
65; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec
66 %b_vec = fsub nnan <3 x float> %vec, %vec
67; CHECK: %c = fmul nnan float %x, %y
68 %c = fmul nnan float %x, %y
69; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000070 %c_vec = fmul nnan <3 x float> %vec, %vec
Cameron McInallyb5216e92018-11-01 16:57:52 +000071; CHECK: %d = fdiv nnan float %x, %y
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000072 %d = fdiv nnan float %x, %y
Cameron McInallyb5216e92018-11-01 16:57:52 +000073; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000074 %d_vec = fdiv nnan <3 x float> %vec, %vec
Cameron McInallyb5216e92018-11-01 16:57:52 +000075; CHECK: %e = frem nnan float %x, %y
76 %e = frem nnan float %x, %y
77; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec
78 %e_vec = frem nnan <3 x float> %vec, %vec
Cameron McInallyca8cb682018-11-13 18:15:47 +000079; CHECK: %f = fneg nnan float %x
80 %f = fneg nnan float %x
81; CHECK: %f_vec = fneg nnan <3 x float> %vec
82 %f_vec = fneg nnan <3 x float> %vec
83; CHECK: ret float %f
84 ret float %f
Michael Ilsemana52f3ae2012-11-27 00:45:08 +000085}
86
Adam Nemet5c57c112017-03-28 20:11:52 +000087; CHECK: @contract(
88define float @contract(float %x, float %y) {
89entry:
90; CHECK: %a = fsub contract float %x, %y
91 %a = fsub contract float %x, %y
92; CHECK: %b = fadd contract float %x, %y
93 %b = fadd contract float %x, %y
94; CHECK: %c = fmul contract float %a, %b
95 %c = fmul contract float %a, %b
96 ret float %c
97}
98
Sanjay Patel00e900a2017-11-06 16:27:15 +000099; CHECK: @reassoc(
100define float @reassoc(float %x, float %y) {
101; CHECK: %a = fsub reassoc float %x, %y
102 %a = fsub reassoc float %x, %y
103; CHECK: %b = fmul reassoc float %x, %y
104 %b = fmul reassoc float %x, %y
105; CHECK: %c = call reassoc float @foo(float %b)
106 %c = call reassoc float @foo(float %b)
107 ret float %c
108}
109
110; CHECK: @afn(
111define float @afn(float %x, float %y) {
112; CHECK: %a = fdiv afn float %x, %y
113 %a = fdiv afn float %x, %y
114; CHECK: %b = frem afn float %x, %y
115 %b = frem afn float %x, %y
116; CHECK: %c = call afn float @foo(float %b)
117 %c = call afn float @foo(float %b)
118 ret float %c
119}
120
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000121; CHECK: no_nan_inf
122define float @no_nan_inf(float %x, float %y) {
123entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +0000124; CHECK: %vec = load <3 x float>, <3 x float>* @vec
125 %vec = load <3 x float>, <3 x float>* @vec
126; CHECK: %select = load i1, i1* @select
127 %select = load i1, i1* @select
128; CHECK: %arr = load [3 x float], [3 x float]* @arr
129 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000130
Cameron McInallyb5216e92018-11-01 16:57:52 +0000131; CHECK: %a = fadd nnan ninf float %x, %y
132 %a = fadd ninf nnan float %x, %y
133; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
134 %a_vec = fadd nnan <3 x float> %vec, %vec
135; CHECK: %b = fsub nnan float %x, %y
136 %b = fsub nnan float %x, %y
137; CHECK: %b_vec = fsub nnan ninf <3 x float> %vec, %vec
138 %b_vec = fsub ninf nnan <3 x float> %vec, %vec
139; CHECK: %c = fmul nnan float %x, %y
140 %c = fmul nnan float %x, %y
141; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000142 %c_vec = fmul nnan <3 x float> %vec, %vec
Cameron McInallyb5216e92018-11-01 16:57:52 +0000143; CHECK: %d = fdiv nnan ninf float %x, %y
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000144 %d = fdiv ninf nnan float %x, %y
Cameron McInallyb5216e92018-11-01 16:57:52 +0000145; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000146 %d_vec = fdiv nnan <3 x float> %vec, %vec
Cameron McInallyb5216e92018-11-01 16:57:52 +0000147; CHECK: %e = frem nnan float %x, %y
148 %e = frem nnan float %x, %y
149; CHECK: %e_vec = frem nnan ninf <3 x float> %vec, %vec
150 %e_vec = frem ninf nnan <3 x float> %vec, %vec
151; CHECK: ret float %e
152 ret float %e
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000153}
154
155; CHECK: mixed_flags
156define float @mixed_flags(float %x, float %y) {
157entry:
David Blaikie7c9c6ed2015-02-27 21:17:42 +0000158; CHECK: %vec = load <3 x float>, <3 x float>* @vec
159 %vec = load <3 x float>, <3 x float>* @vec
160; CHECK: %select = load i1, i1* @select
161 %select = load i1, i1* @select
Cameron McInallyb5216e92018-11-01 16:57:52 +0000162; CHECK: %arr = load [3 x float], [3 x float]* @arr
David Blaikie7c9c6ed2015-02-27 21:17:42 +0000163 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000164
Sanjay Patel00e900a2017-11-06 16:27:15 +0000165; CHECK: %a = fadd nnan ninf afn float %x, %y
166 %a = fadd ninf nnan afn float %x, %y
167; CHECK: %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
168 %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000169; CHECK: %b = fsub fast float %x, %y
170 %b = fsub nnan nsz fast float %x, %y
171; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec
172 %b_vec = fsub nnan <3 x float> %vec, %vec
173; CHECK: %c = fmul fast float %x, %y
174 %c = fmul nsz fast arcp float %x, %y
175; CHECK: %c_vec = fmul nsz <3 x float> %vec, %vec
176 %c_vec = fmul nsz <3 x float> %vec, %vec
177; CHECK: %d = fdiv nnan ninf arcp float %x, %y
178 %d = fdiv arcp ninf nnan float %x, %y
179; CHECK: %d_vec = fdiv fast <3 x float> %vec, %vec
180 %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
181; CHECK: %e = frem nnan nsz float %x, %y
182 %e = frem nnan nsz float %x, %y
183; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec
184 %e_vec = frem nnan <3 x float> %vec, %vec
Cameron McInallyca8cb682018-11-13 18:15:47 +0000185; CHECK: %f = fneg nnan nsz float %x
186 %f = fneg nnan nsz float %x
187; CHECK: %f_vec = fneg fast <3 x float> %vec
188 %f_vec = fneg fast <3 x float> %vec
189; CHECK: ret float %f
190 ret float %f
Michael Ilsemana52f3ae2012-11-27 00:45:08 +0000191}