32 lines
		
	
	
		
			727 B
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			727 B
		
	
	
	
		
			LLVM
		
	
	
	
| ; 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
 |