@@ -87,3 +87,202 @@ define void @pow_poison(i16 %arg_int,float %arg_flt, ptr %P) {
8787
8888 ret void
8989}
90+
91+ define void @sin_poison (ptr %P ) {
92+ ; CHECK-LABEL: @sin_poison(
93+ ; CHECK-NEXT: store volatile float poison, ptr [[P:%.*]], align 4
94+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
95+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
96+ ; CHECK-NEXT: store volatile float poison, ptr [[P]], align 4
97+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
98+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
99+ ; CHECK-NEXT: ret void
100+ ;
101+ %sin_f32 = call float @llvm.sin (float poison)
102+ store volatile float %sin_f32 , ptr %P
103+
104+ %sin_2xf32 = call <2 x float > @llvm.sin (<2 x float > poison)
105+ store volatile <2 x float > %sin_2xf32 , ptr %P
106+
107+ %sin_4xf64 = call <4 x double > @llvm.sin (<4 x double > poison)
108+ store volatile <4 x double > %sin_4xf64 , ptr %P
109+
110+ %asin_f32 = call float @llvm.asin (float poison)
111+ store volatile float %asin_f32 , ptr %P
112+
113+ %asin_2xf32 = call <2 x float > @llvm.asin (<2 x float > poison)
114+ store volatile <2 x float > %asin_2xf32 , ptr %P
115+
116+ %asin_4xf64 = call <4 x double > @llvm.asin (<4 x double > poison)
117+ store volatile <4 x double > %asin_4xf64 , ptr %P
118+
119+ ret void
120+ }
121+
122+
123+ define void @cos_poison (ptr %P ) {
124+ ; CHECK-LABEL: @cos_poison(
125+ ; CHECK-NEXT: store volatile float poison, ptr [[P:%.*]], align 4
126+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
127+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
128+ ; CHECK-NEXT: store volatile float poison, ptr [[P]], align 4
129+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
130+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
131+ ; CHECK-NEXT: ret void
132+ ;
133+ %cos_f32 = call float @llvm.cos (float poison)
134+ store volatile float %cos_f32 , ptr %P
135+
136+ %cos_2xf32 = call <2 x float > @llvm.cos (<2 x float > poison)
137+ store volatile <2 x float > %cos_2xf32 , ptr %P
138+
139+ %cos_4xf64 = call <4 x double > @llvm.cos (<4 x double > poison)
140+ store volatile <4 x double > %cos_4xf64 , ptr %P
141+
142+ %acos_f32 = call float @llvm.acos (float poison)
143+ store volatile float %acos_f32 , ptr %P
144+
145+ %acos_2xf32 = call <2 x float > @llvm.acos (<2 x float > poison)
146+ store volatile <2 x float > %acos_2xf32 , ptr %P
147+
148+ %acos_4xf64 = call <4 x double > @llvm.acos (<4 x double > poison)
149+ store volatile <4 x double > %acos_4xf64 , ptr %P
150+
151+ ret void
152+ }
153+
154+
155+ define void @tan_poison (ptr %P ) {
156+ ; CHECK-LABEL: @tan_poison(
157+ ; CHECK-NEXT: store volatile float poison, ptr [[P:%.*]], align 4
158+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
159+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
160+ ; CHECK-NEXT: store volatile float poison, ptr [[P]], align 4
161+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
162+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
163+ ; CHECK-NEXT: store volatile float poison, ptr [[P]], align 4
164+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
165+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
166+ ; CHECK-NEXT: ret void
167+ ;
168+ %tan_f32 = call float @llvm.tan (float poison)
169+ store volatile float %tan_f32 , ptr %P
170+
171+ %tan_2xf32 = call <2 x float > @llvm.tan (<2 x float > poison)
172+ store volatile <2 x float > %tan_2xf32 , ptr %P
173+
174+ %tan_4xf64 = call <4 x double > @llvm.tan (<4 x double > poison)
175+ store volatile <4 x double > %tan_4xf64 , ptr %P
176+
177+ %atan_f32 = call float @llvm.atan (float poison)
178+ store volatile float %atan_f32 , ptr %P
179+
180+ %atan_2xf32 = call <2 x float > @llvm.atan (<2 x float > poison)
181+ store volatile <2 x float > %atan_2xf32 , ptr %P
182+
183+ %atan_4xf64 = call <4 x double > @llvm.atan (<4 x double > poison)
184+ store volatile <4 x double > %atan_4xf64 , ptr %P
185+
186+ %atan2_f32 = call float @llvm.atan2 (float poison, float poison)
187+ store volatile float %atan2_f32 , ptr %P
188+
189+ %atan2_2xf32 = call <2 x float > @llvm.atan2 (<2 x float > poison, <2 x float > poison)
190+ store volatile <2 x float > %atan2_2xf32 , ptr %P
191+
192+ %atan2_4xf64 = call <4 x double > @llvm.atan2 (<4 x double > poison, <4 x double > poison)
193+ store volatile <4 x double > %atan2_4xf64 , ptr %P
194+
195+ ret void
196+ }
197+
198+
199+ define void @sincos_poison (ptr %P ) {
200+ ; CHECK-LABEL: @sincos_poison(
201+ ; CHECK-NEXT: store volatile { float, float } poison, ptr [[P:%.*]], align 4
202+ ; CHECK-NEXT: store volatile { <2 x float>, <2 x float> } poison, ptr [[P]], align 8
203+ ; CHECK-NEXT: store volatile { <4 x double>, <4 x double> } poison, ptr [[P]], align 32
204+ ; CHECK-NEXT: store volatile { float, float } poison, ptr [[P]], align 4
205+ ; CHECK-NEXT: store volatile { <2 x float>, <2 x float> } poison, ptr [[P]], align 8
206+ ; CHECK-NEXT: store volatile { <4 x double>, <4 x double> } poison, ptr [[P]], align 32
207+ ; CHECK-NEXT: ret void
208+ ;
209+ %sincos_f32 = call { float , float } @llvm.sincos (float poison)
210+ store volatile { float , float } %sincos_f32 , ptr %P
211+
212+ %sincos_2xf32 = call { <2 x float >, <2 x float > } @llvm.sincos (<2 x float > poison)
213+ store volatile { <2 x float >, <2 x float > } %sincos_2xf32 , ptr %P
214+
215+ %sincos_4xf64 = call { <4 x double >, <4 x double > } @llvm.sincos (<4 x double > poison)
216+ store volatile { <4 x double >, <4 x double > } %sincos_4xf64 , ptr %P
217+
218+ %sincospi_f32 = call { float , float } @llvm.sincospi (float poison)
219+ store volatile { float , float } %sincospi_f32 , ptr %P
220+
221+ %sincospi_2xf32 = call { <2 x float >, <2 x float > } @llvm.sincospi (<2 x float > poison)
222+ store volatile { <2 x float >, <2 x float > } %sincospi_2xf32 , ptr %P
223+
224+ %sincospi_4xf64 = call { <4 x double >, <4 x double > } @llvm.sincospi (<4 x double > poison)
225+ store volatile { <4 x double >, <4 x double > } %sincospi_4xf64 , ptr %P
226+
227+ ret void
228+ }
229+
230+
231+ define void @sinh_poison (ptr %P ) {
232+ ; CHECK-LABEL: @sinh_poison(
233+ ; CHECK-NEXT: store volatile float poison, ptr [[P:%.*]], align 4
234+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
235+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
236+ ; CHECK-NEXT: ret void
237+ ;
238+ %sinh_f32 = call float @llvm.sinh (float poison)
239+ store volatile float %sinh_f32 , ptr %P
240+
241+ %sinh_2xf32 = call <2 x float > @llvm.sinh (<2 x float > poison)
242+ store volatile <2 x float > %sinh_2xf32 , ptr %P
243+
244+ %sinh_4xf64 = call <4 x double > @llvm.sinh (<4 x double > poison)
245+ store volatile <4 x double > %sinh_4xf64 , ptr %P
246+
247+ ret void
248+ }
249+
250+
251+ define void @cosh_poison (ptr %P ) {
252+ ; CHECK-LABEL: @cosh_poison(
253+ ; CHECK-NEXT: store volatile float poison, ptr [[P:%.*]], align 4
254+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
255+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
256+ ; CHECK-NEXT: ret void
257+ ;
258+ %cosh_f32 = call float @llvm.cosh (float poison)
259+ store volatile float %cosh_f32 , ptr %P
260+
261+ %cosh_2xf32 = call <2 x float > @llvm.cosh (<2 x float > poison)
262+ store volatile <2 x float > %cosh_2xf32 , ptr %P
263+
264+ %cosh_4xf64 = call <4 x double > @llvm.cosh (<4 x double > poison)
265+ store volatile <4 x double > %cosh_4xf64 , ptr %P
266+
267+ ret void
268+ }
269+
270+
271+ define void @tanh_poison (ptr %P ) {
272+ ; CHECK-LABEL: @tanh_poison(
273+ ; CHECK-NEXT: store volatile float poison, ptr [[P:%.*]], align 4
274+ ; CHECK-NEXT: store volatile <2 x float> poison, ptr [[P]], align 8
275+ ; CHECK-NEXT: store volatile <4 x double> poison, ptr [[P]], align 32
276+ ; CHECK-NEXT: ret void
277+ ;
278+ %tanh_f32 = call float @llvm.tanh (float poison)
279+ store volatile float %tanh_f32 , ptr %P
280+
281+ %tanh_2xf32 = call <2 x float > @llvm.tanh (<2 x float > poison)
282+ store volatile <2 x float > %tanh_2xf32 , ptr %P
283+
284+ %tanh_4xf64 = call <4 x double > @llvm.tanh (<4 x double > poison)
285+ store volatile <4 x double > %tanh_4xf64 , ptr %P
286+
287+ ret void
288+ }
0 commit comments