1; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s 2 3@flags_gv = global i64 0 4 5; First without noredzone. 6; CHECK-LABEL: f0: 7; CHECK: -4(%rsp) 8; CHECK: -4(%rsp) 9; CHECK: ret 10define x86_fp80 @f0(float %f) nounwind { 11entry: 12 %0 = fpext float %f to x86_fp80 ; <x86_fp80> [#uses=1] 13 ret x86_fp80 %0 14} 15 16; Then with noredzone. 17; CHECK-LABEL: f1: 18; CHECK: subq $4, %rsp 19; CHECK: (%rsp) 20; CHECK: (%rsp) 21; CHECK: addq $4, %rsp 22; CHECK: ret 23define x86_fp80 @f1(float %f) nounwind noredzone { 24entry: 25 %0 = fpext float %f to x86_fp80 ; <x86_fp80> [#uses=1] 26 ret x86_fp80 %0 27} 28 29declare i64 @llvm.x86.flags.read.u64() 30declare 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 41define x86_fp80 @norz_flags_read(float %f) nounwind { 42entry: 43 %flags = call i64 @llvm.x86.flags.read.u64() 44 store i64 %flags, ptr @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 56define x86_fp80 @norz_flags_write(float %f, i64 %flags) nounwind { 57entry: 58 call void @llvm.x86.flags.write.u64(i64 %flags) 59 %0 = fpext float %f to x86_fp80 60 ret x86_fp80 %0 61} 62