xref: /llvm-project/llvm/test/CodeGen/X86/x86-flags-intrinsics.ll (revision f3481f43bbe2c8a24e74210d310cf3be291bf52d)
1; RUN: llc -verify-machineinstrs < %s | FileCheck %s
2target triple = "i686-pc-win32"
3
4; Check that pushf/popf intrinsics on win32 don't need a frame pointer.
5; FIXME: These can't be autogenerated due to the fastcall function name label,
6; it seems.
7
8declare i32 @llvm.x86.flags.read.u32()
9declare void @llvm.x86.flags.write.u32(i32)
10
11define i32 @read_flags() {
12entry:
13  %flags = call i32 @llvm.x86.flags.read.u32()
14  ret i32 %flags
15}
16
17; CHECK-LABEL: _read_flags:
18; CHECK:      pushfl
19; CHECK-NEXT: popl    %eax
20; CHECK-NEXT: retl
21
22define x86_fastcallcc void @write_flags(i32 inreg %arg) {
23entry:
24  call void @llvm.x86.flags.write.u32(i32 %arg)
25  ret void
26}
27
28; CHECK-LABEL: @write_flags@4:
29; CHECK:      pushl   %ecx
30; CHECK-NEXT: popfl
31; CHECK-NEXT: retl
32