Skip to content

Commit 2462626

Browse files
committed
[X86] Cleanup the lrint/llrint/lround/llround tests a bit.
We don't need tests for truncating the result. There's nothing special about those truncates. We can test llrint/llround for 64-bit and 32-bit targets in the same file. Same with lrint/lround with i32 result result. lrint/lround with 64-bit result should only occur on a 64-bit target. Add some missing tests for f80 conversions.
1 parent 928090f commit 2462626

File tree

10 files changed

+257
-435
lines changed

10 files changed

+257
-435
lines changed

llvm/test/CodeGen/X86/llrint-conv-i32.ll

Lines changed: 0 additions & 60 deletions
This file was deleted.

llvm/test/CodeGen/X86/llrint-conv.ll

Lines changed: 79 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,96 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s
3-
4-
define i32 @testmsws(float %x) {
5-
; CHECK-LABEL: testmsws:
6-
; CHECK: # %bb.0: # %entry
7-
; CHECK-NEXT: pushq %rax
8-
; CHECK-NEXT: .cfi_def_cfa_offset 16
9-
; CHECK-NEXT: callq llrintf
10-
; CHECK-NEXT: # kill: def $eax killed $eax killed $rax
11-
; CHECK-NEXT: popq %rcx
12-
; CHECK-NEXT: .cfi_def_cfa_offset 8
13-
; CHECK-NEXT: retq
14-
entry:
15-
%0 = tail call i64 @llvm.llrint.f32(float %x)
16-
%conv = trunc i64 %0 to i32
17-
ret i32 %conv
18-
}
2+
; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86
3+
; RUN: llc < %s -mtriple=i686-unknown -mattr=sse2 | FileCheck %s --check-prefix=SSE2
4+
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
195

206
define i64 @testmsxs(float %x) {
21-
; CHECK-LABEL: testmsxs:
22-
; CHECK: # %bb.0: # %entry
23-
; CHECK-NEXT: jmp llrintf # TAILCALL
7+
; X86-LABEL: testmsxs:
8+
; X86: # %bb.0: # %entry
9+
; X86-NEXT: pushl %eax
10+
; X86-NEXT: .cfi_def_cfa_offset 8
11+
; X86-NEXT: flds {{[0-9]+}}(%esp)
12+
; X86-NEXT: fstps (%esp)
13+
; X86-NEXT: calll llrintf
14+
; X86-NEXT: popl %ecx
15+
; X86-NEXT: .cfi_def_cfa_offset 4
16+
; X86-NEXT: retl
17+
;
18+
; SSE2-LABEL: testmsxs:
19+
; SSE2: # %bb.0: # %entry
20+
; SSE2-NEXT: pushl %eax
21+
; SSE2-NEXT: .cfi_def_cfa_offset 8
22+
; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
23+
; SSE2-NEXT: movss %xmm0, (%esp)
24+
; SSE2-NEXT: calll llrintf
25+
; SSE2-NEXT: popl %ecx
26+
; SSE2-NEXT: .cfi_def_cfa_offset 4
27+
; SSE2-NEXT: retl
28+
;
29+
; X64-LABEL: testmsxs:
30+
; X64: # %bb.0: # %entry
31+
; X64-NEXT: jmp llrintf # TAILCALL
2432
entry:
2533
%0 = tail call i64 @llvm.llrint.f32(float %x)
2634
ret i64 %0
2735
}
2836

29-
define i32 @testmswd(double %x) {
30-
; CHECK-LABEL: testmswd:
31-
; CHECK: # %bb.0: # %entry
32-
; CHECK-NEXT: pushq %rax
33-
; CHECK-NEXT: .cfi_def_cfa_offset 16
34-
; CHECK-NEXT: callq llrint
35-
; CHECK-NEXT: # kill: def $eax killed $eax killed $rax
36-
; CHECK-NEXT: popq %rcx
37-
; CHECK-NEXT: .cfi_def_cfa_offset 8
38-
; CHECK-NEXT: retq
39-
entry:
40-
%0 = tail call i64 @llvm.llrint.f64(double %x)
41-
%conv = trunc i64 %0 to i32
42-
ret i32 %conv
43-
}
44-
4537
define i64 @testmsxd(double %x) {
46-
; CHECK-LABEL: testmsxd:
47-
; CHECK: # %bb.0: # %entry
48-
; CHECK-NEXT: jmp llrint # TAILCALL
38+
; X86-LABEL: testmsxd:
39+
; X86: # %bb.0: # %entry
40+
; X86-NEXT: subl $8, %esp
41+
; X86-NEXT: .cfi_def_cfa_offset 12
42+
; X86-NEXT: fldl {{[0-9]+}}(%esp)
43+
; X86-NEXT: fstpl (%esp)
44+
; X86-NEXT: calll llrint
45+
; X86-NEXT: addl $8, %esp
46+
; X86-NEXT: .cfi_def_cfa_offset 4
47+
; X86-NEXT: retl
48+
;
49+
; SSE2-LABEL: testmsxd:
50+
; SSE2: # %bb.0: # %entry
51+
; SSE2-NEXT: subl $8, %esp
52+
; SSE2-NEXT: .cfi_def_cfa_offset 12
53+
; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
54+
; SSE2-NEXT: movsd %xmm0, (%esp)
55+
; SSE2-NEXT: calll llrint
56+
; SSE2-NEXT: addl $8, %esp
57+
; SSE2-NEXT: .cfi_def_cfa_offset 4
58+
; SSE2-NEXT: retl
59+
;
60+
; X64-LABEL: testmsxd:
61+
; X64: # %bb.0: # %entry
62+
; X64-NEXT: jmp llrint # TAILCALL
4963
entry:
5064
%0 = tail call i64 @llvm.llrint.f64(double %x)
5165
ret i64 %0
5266
}
5367

54-
define dso_local i32 @testmswl(x86_fp80 %x) {
55-
; CHECK-LABEL: testmswl:
56-
; CHECK: # %bb.0: # %entry
57-
; CHECK-NEXT: subq $24, %rsp
58-
; CHECK-NEXT: .cfi_def_cfa_offset 32
59-
; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)
60-
; CHECK-NEXT: fstpt (%rsp)
61-
; CHECK-NEXT: callq llrintl
62-
; CHECK-NEXT: # kill: def $eax killed $eax killed $rax
63-
; CHECK-NEXT: addq $24, %rsp
64-
; CHECK-NEXT: .cfi_def_cfa_offset 8
65-
; CHECK-NEXT: retq
66-
entry:
67-
%0 = tail call i64 @llvm.llrint.f80(x86_fp80 %x)
68-
%conv = trunc i64 %0 to i32
69-
ret i32 %conv
70-
}
71-
72-
define dso_local i64 @testmsll(x86_fp80 %x) {
73-
; CHECK-LABEL: testmsll:
74-
; CHECK: # %bb.0: # %entry
75-
; CHECK-NEXT: jmp llrintl # TAILCALL
68+
define i64 @testmsll(x86_fp80 %x) {
69+
; X86-LABEL: testmsll:
70+
; X86: # %bb.0: # %entry
71+
; X86-NEXT: subl $12, %esp
72+
; X86-NEXT: .cfi_def_cfa_offset 16
73+
; X86-NEXT: fldt {{[0-9]+}}(%esp)
74+
; X86-NEXT: fstpt (%esp)
75+
; X86-NEXT: calll llrintl
76+
; X86-NEXT: addl $12, %esp
77+
; X86-NEXT: .cfi_def_cfa_offset 4
78+
; X86-NEXT: retl
79+
;
80+
; SSE2-LABEL: testmsll:
81+
; SSE2: # %bb.0: # %entry
82+
; SSE2-NEXT: subl $12, %esp
83+
; SSE2-NEXT: .cfi_def_cfa_offset 16
84+
; SSE2-NEXT: fldt {{[0-9]+}}(%esp)
85+
; SSE2-NEXT: fstpt (%esp)
86+
; SSE2-NEXT: calll llrintl
87+
; SSE2-NEXT: addl $12, %esp
88+
; SSE2-NEXT: .cfi_def_cfa_offset 4
89+
; SSE2-NEXT: retl
90+
;
91+
; X64-LABEL: testmsll:
92+
; X64: # %bb.0: # %entry
93+
; X64-NEXT: jmp llrintl # TAILCALL
7694
entry:
7795
%0 = tail call i64 @llvm.llrint.f80(x86_fp80 %x)
7896
ret i64 %0

llvm/test/CodeGen/X86/llround-conv-i32.ll

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)