diff options
Diffstat (limited to 'test/CodeGen/X86/x86-flags-intrinsics.ll')
-rw-r--r-- | test/CodeGen/X86/x86-flags-intrinsics.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/CodeGen/X86/x86-flags-intrinsics.ll b/test/CodeGen/X86/x86-flags-intrinsics.ll new file mode 100644 index 0000000000000..325de7d5f1e7c --- /dev/null +++ b/test/CodeGen/X86/x86-flags-intrinsics.ll @@ -0,0 +1,31 @@ +; RUN: llc < %s | FileCheck %s +target triple = "i686-pc-win32" + +declare i32 @llvm.x86.flags.read.u32() +declare void @llvm.x86.flags.write.u32(i32) + +define i32 @read_flags() { +entry: + %flags = call i32 @llvm.x86.flags.read.u32() + ret i32 %flags +} + +; CHECK-LABEL: _read_flags: +; CHECK: pushl %ebp +; CHECK-NEXT: movl %esp, %ebp +; CHECK-NEXT: pushfl +; CHECK-NEXT: popl %eax +; CHECK-NEXT: popl %ebp + +define x86_fastcallcc void @write_flags(i32 inreg %arg) { +entry: + call void @llvm.x86.flags.write.u32(i32 %arg) + ret void +} + +; CHECK-LABEL: @write_flags@4: +; CHECK: pushl %ebp +; CHECK-NEXT: movl %esp, %ebp +; CHECK-NEXT: pushl %ecx +; CHECK-NEXT: popfl +; CHECK-NEXT: popl %ebp |