[PowerPC] Eliminate compares - add i32 sext/zext handling for SETULT/SETUGT
[llvm-core.git] / test / Assembler / fast-math-flags.ll
blob4ef3607e1d0067e8a102630ce49edc97845ba773
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) {
11 entry:
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
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
43 ; CHECK: no_nan
44 define float @no_nan(float %x, float %y) {
45 entry:
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
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
77 ; CHECK: @contract(
78 define float @contract(float %x, float %y) {
79 entry:
80 ; CHECK: %a = fsub contract float %x, %y
81   %a = fsub contract float %x, %y
82 ; CHECK: %b = fadd contract float %x, %y
83   %b = fadd contract float %x, %y
84 ; CHECK: %c = fmul contract float %a, %b
85   %c = fmul contract float %a, %b
86   ret float %c
89 ; CHECK: no_nan_inf
90 define float @no_nan_inf(float %x, float %y) {
91 entry:
92 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
93   %vec    = load <3 x float>, <3 x float>* @vec
94 ; CHECK:  %select = load i1, i1* @select
95   %select = load i1, i1* @select
96 ; CHECK:  %arr = load [3 x float], [3 x float]* @arr
97   %arr    = load [3 x float], [3 x float]* @arr
99 ; CHECK:  %a = fadd nnan ninf  float %x, %y
100   %a = fadd ninf nnan  float %x, %y
101 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
102   %a_vec = fadd nnan  <3 x float> %vec, %vec
103 ; CHECK:  %b = fsub nnan  float %x, %y
104   %b = fsub nnan  float %x, %y
105 ; CHECK:  %b_vec = fsub nnan ninf  <3 x float> %vec, %vec
106   %b_vec = fsub ninf nnan  <3 x float> %vec, %vec
107 ; CHECK:  %c = fmul nnan  float %x, %y
108   %c = fmul nnan  float %x, %y
109 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
110   %c_vec = fmul nnan <3 x float> %vec, %vec
111 ; CHECK:  %d = fdiv nnan ninf  float %x, %y
112   %d = fdiv ninf nnan float %x, %y
113 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
114   %d_vec = fdiv nnan <3 x float> %vec, %vec
115 ; CHECK:  %e = frem nnan  float %x, %y
116   %e = frem nnan  float %x, %y
117 ; CHECK:  %e_vec = frem nnan ninf  <3 x float> %vec, %vec
118   %e_vec = frem ninf nnan  <3 x float> %vec, %vec
119 ; CHECK:  ret  float %e
120   ret  float %e
123 ; CHECK: mixed_flags
124 define float @mixed_flags(float %x, float %y) {
125 entry:
126 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
127   %vec    = load <3 x float>, <3 x float>* @vec
128 ; CHECK:  %select = load i1, i1* @select
129   %select = load i1, i1* @select
130 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
131   %arr    = load [3 x float], [3 x float]* @arr
133 ; CHECK:  %a = fadd nnan ninf float %x, %y
134   %a = fadd ninf nnan float %x, %y
135 ; CHECK:  %a_vec = fadd nnan <3 x float> %vec, %vec
136   %a_vec = fadd nnan <3 x float> %vec, %vec
137 ; CHECK:  %b = fsub fast float %x, %y
138   %b = fsub nnan nsz fast float %x, %y
139 ; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
140   %b_vec = fsub nnan <3 x float> %vec, %vec
141 ; CHECK:  %c = fmul fast float %x, %y
142   %c = fmul nsz fast arcp float %x, %y
143 ; CHECK:  %c_vec = fmul nsz <3 x float> %vec, %vec
144   %c_vec = fmul nsz <3 x float> %vec, %vec
145 ; CHECK:  %d = fdiv nnan ninf arcp float %x, %y
146   %d = fdiv arcp ninf nnan float %x, %y
147 ; CHECK:  %d_vec = fdiv fast <3 x float> %vec, %vec
148   %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
149 ; CHECK:  %e = frem nnan nsz float %x, %y
150   %e = frem nnan nsz float %x, %y
151 ; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
152   %e_vec = frem nnan <3 x float> %vec, %vec
153 ; CHECK:  ret  float %e
154   ret  float %e