62 lines · plain
1; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s2 3@flags_gv = global i64 04 5; First without noredzone.6; CHECK-LABEL: f0:7; CHECK: -4(%rsp)8; CHECK: -4(%rsp)9; CHECK: ret10define x86_fp80 @f0(float %f) nounwind {11entry:12 %0 = fpext float %f to x86_fp80 ; <x86_fp80> [#uses=1]13 ret x86_fp80 %014}15 16; Then with noredzone.17; CHECK-LABEL: f1:18; CHECK: subq $4, %rsp19; CHECK: (%rsp)20; CHECK: (%rsp)21; CHECK: addq $4, %rsp22; CHECK: ret23define x86_fp80 @f1(float %f) nounwind noredzone {24entry:25 %0 = fpext float %f to x86_fp80 ; <x86_fp80> [#uses=1]26 ret x86_fp80 %027}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]+}}, %rsp36; CHECK: pushfq37; CHECK: popq38; CHECK: (%rsp)39; CHECK: (%rsp)40; CHECK: ret41define x86_fp80 @norz_flags_read(float %f) nounwind {42entry:43 %flags = call i64 @llvm.x86.flags.read.u64()44 store i64 %flags, ptr @flags_gv45 %0 = fpext float %f to x86_fp8046 ret x86_fp80 %047}48 49; CHECK-LABEL: norz_flags_write:50; CHECK: subq ${{[0-9]+}}, %rsp51; CHECK: pushq52; CHECK: popfq53; CHECK: (%rsp)54; CHECK: (%rsp)55; CHECK: ret56define 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_fp8060 ret x86_fp80 %061}62