| ; RUN: llc -verify-machineinstrs < %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 |