blob: 664b1bd271eb585339a4bbcaa0e4a622e13ec4e7 [file] [log] [blame]
Michael Ilsemanc5377432012-11-27 00:45:08 +00001; RUN: llvm-as < %s | llvm-dis | FileCheck %s
2; RUN: opt -S < %s | FileCheck %s
Duncan P. N. Exon Smithc8eccd12014-08-19 21:08:27 +00003; RUN: verify-uselistorder %s
Michael Ilsemanc5377432012-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 Patel629c4112017-11-06 16:27:15 +000010declare float @foo(float)
11
Michael Ilsemanc5377432012-11-27 00:45:08 +000012define float @none(float %x, float %y) {
13entry:
David Blaikiea79ac142015-02-27 21:17:42 +000014; CHECK: %vec = load <3 x float>, <3 x float>* @vec
15 %vec = load <3 x float>, <3 x float>* @vec
16; CHECK: %select = load i1, i1* @select
17 %select = load i1, i1* @select
18; CHECK: %arr = load [3 x float], [3 x float]* @arr
19 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemanc5377432012-11-27 00:45:08 +000020
21; 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
41; CHECK: ret float %e
42 ret float %e
43}
44
45; CHECK: no_nan
46define float @no_nan(float %x, float %y) {
47entry:
David Blaikiea79ac142015-02-27 21:17:42 +000048; CHECK: %vec = load <3 x float>, <3 x float>* @vec
49 %vec = load <3 x float>, <3 x float>* @vec
50; CHECK: %select = load i1, i1* @select
51 %select = load i1, i1* @select
52; CHECK: %arr = load [3 x float], [3 x float]* @arr
53 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemanc5377432012-11-27 00:45:08 +000054
55; CHECK: %a = fadd nnan float %x, %y
56 %a = fadd nnan float %x, %y
57; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
58 %a_vec = fadd nnan <3 x float> %vec, %vec
59; CHECK: %b = fsub nnan float %x, %y
60 %b = fsub nnan float %x, %y
61; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec
62 %b_vec = fsub nnan <3 x float> %vec, %vec
63; CHECK: %c = fmul nnan float %x, %y
64 %c = fmul nnan float %x, %y
65; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec
66 %c_vec = fmul nnan <3 x float> %vec, %vec
67; CHECK: %d = fdiv nnan float %x, %y
68 %d = fdiv nnan float %x, %y
69; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec
70 %d_vec = fdiv nnan <3 x float> %vec, %vec
71; CHECK: %e = frem nnan float %x, %y
72 %e = frem nnan float %x, %y
73; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec
74 %e_vec = frem nnan <3 x float> %vec, %vec
75; CHECK: ret float %e
76 ret float %e
77}
78
Adam Nemetcd847a82017-03-28 20:11:52 +000079; CHECK: @contract(
80define float @contract(float %x, float %y) {
81entry:
82; CHECK: %a = fsub contract float %x, %y
83 %a = fsub contract float %x, %y
84; CHECK: %b = fadd contract float %x, %y
85 %b = fadd contract float %x, %y
86; CHECK: %c = fmul contract float %a, %b
87 %c = fmul contract float %a, %b
88 ret float %c
89}
90
Sanjay Patel629c4112017-11-06 16:27:15 +000091; CHECK: @reassoc(
92define float @reassoc(float %x, float %y) {
93; CHECK: %a = fsub reassoc float %x, %y
94 %a = fsub reassoc float %x, %y
95; CHECK: %b = fmul reassoc float %x, %y
96 %b = fmul reassoc float %x, %y
97; CHECK: %c = call reassoc float @foo(float %b)
98 %c = call reassoc float @foo(float %b)
99 ret float %c
100}
101
102; CHECK: @afn(
103define float @afn(float %x, float %y) {
104; CHECK: %a = fdiv afn float %x, %y
105 %a = fdiv afn float %x, %y
106; CHECK: %b = frem afn float %x, %y
107 %b = frem afn float %x, %y
108; CHECK: %c = call afn float @foo(float %b)
109 %c = call afn float @foo(float %b)
110 ret float %c
111}
112
Michael Ilsemanc5377432012-11-27 00:45:08 +0000113; CHECK: no_nan_inf
114define float @no_nan_inf(float %x, float %y) {
115entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000116; CHECK: %vec = load <3 x float>, <3 x float>* @vec
117 %vec = load <3 x float>, <3 x float>* @vec
118; CHECK: %select = load i1, i1* @select
119 %select = load i1, i1* @select
120; CHECK: %arr = load [3 x float], [3 x float]* @arr
121 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemanc5377432012-11-27 00:45:08 +0000122
123; CHECK: %a = fadd nnan ninf float %x, %y
124 %a = fadd ninf nnan float %x, %y
125; CHECK: %a_vec = fadd nnan <3 x float> %vec, %vec
126 %a_vec = fadd nnan <3 x float> %vec, %vec
127; CHECK: %b = fsub nnan float %x, %y
128 %b = fsub nnan float %x, %y
129; CHECK: %b_vec = fsub nnan ninf <3 x float> %vec, %vec
130 %b_vec = fsub ninf nnan <3 x float> %vec, %vec
131; CHECK: %c = fmul nnan float %x, %y
132 %c = fmul nnan float %x, %y
133; CHECK: %c_vec = fmul nnan <3 x float> %vec, %vec
134 %c_vec = fmul nnan <3 x float> %vec, %vec
135; CHECK: %d = fdiv nnan ninf float %x, %y
136 %d = fdiv ninf nnan float %x, %y
137; CHECK: %d_vec = fdiv nnan <3 x float> %vec, %vec
138 %d_vec = fdiv nnan <3 x float> %vec, %vec
139; CHECK: %e = frem nnan float %x, %y
140 %e = frem nnan float %x, %y
141; CHECK: %e_vec = frem nnan ninf <3 x float> %vec, %vec
142 %e_vec = frem ninf nnan <3 x float> %vec, %vec
143; CHECK: ret float %e
144 ret float %e
145}
146
147; CHECK: mixed_flags
148define float @mixed_flags(float %x, float %y) {
149entry:
David Blaikiea79ac142015-02-27 21:17:42 +0000150; CHECK: %vec = load <3 x float>, <3 x float>* @vec
151 %vec = load <3 x float>, <3 x float>* @vec
152; CHECK: %select = load i1, i1* @select
153 %select = load i1, i1* @select
154; CHECK: %arr = load [3 x float], [3 x float]* @arr
155 %arr = load [3 x float], [3 x float]* @arr
Michael Ilsemanc5377432012-11-27 00:45:08 +0000156
Sanjay Patel629c4112017-11-06 16:27:15 +0000157; CHECK: %a = fadd nnan ninf afn float %x, %y
158 %a = fadd ninf nnan afn float %x, %y
159; CHECK: %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
160 %a_vec = fadd reassoc nnan <3 x float> %vec, %vec
Michael Ilsemanc5377432012-11-27 00:45:08 +0000161; CHECK: %b = fsub fast float %x, %y
162 %b = fsub nnan nsz fast float %x, %y
163; CHECK: %b_vec = fsub nnan <3 x float> %vec, %vec
164 %b_vec = fsub nnan <3 x float> %vec, %vec
165; CHECK: %c = fmul fast float %x, %y
166 %c = fmul nsz fast arcp float %x, %y
167; CHECK: %c_vec = fmul nsz <3 x float> %vec, %vec
168 %c_vec = fmul nsz <3 x float> %vec, %vec
169; CHECK: %d = fdiv nnan ninf arcp float %x, %y
170 %d = fdiv arcp ninf nnan float %x, %y
171; CHECK: %d_vec = fdiv fast <3 x float> %vec, %vec
172 %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
173; CHECK: %e = frem nnan nsz float %x, %y
174 %e = frem nnan nsz float %x, %y
175; CHECK: %e_vec = frem nnan <3 x float> %vec, %vec
176 %e_vec = frem nnan <3 x float> %vec, %vec
177; CHECK: ret float %e
178 ret float %e
179}