33; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s -check-prefixes=X64,X64-SDAGISEL
44; RUN: llc < %s -mtriple=i686-linux -fast-isel -fast-isel-abort=1 | FileCheck %s -check-prefixes=X86-FASTISEL
55; RUN: llc < %s -mtriple=x86_64-linux -fast-isel -fast-isel-abort=1 | FileCheck %s -check-prefixes=X64,X64-FASTISEL
6+ ; RUN: llc < %s -mtriple=i686-linux -global-isel -global-isel-abort=1 | FileCheck %s -check-prefixes=X86,X86-GISEL
7+ ; RUN: llc < %s -mtriple=x86_64-linux -global-isel -global-isel-abort=1 | FileCheck %s -check-prefixes=X64,X64-GISEL
68
79; FIXME: We can reuse/delete llvm/test/CodeGen/X86/is_fpclass.ll when all patches are included.
810
@@ -23,6 +25,11 @@ define i1 @isnone_f(float %x) {
2325; X86-FASTISEL-NEXT: fstp %st(0)
2426; X86-FASTISEL-NEXT: xorl %eax, %eax
2527; X86-FASTISEL-NEXT: retl
28+ ;
29+ ; X86-LABEL: isnone_f:
30+ ; X86: # %bb.0: # %entry
31+ ; X86-NEXT: xorl %eax, %eax
32+ ; X86-NEXT: retl
2633entry:
2734 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 0 )
2835 ret i1 %0
@@ -45,6 +52,11 @@ define i1 @isany_f(float %x) {
4552; X86-FASTISEL-NEXT: fstp %st(0)
4653; X86-FASTISEL-NEXT: movb $1, %al
4754; X86-FASTISEL-NEXT: retl
55+ ;
56+ ; X86-LABEL: isany_f:
57+ ; X86: # %bb.0: # %entry
58+ ; X86-NEXT: movb $1, %al
59+ ; X86-NEXT: retl
4860entry:
4961 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1023 )
5062 ret i1 %0
@@ -89,6 +101,17 @@ define i1 @issignaling_f(float %x) {
89101; X86-FASTISEL-NEXT: popl %ecx
90102; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
91103; X86-FASTISEL-NEXT: retl
104+ ;
105+ ; X86-LABEL: issignaling_f:
106+ ; X86: # %bb.0:
107+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
108+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
109+ ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
110+ ; X86-NEXT: setl %cl
111+ ; X86-NEXT: cmpl $2139095041, %eax # imm = 0x7F800001
112+ ; X86-NEXT: setge %al
113+ ; X86-NEXT: andb %cl, %al
114+ ; X86-NEXT: retl
92115 %a0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1 ) ; "snan"
93116 ret i1 %a0
94117}
@@ -123,6 +146,14 @@ define i1 @issignaling_f(float %x) {
123146; X86-FASTISEL-NEXT: popl %ecx
124147; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
125148; X86-FASTISEL-NEXT: retl
149+ ;
150+ ; X86-LABEL: isquiet_f:
151+ ; X86: # %bb.0: # %entry
152+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
153+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
154+ ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
155+ ; X86-NEXT: setge %al
156+ ; X86-NEXT: retl
126157 entry:
127158 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 2 ) ; "qnan"
128159 ret i1 %0
@@ -158,6 +189,14 @@ define i1 @not_isquiet_f(float %x) {
158189; X86-FASTISEL-NEXT: popl %ecx
159190; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
160191; X86-FASTISEL-NEXT: retl
192+ ;
193+ ; X86-LABEL: not_isquiet_f:
194+ ; X86: # %bb.0: # %entry
195+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
196+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
197+ ; X86-NEXT: cmpl $2143289344, %eax # imm = 0x7FC00000
198+ ; X86-NEXT: setl %al
199+ ; X86-NEXT: retl
161200entry:
162201 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1021 ) ; ~"qnan"
163202 ret i1 %0
@@ -193,6 +232,14 @@ define i1 @isinf_f(float %x) {
193232; X86-FASTISEL-NEXT: popl %ecx
194233; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
195234; X86-FASTISEL-NEXT: retl
235+ ;
236+ ; X86-LABEL: isinf_f:
237+ ; X86: # %bb.0: # %entry
238+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
239+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
240+ ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
241+ ; X86-NEXT: sete %al
242+ ; X86-NEXT: retl
196243entry:
197244 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 516 ) ; 0x204 = "inf"
198245 ret i1 %0
@@ -228,6 +275,14 @@ define i1 @not_isinf_f(float %x) {
228275; X86-FASTISEL-NEXT: popl %ecx
229276; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
230277; X86-FASTISEL-NEXT: retl
278+ ;
279+ ; X86-LABEL: not_isinf_f:
280+ ; X86: # %bb.0: # %entry
281+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
282+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
283+ ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
284+ ; X86-NEXT: setne %al
285+ ; X86-NEXT: retl
231286entry:
232287 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 507 ) ; ~0x204 = "~inf"
233288 ret i1 %0
@@ -258,6 +313,12 @@ define i1 @is_plus_inf_f(float %x) {
258313; X86-FASTISEL-NEXT: popl %ecx
259314; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
260315; X86-FASTISEL-NEXT: retl
316+ ;
317+ ; X86-LABEL: is_plus_inf_f:
318+ ; X86: # %bb.0: # %entry
319+ ; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
320+ ; X86-NEXT: sete %al
321+ ; X86-NEXT: retl
261322entry:
262323 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 512 ) ; 0x200 = "+inf"
263324 ret i1 %0
@@ -288,6 +349,12 @@ define i1 @is_minus_inf_f(float %x) {
288349; X86-FASTISEL-NEXT: popl %ecx
289350; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
290351; X86-FASTISEL-NEXT: retl
352+ ;
353+ ; X86-LABEL: is_minus_inf_f:
354+ ; X86: # %bb.0: # %entry
355+ ; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000
356+ ; X86-NEXT: sete %al
357+ ; X86-NEXT: retl
291358entry:
292359 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 4 ) ; "-inf"
293360 ret i1 %0
@@ -318,6 +385,12 @@ define i1 @not_is_minus_inf_f(float %x) {
318385; X86-FASTISEL-NEXT: popl %ecx
319386; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
320387; X86-FASTISEL-NEXT: retl
388+ ;
389+ ; X86-LABEL: not_is_minus_inf_f:
390+ ; X86: # %bb.0: # %entry
391+ ; X86-NEXT: cmpl $-8388608, {{[0-9]+}}(%esp) # imm = 0xFF800000
392+ ; X86-NEXT: setne %al
393+ ; X86-NEXT: retl
321394entry:
322395 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 1019 ) ; ~"-inf"
323396 ret i1 %0
@@ -353,6 +426,14 @@ define i1 @isfinite_f(float %x) {
353426; X86-FASTISEL-NEXT: popl %ecx
354427; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
355428; X86-FASTISEL-NEXT: retl
429+ ;
430+ ; X86-LABEL: isfinite_f:
431+ ; X86: # %bb.0: # %entry
432+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
433+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
434+ ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
435+ ; X86-NEXT: setl %al
436+ ; X86-NEXT: retl
356437entry:
357438 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 504 ) ; 0x1f8 = "finite"
358439 ret i1 %0
@@ -388,6 +469,14 @@ define i1 @not_isfinite_f(float %x) {
388469; X86-FASTISEL-NEXT: popl %ecx
389470; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
390471; X86-FASTISEL-NEXT: retl
472+ ;
473+ ; X86-LABEL: not_isfinite_f:
474+ ; X86: # %bb.0: # %entry
475+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
476+ ; X86-NEXT: andl $2147483647, %eax # imm = 0x7FFFFFFF
477+ ; X86-NEXT: cmpl $2139095040, %eax # imm = 0x7F800000
478+ ; X86-NEXT: setge %al
479+ ; X86-NEXT: retl
391480entry:
392481 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 519 ) ; ~0x1f8 = "~finite"
393482 ret i1 %0
@@ -418,6 +507,12 @@ define i1 @is_plus_finite_f(float %x) {
418507; X86-FASTISEL-NEXT: popl %ecx
419508; X86-FASTISEL-NEXT: .cfi_def_cfa_offset 4
420509; X86-FASTISEL-NEXT: retl
510+ ;
511+ ; X86-LABEL: is_plus_finite_f:
512+ ; X86: # %bb.0: # %entry
513+ ; X86-NEXT: cmpl $2139095040, {{[0-9]+}}(%esp) # imm = 0x7F800000
514+ ; X86-NEXT: setb %al
515+ ; X86-NEXT: retl
421516entry:
422517 %0 = tail call i1 @llvm.is.fpclass.f32 (float %x , i32 448 ) ; 0x1c0 = "+finite"
423518 ret i1 %0
@@ -440,6 +535,11 @@ define i1 @isnone_d(double %x) nounwind {
440535; X86-FASTISEL-NEXT: fstp %st(0)
441536; X86-FASTISEL-NEXT: xorl %eax, %eax
442537; X86-FASTISEL-NEXT: retl
538+ ;
539+ ; X86-LABEL: isnone_d:
540+ ; X86: # %bb.0: # %entry
541+ ; X86-NEXT: xorl %eax, %eax
542+ ; X86-NEXT: retl
443543entry:
444544 %0 = tail call i1 @llvm.is.fpclass.f64 (double %x , i32 0 )
445545 ret i1 %0
@@ -462,6 +562,11 @@ define i1 @isany_d(double %x) nounwind {
462562; X86-FASTISEL-NEXT: fstp %st(0)
463563; X86-FASTISEL-NEXT: movb $1, %al
464564; X86-FASTISEL-NEXT: retl
565+ ;
566+ ; X86-LABEL: isany_d:
567+ ; X86: # %bb.0: # %entry
568+ ; X86-NEXT: movb $1, %al
569+ ; X86-NEXT: retl
465570entry:
466571 %0 = tail call i1 @llvm.is.fpclass.f64 (double %x , i32 1023 )
467572 ret i1 %0
@@ -491,6 +596,16 @@ define i1 @isnone_f80(x86_fp80 %x) nounwind {
491596; X64-FASTISEL-NEXT: fstp %st(0)
492597; X64-FASTISEL-NEXT: xorl %eax, %eax
493598; X64-FASTISEL-NEXT: retq
599+ ;
600+ ; X86-LABEL: isnone_f80:
601+ ; X86: # %bb.0: # %entry
602+ ; X86-NEXT: xorl %eax, %eax
603+ ; X86-NEXT: retl
604+ ;
605+ ; X64-GISEL-LABEL: isnone_f80:
606+ ; X64-GISEL: # %bb.0: # %entry
607+ ; X64-GISEL-NEXT: xorl %eax, %eax
608+ ; X64-GISEL-NEXT: retq
494609entry:
495610%0 = tail call i1 @llvm.is.fpclass.f80 (x86_fp80 %x , i32 0 )
496611ret i1 %0
@@ -520,7 +635,19 @@ define i1 @isany_f80(x86_fp80 %x) nounwind {
520635; X64-FASTISEL-NEXT: fstp %st(0)
521636; X64-FASTISEL-NEXT: movb $1, %al
522637; X64-FASTISEL-NEXT: retq
638+ ;
639+ ; X86-LABEL: isany_f80:
640+ ; X86: # %bb.0: # %entry
641+ ; X86-NEXT: movb $1, %al
642+ ; X86-NEXT: retl
643+ ;
644+ ; X64-GISEL-LABEL: isany_f80:
645+ ; X64-GISEL: # %bb.0: # %entry
646+ ; X64-GISEL-NEXT: movb $1, %al
647+ ; X64-GISEL-NEXT: retq
523648entry:
524649 %0 = tail call i1 @llvm.is.fpclass.f80 (x86_fp80 %x , i32 1023 )
525650 ret i1 %0
526651}
652+ ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
653+ ; X86-GISEL: {{.*}}
0 commit comments