xref: /aosp_15_r20/external/llvm/test/Assembler/fast-math-flags.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llvm-as < %s | llvm-dis | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -S < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker; RUN: verify-uselistorder %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker@addr   = external global i64
6*9880d681SAndroid Build Coastguard Worker@select = external global i1
7*9880d681SAndroid Build Coastguard Worker@vec    = external global <3 x float>
8*9880d681SAndroid Build Coastguard Worker@arr    = external global [3 x float]
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine float @none(float %x, float %y) {
11*9880d681SAndroid Build Coastguard Workerentry:
12*9880d681SAndroid Build Coastguard Worker; CHECK:  %vec = load  <3 x float>,  <3 x float>* @vec
13*9880d681SAndroid Build Coastguard Worker  %vec    = load  <3 x float>,  <3 x float>* @vec
14*9880d681SAndroid Build Coastguard Worker; CHECK:  %select = load i1, i1* @select
15*9880d681SAndroid Build Coastguard Worker  %select = load i1, i1* @select
16*9880d681SAndroid Build Coastguard Worker; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
17*9880d681SAndroid Build Coastguard Worker  %arr    = load [3 x float], [3 x float]* @arr
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; CHECK:  %a = fadd  float %x, %y
20*9880d681SAndroid Build Coastguard Worker  %a = fadd  float %x, %y
21*9880d681SAndroid Build Coastguard Worker; CHECK:  %a_vec = fadd  <3 x float> %vec, %vec
22*9880d681SAndroid Build Coastguard Worker  %a_vec = fadd  <3 x float> %vec, %vec
23*9880d681SAndroid Build Coastguard Worker; CHECK:  %b = fsub  float %x, %y
24*9880d681SAndroid Build Coastguard Worker  %b = fsub  float %x, %y
25*9880d681SAndroid Build Coastguard Worker; CHECK:  %b_vec = fsub  <3 x float> %vec, %vec
26*9880d681SAndroid Build Coastguard Worker  %b_vec = fsub  <3 x float> %vec, %vec
27*9880d681SAndroid Build Coastguard Worker; CHECK:  %c = fmul  float %x, %y
28*9880d681SAndroid Build Coastguard Worker  %c = fmul  float %x, %y
29*9880d681SAndroid Build Coastguard Worker; CHECK:  %c_vec = fmul  <3 x float> %vec, %vec
30*9880d681SAndroid Build Coastguard Worker  %c_vec = fmul  <3 x float> %vec, %vec
31*9880d681SAndroid Build Coastguard Worker; CHECK:  %d = fdiv  float %x, %y
32*9880d681SAndroid Build Coastguard Worker  %d = fdiv  float %x, %y
33*9880d681SAndroid Build Coastguard Worker; CHECK:  %d_vec = fdiv  <3 x float> %vec, %vec
34*9880d681SAndroid Build Coastguard Worker  %d_vec = fdiv  <3 x float> %vec, %vec
35*9880d681SAndroid Build Coastguard Worker; CHECK:  %e = frem  float %x, %y
36*9880d681SAndroid Build Coastguard Worker  %e = frem  float %x, %y
37*9880d681SAndroid Build Coastguard Worker; CHECK:  %e_vec = frem  <3 x float> %vec, %vec
38*9880d681SAndroid Build Coastguard Worker  %e_vec = frem  <3 x float> %vec, %vec
39*9880d681SAndroid Build Coastguard Worker; CHECK:  ret  float %e
40*9880d681SAndroid Build Coastguard Worker  ret  float %e
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker; CHECK: no_nan
44*9880d681SAndroid Build Coastguard Workerdefine float @no_nan(float %x, float %y) {
45*9880d681SAndroid Build Coastguard Workerentry:
46*9880d681SAndroid Build Coastguard Worker; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
47*9880d681SAndroid Build Coastguard Worker  %vec    = load  <3 x float>,  <3 x float>* @vec
48*9880d681SAndroid Build Coastguard Worker; CHECK:  %select = load i1, i1* @select
49*9880d681SAndroid Build Coastguard Worker  %select = load i1, i1* @select
50*9880d681SAndroid Build Coastguard Worker; CHECK:  %arr = load  [3 x float],  [3 x float]* @arr
51*9880d681SAndroid Build Coastguard Worker  %arr    = load  [3 x float],  [3 x float]* @arr
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK:  %a = fadd nnan  float %x, %y
54*9880d681SAndroid Build Coastguard Worker  %a = fadd nnan  float %x, %y
55*9880d681SAndroid Build Coastguard Worker; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
56*9880d681SAndroid Build Coastguard Worker  %a_vec = fadd nnan  <3 x float> %vec, %vec
57*9880d681SAndroid Build Coastguard Worker; CHECK:  %b = fsub nnan  float %x, %y
58*9880d681SAndroid Build Coastguard Worker  %b = fsub nnan  float %x, %y
59*9880d681SAndroid Build Coastguard Worker; CHECK:  %b_vec = fsub nnan  <3 x float> %vec, %vec
60*9880d681SAndroid Build Coastguard Worker  %b_vec = fsub nnan  <3 x float> %vec, %vec
61*9880d681SAndroid Build Coastguard Worker; CHECK:  %c = fmul nnan  float %x, %y
62*9880d681SAndroid Build Coastguard Worker  %c = fmul nnan  float %x, %y
63*9880d681SAndroid Build Coastguard Worker; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
64*9880d681SAndroid Build Coastguard Worker  %c_vec = fmul nnan <3 x float> %vec, %vec
65*9880d681SAndroid Build Coastguard Worker; CHECK:  %d = fdiv nnan  float %x, %y
66*9880d681SAndroid Build Coastguard Worker  %d = fdiv nnan float %x, %y
67*9880d681SAndroid Build Coastguard Worker; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
68*9880d681SAndroid Build Coastguard Worker  %d_vec = fdiv nnan <3 x float> %vec, %vec
69*9880d681SAndroid Build Coastguard Worker; CHECK:  %e = frem nnan  float %x, %y
70*9880d681SAndroid Build Coastguard Worker  %e = frem nnan  float %x, %y
71*9880d681SAndroid Build Coastguard Worker; CHECK:  %e_vec = frem nnan  <3 x float> %vec, %vec
72*9880d681SAndroid Build Coastguard Worker  %e_vec = frem nnan  <3 x float> %vec, %vec
73*9880d681SAndroid Build Coastguard Worker; CHECK:  ret float %e
74*9880d681SAndroid Build Coastguard Worker  ret float %e
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; CHECK: no_nan_inf
78*9880d681SAndroid Build Coastguard Workerdefine float @no_nan_inf(float %x, float %y) {
79*9880d681SAndroid Build Coastguard Workerentry:
80*9880d681SAndroid Build Coastguard Worker; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
81*9880d681SAndroid Build Coastguard Worker  %vec    = load <3 x float>, <3 x float>* @vec
82*9880d681SAndroid Build Coastguard Worker; CHECK:  %select = load i1, i1* @select
83*9880d681SAndroid Build Coastguard Worker  %select = load i1, i1* @select
84*9880d681SAndroid Build Coastguard Worker; CHECK:  %arr = load [3 x float], [3 x float]* @arr
85*9880d681SAndroid Build Coastguard Worker  %arr    = load [3 x float], [3 x float]* @arr
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; CHECK:  %a = fadd nnan ninf  float %x, %y
88*9880d681SAndroid Build Coastguard Worker  %a = fadd ninf nnan  float %x, %y
89*9880d681SAndroid Build Coastguard Worker; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
90*9880d681SAndroid Build Coastguard Worker  %a_vec = fadd nnan  <3 x float> %vec, %vec
91*9880d681SAndroid Build Coastguard Worker; CHECK:  %b = fsub nnan  float %x, %y
92*9880d681SAndroid Build Coastguard Worker  %b = fsub nnan  float %x, %y
93*9880d681SAndroid Build Coastguard Worker; CHECK:  %b_vec = fsub nnan ninf  <3 x float> %vec, %vec
94*9880d681SAndroid Build Coastguard Worker  %b_vec = fsub ninf nnan  <3 x float> %vec, %vec
95*9880d681SAndroid Build Coastguard Worker; CHECK:  %c = fmul nnan  float %x, %y
96*9880d681SAndroid Build Coastguard Worker  %c = fmul nnan  float %x, %y
97*9880d681SAndroid Build Coastguard Worker; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
98*9880d681SAndroid Build Coastguard Worker  %c_vec = fmul nnan <3 x float> %vec, %vec
99*9880d681SAndroid Build Coastguard Worker; CHECK:  %d = fdiv nnan ninf  float %x, %y
100*9880d681SAndroid Build Coastguard Worker  %d = fdiv ninf nnan float %x, %y
101*9880d681SAndroid Build Coastguard Worker; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
102*9880d681SAndroid Build Coastguard Worker  %d_vec = fdiv nnan <3 x float> %vec, %vec
103*9880d681SAndroid Build Coastguard Worker; CHECK:  %e = frem nnan  float %x, %y
104*9880d681SAndroid Build Coastguard Worker  %e = frem nnan  float %x, %y
105*9880d681SAndroid Build Coastguard Worker; CHECK:  %e_vec = frem nnan ninf  <3 x float> %vec, %vec
106*9880d681SAndroid Build Coastguard Worker  %e_vec = frem ninf nnan  <3 x float> %vec, %vec
107*9880d681SAndroid Build Coastguard Worker; CHECK:  ret  float %e
108*9880d681SAndroid Build Coastguard Worker  ret  float %e
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; CHECK: mixed_flags
112*9880d681SAndroid Build Coastguard Workerdefine float @mixed_flags(float %x, float %y) {
113*9880d681SAndroid Build Coastguard Workerentry:
114*9880d681SAndroid Build Coastguard Worker; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
115*9880d681SAndroid Build Coastguard Worker  %vec    = load <3 x float>, <3 x float>* @vec
116*9880d681SAndroid Build Coastguard Worker; CHECK:  %select = load i1, i1* @select
117*9880d681SAndroid Build Coastguard Worker  %select = load i1, i1* @select
118*9880d681SAndroid Build Coastguard Worker; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
119*9880d681SAndroid Build Coastguard Worker  %arr    = load [3 x float], [3 x float]* @arr
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker; CHECK:  %a = fadd nnan ninf float %x, %y
122*9880d681SAndroid Build Coastguard Worker  %a = fadd ninf nnan float %x, %y
123*9880d681SAndroid Build Coastguard Worker; CHECK:  %a_vec = fadd nnan <3 x float> %vec, %vec
124*9880d681SAndroid Build Coastguard Worker  %a_vec = fadd nnan <3 x float> %vec, %vec
125*9880d681SAndroid Build Coastguard Worker; CHECK:  %b = fsub fast float %x, %y
126*9880d681SAndroid Build Coastguard Worker  %b = fsub nnan nsz fast float %x, %y
127*9880d681SAndroid Build Coastguard Worker; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
128*9880d681SAndroid Build Coastguard Worker  %b_vec = fsub nnan <3 x float> %vec, %vec
129*9880d681SAndroid Build Coastguard Worker; CHECK:  %c = fmul fast float %x, %y
130*9880d681SAndroid Build Coastguard Worker  %c = fmul nsz fast arcp float %x, %y
131*9880d681SAndroid Build Coastguard Worker; CHECK:  %c_vec = fmul nsz <3 x float> %vec, %vec
132*9880d681SAndroid Build Coastguard Worker  %c_vec = fmul nsz <3 x float> %vec, %vec
133*9880d681SAndroid Build Coastguard Worker; CHECK:  %d = fdiv nnan ninf arcp float %x, %y
134*9880d681SAndroid Build Coastguard Worker  %d = fdiv arcp ninf nnan float %x, %y
135*9880d681SAndroid Build Coastguard Worker; CHECK:  %d_vec = fdiv fast <3 x float> %vec, %vec
136*9880d681SAndroid Build Coastguard Worker  %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
137*9880d681SAndroid Build Coastguard Worker; CHECK:  %e = frem nnan nsz float %x, %y
138*9880d681SAndroid Build Coastguard Worker  %e = frem nnan nsz float %x, %y
139*9880d681SAndroid Build Coastguard Worker; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
140*9880d681SAndroid Build Coastguard Worker  %e_vec = frem nnan <3 x float> %vec, %vec
141*9880d681SAndroid Build Coastguard Worker; CHECK:  ret  float %e
142*9880d681SAndroid Build Coastguard Worker  ret  float %e
143*9880d681SAndroid Build Coastguard Worker}
144