Skip to content

Commit 1cdb881

Browse files
mahesh-attardemattarde
andauthored
[X86][GlobalIsel] Add ceil/trunc/floor cpp intrinsic test (#156281)
I am working towards supporting G_INTRINSIC_TRUNC, G_FCEIL and G_FFLOOR. This patch adds isel test for usecase. Ref https://llvm.org/docs/GlobalISel/GenericOpcode.html#g-fceil-g-fsqrt-g-ffloor-g-frint-g-fnearbyint --------- Co-authored-by: mattarde <mattarde@intel.com>
1 parent 95e76c1 commit 1cdb881

File tree

3 files changed

+285
-0
lines changed

3 files changed

+285
-0
lines changed

llvm/test/CodeGen/X86/isel-ceil.ll

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
3+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
4+
; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
5+
; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
6+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
7+
; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
8+
9+
define float @ceil_f32(float %a) nounwind readnone {
10+
; DAG-X64-LABEL: ceil_f32:
11+
; DAG-X64: # %bb.0:
12+
; DAG-X64-NEXT: jmp ceilf@PLT # TAILCALL
13+
;
14+
; FASTISEL-X64-LABEL: ceil_f32:
15+
; FASTISEL-X64: # %bb.0:
16+
; FASTISEL-X64-NEXT: pushq %rax
17+
; FASTISEL-X64-NEXT: callq ceilf@PLT
18+
; FASTISEL-X64-NEXT: popq %rax
19+
; FASTISEL-X64-NEXT: retq
20+
;
21+
; X86-LABEL: ceil_f32:
22+
; X86: # %bb.0:
23+
; X86-NEXT: subl $12, %esp
24+
; X86-NEXT: flds {{[0-9]+}}(%esp)
25+
; X86-NEXT: fstps (%esp)
26+
; X86-NEXT: calll ceilf
27+
; X86-NEXT: addl $12, %esp
28+
; X86-NEXT: retl
29+
;
30+
; GISEL-X64-LABEL: ceil_f32:
31+
; GISEL-X64: # %bb.0:
32+
; GISEL-X64-NEXT: jmp ceilf@PLT # TAILCALL
33+
%c = call float @llvm.ceil.f32(float %a)
34+
ret float %c
35+
}
36+
37+
define double @ceil_f64(double %a) nounwind readnone {
38+
; DAG-X64-LABEL: ceil_f64:
39+
; DAG-X64: # %bb.0:
40+
; DAG-X64-NEXT: jmp ceil@PLT # TAILCALL
41+
;
42+
; FASTISEL-X64-LABEL: ceil_f64:
43+
; FASTISEL-X64: # %bb.0:
44+
; FASTISEL-X64-NEXT: pushq %rax
45+
; FASTISEL-X64-NEXT: callq ceil@PLT
46+
; FASTISEL-X64-NEXT: popq %rax
47+
; FASTISEL-X64-NEXT: retq
48+
;
49+
; X86-LABEL: ceil_f64:
50+
; X86: # %bb.0:
51+
; X86-NEXT: subl $12, %esp
52+
; X86-NEXT: fldl {{[0-9]+}}(%esp)
53+
; X86-NEXT: fstpl (%esp)
54+
; X86-NEXT: calll ceil
55+
; X86-NEXT: addl $12, %esp
56+
; X86-NEXT: retl
57+
;
58+
; GISEL-X64-LABEL: ceil_f64:
59+
; GISEL-X64: # %bb.0:
60+
; GISEL-X64-NEXT: jmp ceil@PLT # TAILCALL
61+
%c = call double @llvm.ceil.f64(double %a)
62+
ret double %c
63+
}
64+
65+
define x86_fp80 @ceil_f80(x86_fp80 %a) nounwind readnone {
66+
; X64-LABEL: ceil_f80:
67+
; X64: # %bb.0:
68+
; X64-NEXT: subq $24, %rsp
69+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
70+
; X64-NEXT: fstpt (%rsp)
71+
; X64-NEXT: callq ceill@PLT
72+
; X64-NEXT: addq $24, %rsp
73+
; X64-NEXT: retq
74+
;
75+
; X86-LABEL: ceil_f80:
76+
; X86: # %bb.0:
77+
; X86-NEXT: subl $12, %esp
78+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
79+
; X86-NEXT: fstpt (%esp)
80+
; X86-NEXT: calll ceill
81+
; X86-NEXT: addl $12, %esp
82+
; X86-NEXT: retl
83+
;
84+
; GISEL-X64-LABEL: ceil_f80:
85+
; GISEL-X64: # %bb.0:
86+
; GISEL-X64-NEXT: subq $24, %rsp
87+
; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)
88+
; GISEL-X64-NEXT: fstpt (%rsp)
89+
; GISEL-X64-NEXT: callq ceill@PLT
90+
; GISEL-X64-NEXT: addq $24, %rsp
91+
; GISEL-X64-NEXT: retq
92+
%c = call x86_fp80 @llvm.ceil.f80(x86_fp80 %a)
93+
ret x86_fp80 %c
94+
}
95+
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
3+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
4+
; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
5+
; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
6+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
7+
; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
8+
9+
define float @floor_f32(float %a) nounwind readnone {
10+
; DAG-X64-LABEL: floor_f32:
11+
; DAG-X64: # %bb.0:
12+
; DAG-X64-NEXT: jmp floorf@PLT # TAILCALL
13+
;
14+
; FASTISEL-X64-LABEL: floor_f32:
15+
; FASTISEL-X64: # %bb.0:
16+
; FASTISEL-X64-NEXT: pushq %rax
17+
; FASTISEL-X64-NEXT: callq floorf@PLT
18+
; FASTISEL-X64-NEXT: popq %rax
19+
; FASTISEL-X64-NEXT: retq
20+
;
21+
; X86-LABEL: floor_f32:
22+
; X86: # %bb.0:
23+
; X86-NEXT: subl $12, %esp
24+
; X86-NEXT: flds {{[0-9]+}}(%esp)
25+
; X86-NEXT: fstps (%esp)
26+
; X86-NEXT: calll floorf
27+
; X86-NEXT: addl $12, %esp
28+
; X86-NEXT: retl
29+
;
30+
; GISEL-X64-LABEL: floor_f32:
31+
; GISEL-X64: # %bb.0:
32+
; GISEL-X64-NEXT: jmp floorf@PLT # TAILCALL
33+
%c = call float @llvm.floor.f32(float %a)
34+
ret float %c
35+
}
36+
37+
define double @floor_f64(double %a) nounwind readnone {
38+
; DAG-X64-LABEL: floor_f64:
39+
; DAG-X64: # %bb.0:
40+
; DAG-X64-NEXT: jmp floor@PLT # TAILCALL
41+
;
42+
; FASTISEL-X64-LABEL: floor_f64:
43+
; FASTISEL-X64: # %bb.0:
44+
; FASTISEL-X64-NEXT: pushq %rax
45+
; FASTISEL-X64-NEXT: callq floor@PLT
46+
; FASTISEL-X64-NEXT: popq %rax
47+
; FASTISEL-X64-NEXT: retq
48+
;
49+
; X86-LABEL: floor_f64:
50+
; X86: # %bb.0:
51+
; X86-NEXT: subl $12, %esp
52+
; X86-NEXT: fldl {{[0-9]+}}(%esp)
53+
; X86-NEXT: fstpl (%esp)
54+
; X86-NEXT: calll floor
55+
; X86-NEXT: addl $12, %esp
56+
; X86-NEXT: retl
57+
;
58+
; GISEL-X64-LABEL: floor_f64:
59+
; GISEL-X64: # %bb.0:
60+
; GISEL-X64-NEXT: jmp floor@PLT # TAILCALL
61+
%c = call double @llvm.floor.f64(double %a)
62+
ret double %c
63+
}
64+
65+
define x86_fp80 @floor_f80(x86_fp80 %a) nounwind readnone {
66+
; X64-LABEL: floor_f80:
67+
; X64: # %bb.0:
68+
; X64-NEXT: subq $24, %rsp
69+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
70+
; X64-NEXT: fstpt (%rsp)
71+
; X64-NEXT: callq floorl@PLT
72+
; X64-NEXT: addq $24, %rsp
73+
; X64-NEXT: retq
74+
;
75+
; X86-LABEL: floor_f80:
76+
; X86: # %bb.0:
77+
; X86-NEXT: subl $12, %esp
78+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
79+
; X86-NEXT: fstpt (%esp)
80+
; X86-NEXT: calll floorl
81+
; X86-NEXT: addl $12, %esp
82+
; X86-NEXT: retl
83+
;
84+
; GISEL-X64-LABEL: floor_f80:
85+
; GISEL-X64: # %bb.0:
86+
; GISEL-X64-NEXT: subq $24, %rsp
87+
; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)
88+
; GISEL-X64-NEXT: fstpt (%rsp)
89+
; GISEL-X64-NEXT: callq floorl@PLT
90+
; GISEL-X64-NEXT: addq $24, %rsp
91+
; GISEL-X64-NEXT: retq
92+
%c = call x86_fp80 @llvm.floor.f80(x86_fp80 %a)
93+
ret x86_fp80 %c
94+
}
95+
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
3+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
4+
; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
5+
; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
6+
; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
7+
; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
8+
9+
define float @trunc_f32(float %a) nounwind readnone {
10+
; DAG-X64-LABEL: trunc_f32:
11+
; DAG-X64: # %bb.0:
12+
; DAG-X64-NEXT: jmp truncf@PLT # TAILCALL
13+
;
14+
; FASTISEL-X64-LABEL: trunc_f32:
15+
; FASTISEL-X64: # %bb.0:
16+
; FASTISEL-X64-NEXT: pushq %rax
17+
; FASTISEL-X64-NEXT: callq truncf@PLT
18+
; FASTISEL-X64-NEXT: popq %rax
19+
; FASTISEL-X64-NEXT: retq
20+
;
21+
; X86-LABEL: trunc_f32:
22+
; X86: # %bb.0:
23+
; X86-NEXT: subl $12, %esp
24+
; X86-NEXT: flds {{[0-9]+}}(%esp)
25+
; X86-NEXT: fstps (%esp)
26+
; X86-NEXT: calll truncf
27+
; X86-NEXT: addl $12, %esp
28+
; X86-NEXT: retl
29+
;
30+
; GISEL-X64-LABEL: trunc_f32:
31+
; GISEL-X64: # %bb.0:
32+
; GISEL-X64-NEXT: jmp truncf@PLT # TAILCALL
33+
%c = call float @llvm.trunc.f32(float %a)
34+
ret float %c
35+
}
36+
37+
define double @trunc_f64(double %a) nounwind readnone {
38+
; DAG-X64-LABEL: trunc_f64:
39+
; DAG-X64: # %bb.0:
40+
; DAG-X64-NEXT: jmp trunc@PLT # TAILCALL
41+
;
42+
; FASTISEL-X64-LABEL: trunc_f64:
43+
; FASTISEL-X64: # %bb.0:
44+
; FASTISEL-X64-NEXT: pushq %rax
45+
; FASTISEL-X64-NEXT: callq trunc@PLT
46+
; FASTISEL-X64-NEXT: popq %rax
47+
; FASTISEL-X64-NEXT: retq
48+
;
49+
; X86-LABEL: trunc_f64:
50+
; X86: # %bb.0:
51+
; X86-NEXT: subl $12, %esp
52+
; X86-NEXT: fldl {{[0-9]+}}(%esp)
53+
; X86-NEXT: fstpl (%esp)
54+
; X86-NEXT: calll trunc
55+
; X86-NEXT: addl $12, %esp
56+
; X86-NEXT: retl
57+
;
58+
; GISEL-X64-LABEL: trunc_f64:
59+
; GISEL-X64: # %bb.0:
60+
; GISEL-X64-NEXT: jmp trunc@PLT # TAILCALL
61+
%c = call double @llvm.trunc.f64(double %a)
62+
ret double %c
63+
}
64+
65+
define x86_fp80 @trunc_f80(x86_fp80 %a) nounwind readnone {
66+
; X64-LABEL: trunc_f80:
67+
; X64: # %bb.0:
68+
; X64-NEXT: subq $24, %rsp
69+
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
70+
; X64-NEXT: fstpt (%rsp)
71+
; X64-NEXT: callq truncl@PLT
72+
; X64-NEXT: addq $24, %rsp
73+
; X64-NEXT: retq
74+
;
75+
; X86-LABEL: trunc_f80:
76+
; X86: # %bb.0:
77+
; X86-NEXT: subl $12, %esp
78+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
79+
; X86-NEXT: fstpt (%esp)
80+
; X86-NEXT: calll truncl
81+
; X86-NEXT: addl $12, %esp
82+
; X86-NEXT: retl
83+
;
84+
; GISEL-X64-LABEL: trunc_f80:
85+
; GISEL-X64: # %bb.0:
86+
; GISEL-X64-NEXT: subq $24, %rsp
87+
; GISEL-X64-NEXT: fldt {{[0-9]+}}(%rsp)
88+
; GISEL-X64-NEXT: fstpt (%rsp)
89+
; GISEL-X64-NEXT: callq truncl@PLT
90+
; GISEL-X64-NEXT: addq $24, %rsp
91+
; GISEL-X64-NEXT: retq
92+
%c = call x86_fp80 @llvm.trunc.f80(x86_fp80 %a)
93+
ret x86_fp80 %c
94+
}
95+

0 commit comments

Comments
 (0)