1
- ; RUN: llc -mtriple=armv8a-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-DP
1
+ ; RUN: llc -mtriple=armv8a-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-DP,CHECK-SP-V8,CHECK-DP-V8
2
2
; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOSP,CHECK-NODP
3
- ; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - -mattr=fp-armv8 | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-DP
4
- ; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - -mattr=fp-armv8sp | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-NODP
3
+ ; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - -mattr=fp-armv8 | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-DP,CHECK-SP-V8,CHECK-DP-V8
4
+ ; RUN: llc -mtriple=thumbv8m.main-none-eabi %s -o - -mattr=fp-armv8sp | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-NODP,CHECK-SP-V8
5
+ ; RUN: llc -mtriple=armv7a-none-eabi %s -o - -mattr=vfp4 | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-DP,CHECK-SP-NOV8,CHECK-DP-NOV8
6
+ ; RUN: llc -mtriple=thumbv7m-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NOSP,CHECK-NODP
7
+ ; RUN: llc -mtriple=thumbv7m-none-eabi %s -o - -mattr=vfp4 | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-DP,CHECK-SP-NOV8,CHECK-DP-NOV8
8
+ ; RUN: llc -mtriple=thumbv7m-none-eabi %s -o - -mattr=vfp4sp | FileCheck %s --check-prefixes=CHECK,CHECK-SP,CHECK-NODP,CHECK-SP-NOV8
5
9
6
10
; Check that constrained fp intrinsics are correctly lowered. In particular
7
11
; check that the valid combinations of single-precision and double-precision
@@ -149,15 +153,17 @@ define float @exp2_f32(float %x) #0 {
149
153
150
154
; CHECK-LABEL: rint_f32:
151
155
; CHECK-NOSP: bl rintf
152
- ; CHECK-SP: vrintx.f32
156
+ ; CHECK-SP-NOV8: bl rintf
157
+ ; CHECK-SP-V8: vrintx.f32
153
158
define float @rint_f32 (float %x ) #0 {
154
159
%val = call float @llvm.experimental.constrained.rint.f32 (float %x , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
155
160
ret float %val
156
161
}
157
162
158
163
; CHECK-LABEL: nearbyint_f32:
159
164
; CHECK-NOSP: bl nearbyintf
160
- ; CHECK-SP: vrintr.f32
165
+ ; CHECK-SP-NOV8: bl nearbyintf
166
+ ; CHECK-SP-V8: vrintr.f32
161
167
define float @nearbyint_f32 (float %x ) #0 {
162
168
%val = call float @llvm.experimental.constrained.nearbyint.f32 (float %x , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
163
169
ret float %val
@@ -179,31 +185,35 @@ define i32 @llrint_f32(float %x) #0 {
179
185
180
186
; CHECK-LABEL: maxnum_f32:
181
187
; CHECK-NOSP: bl fmaxf
182
- ; CHECK-SP: vmaxnm.f32
188
+ ; CHECK-SP-NOV8: bl fmaxf
189
+ ; CHECK-SP-V8: vmaxnm.f32
183
190
define float @maxnum_f32 (float %x , float %y ) #0 {
184
191
%val = call float @llvm.experimental.constrained.maxnum.f32 (float %x , float %y , metadata !"fpexcept.strict" ) #0
185
192
ret float %val
186
193
}
187
194
188
195
; CHECK-LABEL: minnum_f32:
189
196
; CHECK-NOSP: bl fminf
190
- ; CHECK-SP: vminnm.f32
197
+ ; CHECK-SP-NOV8: bl fminf
198
+ ; CHECK-SP-V8: vminnm.f32
191
199
define float @minnum_f32 (float %x , float %y ) #0 {
192
200
%val = call float @llvm.experimental.constrained.minnum.f32 (float %x , float %y , metadata !"fpexcept.strict" ) #0
193
201
ret float %val
194
202
}
195
203
196
204
; CHECK-LABEL: ceil_f32:
197
205
; CHECK-NOSP: bl ceilf
198
- ; CHECK-SP: vrintp.f32
206
+ ; CHECK-SP-NOV8: bl ceilf
207
+ ; CHECK-SP-V8: vrintp.f32
199
208
define float @ceil_f32 (float %x ) #0 {
200
209
%val = call float @llvm.experimental.constrained.ceil.f32 (float %x , metadata !"fpexcept.strict" ) #0
201
210
ret float %val
202
211
}
203
212
204
213
; CHECK-LABEL: floor_f32:
205
214
; CHECK-NOSP: bl floorf
206
- ; CHECK-SP: vrintm.f32
215
+ ; CHECK-SP-NOV8: bl floorf
216
+ ; CHECK-SP-V8: vrintm.f32
207
217
define float @floor_f32 (float %x ) #0 {
208
218
%val = call float @llvm.experimental.constrained.floor.f32 (float %x , metadata !"fpexcept.strict" ) #0
209
219
ret float %val
@@ -225,15 +235,17 @@ define i32 @llround_f32(float %x) #0 {
225
235
226
236
; CHECK-LABEL: round_f32:
227
237
; CHECK-NOSP: bl roundf
228
- ; CHECK-SP: vrinta.f32
238
+ ; CHECK-SP-NOV8: bl roundf
239
+ ; CHECK-SP-V8: vrinta.f32
229
240
define float @round_f32 (float %x ) #0 {
230
241
%val = call float @llvm.experimental.constrained.round.f32 (float %x , metadata !"fpexcept.strict" ) #0
231
242
ret float %val
232
243
}
233
244
234
245
; CHECK-LABEL: trunc_f32:
235
246
; CHECK-NOSP: bl truncf
236
- ; CHECK-SP: vrintz.f32
247
+ ; CHECK-SP-NOV8: bl truncf
248
+ ; CHECK-SP-V8: vrintz.f32
237
249
define float @trunc_f32 (float %x ) #0 {
238
250
%val = call float @llvm.experimental.constrained.trunc.f32 (float %x , metadata !"fpexcept.strict" ) #0
239
251
ret float %val
@@ -598,15 +610,17 @@ define double @exp2_f64(double %x) #0 {
598
610
599
611
; CHECK-LABEL: rint_f64:
600
612
; CHECK-NODP: bl rint
601
- ; CHECK-DP: vrintx.f64
613
+ ; CHECK-DP-NOV8: bl rint
614
+ ; CHECK-DP-V8: vrintx.f64
602
615
define double @rint_f64 (double %x ) #0 {
603
616
%val = call double @llvm.experimental.constrained.rint.f64 (double %x , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
604
617
ret double %val
605
618
}
606
619
607
620
; CHECK-LABEL: nearbyint_f64:
608
621
; CHECK-NODP: bl nearbyint
609
- ; CHECK-DP: vrintr.f64
622
+ ; CHECK-DP-NOV8: bl nearbyint
623
+ ; CHECK-DP-V8: vrintr.f64
610
624
define double @nearbyint_f64 (double %x ) #0 {
611
625
%val = call double @llvm.experimental.constrained.nearbyint.f64 (double %x , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
612
626
ret double %val
@@ -628,31 +642,35 @@ define i32 @llrint_f64(double %x) #0 {
628
642
629
643
; CHECK-LABEL: maxnum_f64:
630
644
; CHECK-NODP: bl fmax
631
- ; CHECK-DP: vmaxnm.f64
645
+ ; CHECK-DP-NOV8: bl fmax
646
+ ; CHECK-DP-V8: vmaxnm.f64
632
647
define double @maxnum_f64 (double %x , double %y ) #0 {
633
648
%val = call double @llvm.experimental.constrained.maxnum.f64 (double %x , double %y , metadata !"fpexcept.strict" ) #0
634
649
ret double %val
635
650
}
636
651
637
652
; CHECK-LABEL: minnum_f64:
638
653
; CHECK-NODP: bl fmin
639
- ; CHECK-DP: vminnm.f64
654
+ ; CHECK-DP-NOV8: bl fmin
655
+ ; CHECK-DP-V8: vminnm.f64
640
656
define double @minnum_f64 (double %x , double %y ) #0 {
641
657
%val = call double @llvm.experimental.constrained.minnum.f64 (double %x , double %y , metadata !"fpexcept.strict" ) #0
642
658
ret double %val
643
659
}
644
660
645
661
; CHECK-LABEL: ceil_f64:
646
662
; CHECK-NODP: bl ceil
647
- ; CHECK-DP: vrintp.f64
663
+ ; CHECK-DP-NOV8: bl ceil
664
+ ; CHECK-DP-V8: vrintp.f64
648
665
define double @ceil_f64 (double %x ) #0 {
649
666
%val = call double @llvm.experimental.constrained.ceil.f64 (double %x , metadata !"fpexcept.strict" ) #0
650
667
ret double %val
651
668
}
652
669
653
670
; CHECK-LABEL: floor_f64:
654
671
; CHECK-NODP: bl floor
655
- ; CHECK-DP: vrintm.f64
672
+ ; CHECK-DP-NOV8: bl floor
673
+ ; CHECK-DP-V8: vrintm.f64
656
674
define double @floor_f64 (double %x ) #0 {
657
675
%val = call double @llvm.experimental.constrained.floor.f64 (double %x , metadata !"fpexcept.strict" ) #0
658
676
ret double %val
@@ -674,15 +692,17 @@ define i32 @llround_f64(double %x) #0 {
674
692
675
693
; CHECK-LABEL: round_f64:
676
694
; CHECK-NODP: bl round
677
- ; CHECK-DP: vrinta.f64
695
+ ; CHECK-DP-NOV8: bl round
696
+ ; CHECK-DP-V8: vrinta.f64
678
697
define double @round_f64 (double %x ) #0 {
679
698
%val = call double @llvm.experimental.constrained.round.f64 (double %x , metadata !"fpexcept.strict" ) #0
680
699
ret double %val
681
700
}
682
701
683
702
; CHECK-LABEL: trunc_f64:
684
703
; CHECK-NODP: bl trunc
685
- ; CHECK-DP: vrintz.f64
704
+ ; CHECK-DP-NOV8: bl trunc
705
+ ; CHECK-DP-V8: vrintz.f64
686
706
define double @trunc_f64 (double %x ) #0 {
687
707
%val = call double @llvm.experimental.constrained.trunc.f64 (double %x , metadata !"fpexcept.strict" ) #0
688
708
ret double %val
0 commit comments