blob: 9c2034041a11499f97408c9ccea816a1460f2b5d [file] [log] [blame]
Sanjay Patel43f71ea2018-03-15 14:48:39 +00001; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instsimplify -S | FileCheck %s
3
4define float @fadd_nan_op0(float %x) {
5; CHECK-LABEL: @fadd_nan_op0(
6; CHECK-NEXT: [[R:%.*]] = fadd float 0x7FF8000000000000, [[X:%.*]]
7; CHECK-NEXT: ret float [[R]]
8;
9 %r = fadd float 0x7FF8000000000000, %x
10 ret float %r
11}
12
13define float @fadd_nan_op1(float %x) {
14; CHECK-LABEL: @fadd_nan_op1(
15; CHECK-NEXT: [[R:%.*]] = fadd float [[X:%.*]], 0x7FF8000000000000
16; CHECK-NEXT: ret float [[R]]
17;
18 %r = fadd float %x, 0x7FF8000000000000
19 ret float %r
20}
21
22define float @fsub_nan_op0(float %x) {
23; CHECK-LABEL: @fsub_nan_op0(
24; CHECK-NEXT: [[R:%.*]] = fsub float 0x7FF8000000000000, [[X:%.*]]
25; CHECK-NEXT: ret float [[R]]
26;
27 %r = fsub float 0x7FF8000000000000, %x
28 ret float %r
29}
30
31define float @fsub_nan_op1(float %x) {
32; CHECK-LABEL: @fsub_nan_op1(
33; CHECK-NEXT: [[R:%.*]] = fsub float [[X:%.*]], 0x7FF8000000000000
34; CHECK-NEXT: ret float [[R]]
35;
36 %r = fsub float %x, 0x7FF8000000000000
37 ret float %r
38}
39
40define float @fmul_nan_op0(float %x) {
41; CHECK-LABEL: @fmul_nan_op0(
42; CHECK-NEXT: [[R:%.*]] = fmul float 0x7FF8000000000000, [[X:%.*]]
43; CHECK-NEXT: ret float [[R]]
44;
45 %r = fmul float 0x7FF8000000000000, %x
46 ret float %r
47}
48
49define float @fmul_nan_op1(float %x) {
50; CHECK-LABEL: @fmul_nan_op1(
51; CHECK-NEXT: [[R:%.*]] = fmul float [[X:%.*]], 0x7FF8000000000000
52; CHECK-NEXT: ret float [[R]]
53;
54 %r = fmul float %x, 0x7FF8000000000000
55 ret float %r
56}
57
58define float @fdiv_nan_op0(float %x) {
59; CHECK-LABEL: @fdiv_nan_op0(
60; CHECK-NEXT: [[R:%.*]] = fdiv float 0x7FF8000000000000, [[X:%.*]]
61; CHECK-NEXT: ret float [[R]]
62;
63 %r = fdiv float 0x7FF8000000000000, %x
64 ret float %r
65}
66
67define float @fdiv_nan_op1(float %x) {
68; CHECK-LABEL: @fdiv_nan_op1(
69; CHECK-NEXT: [[R:%.*]] = fdiv float [[X:%.*]], 0x7FF8000000000000
70; CHECK-NEXT: ret float [[R]]
71;
72 %r = fdiv float %x, 0x7FF8000000000000
73 ret float %r
74}
75
76define float @frem_nan_op0(float %x) {
77; CHECK-LABEL: @frem_nan_op0(
78; CHECK-NEXT: [[R:%.*]] = frem float 0x7FF8000000000000, [[X:%.*]]
79; CHECK-NEXT: ret float [[R]]
80;
81 %r = frem float 0x7FF8000000000000, %x
82 ret float %r
83}
84
85define float @frem_nan_op1(float %x) {
86; CHECK-LABEL: @frem_nan_op1(
87; CHECK-NEXT: [[R:%.*]] = frem float [[X:%.*]], 0x7FF8000000000000
88; CHECK-NEXT: ret float [[R]]
89;
90 %r = frem float %x, 0x7FF8000000000000
91 ret float %r
92}
93
94; Repeat all tests with fast-math-flags. Alternate 'nnan' and 'fast' for more coverage.
95
96define float @fadd_nan_op0_nnan(float %x) {
97; CHECK-LABEL: @fadd_nan_op0_nnan(
98; CHECK-NEXT: [[R:%.*]] = fadd nnan float 0x7FF8000000000000, [[X:%.*]]
99; CHECK-NEXT: ret float [[R]]
100;
101 %r = fadd nnan float 0x7FF8000000000000, %x
102 ret float %r
103}
104
105define float @fadd_nan_op1_fast(float %x) {
106; CHECK-LABEL: @fadd_nan_op1_fast(
107; CHECK-NEXT: [[R:%.*]] = fadd fast float [[X:%.*]], 0x7FF8000000000000
108; CHECK-NEXT: ret float [[R]]
109;
110 %r = fadd fast float %x, 0x7FF8000000000000
111 ret float %r
112}
113
114define float @fsub_nan_op0_fast(float %x) {
115; CHECK-LABEL: @fsub_nan_op0_fast(
116; CHECK-NEXT: [[R:%.*]] = fsub fast float 0x7FF8000000000000, [[X:%.*]]
117; CHECK-NEXT: ret float [[R]]
118;
119 %r = fsub fast float 0x7FF8000000000000, %x
120 ret float %r
121}
122
123define float @fsub_nan_op1_nnan(float %x) {
124; CHECK-LABEL: @fsub_nan_op1_nnan(
125; CHECK-NEXT: [[R:%.*]] = fsub nnan float [[X:%.*]], 0x7FF8000000000000
126; CHECK-NEXT: ret float [[R]]
127;
128 %r = fsub nnan float %x, 0x7FF8000000000000
129 ret float %r
130}
131
132define float @fmul_nan_op0_nnan(float %x) {
133; CHECK-LABEL: @fmul_nan_op0_nnan(
134; CHECK-NEXT: [[R:%.*]] = fmul nnan float 0x7FF8000000000000, [[X:%.*]]
135; CHECK-NEXT: ret float [[R]]
136;
137 %r = fmul nnan float 0x7FF8000000000000, %x
138 ret float %r
139}
140
141define float @fmul_nan_op1_fast(float %x) {
142; CHECK-LABEL: @fmul_nan_op1_fast(
143; CHECK-NEXT: [[R:%.*]] = fmul fast float [[X:%.*]], 0x7FF8000000000000
144; CHECK-NEXT: ret float [[R]]
145;
146 %r = fmul fast float %x, 0x7FF8000000000000
147 ret float %r
148}
149
150define float @fdiv_nan_op0_fast(float %x) {
151; CHECK-LABEL: @fdiv_nan_op0_fast(
152; CHECK-NEXT: [[R:%.*]] = fdiv fast float 0x7FF8000000000000, [[X:%.*]]
153; CHECK-NEXT: ret float [[R]]
154;
155 %r = fdiv fast float 0x7FF8000000000000, %x
156 ret float %r
157}
158
159define float @fdiv_nan_op1_nnan(float %x) {
160; CHECK-LABEL: @fdiv_nan_op1_nnan(
161; CHECK-NEXT: [[R:%.*]] = fdiv nnan float [[X:%.*]], 0x7FF8000000000000
162; CHECK-NEXT: ret float [[R]]
163;
164 %r = fdiv nnan float %x, 0x7FF8000000000000
165 ret float %r
166}
167
168define float @frem_nan_op0_nnan(float %x) {
169; CHECK-LABEL: @frem_nan_op0_nnan(
170; CHECK-NEXT: [[R:%.*]] = frem nnan float 0x7FF8000000000000, [[X:%.*]]
171; CHECK-NEXT: ret float [[R]]
172;
173 %r = frem nnan float 0x7FF8000000000000, %x
174 ret float %r
175}
176
177define float @frem_nan_op1_fast(float %x) {
178; CHECK-LABEL: @frem_nan_op1_fast(
179; CHECK-NEXT: [[R:%.*]] = frem fast float [[X:%.*]], 0x7FF8000000000000
180; CHECK-NEXT: ret float [[R]]
181;
182 %r = frem fast float %x, 0x7FF8000000000000
183 ret float %r
184}
185