Skip to content

Commit 8ee83ff

Browse files
committed
[X86] Add test for interaction between pushf/popf and redzones
As requested on D92695
1 parent 148a4b2 commit 8ee83ff

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

llvm/test/CodeGen/X86/red-zone.ll

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s
22

3+
@flags_gv = global i64 0
4+
35
; First without noredzone.
46
; CHECK-LABEL: f0:
57
; CHECK: -4(%rsp)
68
; CHECK: -4(%rsp)
79
; CHECK: ret
8-
define x86_fp80 @f0(float %f) nounwind readnone {
10+
define x86_fp80 @f0(float %f) nounwind {
911
entry:
1012
%0 = fpext float %f to x86_fp80 ; <x86_fp80> [#uses=1]
1113
ret x86_fp80 %0
@@ -18,8 +20,42 @@ entry:
1820
; CHECK: (%rsp)
1921
; CHECK: addq $4, %rsp
2022
; CHECK: ret
21-
define x86_fp80 @f1(float %f) nounwind readnone noredzone {
23+
define x86_fp80 @f1(float %f) nounwind noredzone {
2224
entry:
2325
%0 = fpext float %f to x86_fp80 ; <x86_fp80> [#uses=1]
2426
ret x86_fp80 %0
2527
}
28+
29+
declare i64 @llvm.x86.flags.read.u64()
30+
declare void @llvm.x86.flags.write.u64(i64)
31+
32+
33+
; pushfq and popfq prevent redzones.
34+
; CHECK-LABEL: norz_flags_read:
35+
; CHECK: subq ${{[0-9]+}}, %rsp
36+
; CHECK: pushfq
37+
; CHECK: popq
38+
; CHECK: (%rsp)
39+
; CHECK: (%rsp)
40+
; CHECK: ret
41+
define x86_fp80 @norz_flags_read(float %f) nounwind {
42+
entry:
43+
%flags = call i64 @llvm.x86.flags.read.u64()
44+
store i64 %flags, i64* @flags_gv
45+
%0 = fpext float %f to x86_fp80
46+
ret x86_fp80 %0
47+
}
48+
49+
; CHECK-LABEL: norz_flags_write:
50+
; CHECK: subq ${{[0-9]+}}, %rsp
51+
; CHECK: pushq
52+
; CHECK: popfq
53+
; CHECK: (%rsp)
54+
; CHECK: (%rsp)
55+
; CHECK: ret
56+
define x86_fp80 @norz_flags_write(float %f, i64 %flags) nounwind {
57+
entry:
58+
call void @llvm.x86.flags.write.u64(i64 %flags)
59+
%0 = fpext float %f to x86_fp80
60+
ret x86_fp80 %0
61+
}

0 commit comments

Comments
 (0)