Home | History | Annotate | Download | only in X86
      1 ; RUN: llc -verify-machineinstrs < %s | FileCheck %s
      2 target triple = "x86_64-pc-win32"
      3 
      4 declare i64 @llvm.x86.flags.read.u64()
      5 declare void @llvm.x86.flags.write.u64(i64)
      6 
      7 define i64 @read_flags() {
      8 entry:
      9   %flags = call i64 @llvm.x86.flags.read.u64()
     10   ret i64 %flags
     11 }
     12 
     13 ; CHECK-LABEL: read_flags:
     14 ; CHECK:      pushq   %rbp
     15 ; CHECK:      .seh_pushreg 5
     16 ; CHECK:      movq    %rsp, %rbp
     17 ; CHECK:      .seh_setframe 5, 0
     18 ; CHECK:      .seh_endprologue
     19 ; CHECK-NEXT: pushfq
     20 ; CHECK-NEXT: popq    %rax
     21 ; CHECK-NEXT: popq    %rbp
     22 
     23 define void @write_flags(i64 %arg) {
     24 entry:
     25   call void @llvm.x86.flags.write.u64(i64 %arg)
     26   ret void
     27 }
     28 
     29 ; CHECK-LABEL: write_flags:
     30 ; CHECK:      pushq   %rbp
     31 ; CHECK:      .seh_pushreg 5
     32 ; CHECK:      movq    %rsp, %rbp
     33 ; CHECK:      .seh_setframe 5, 0
     34 ; CHECK:      .seh_endprologue
     35 ; CHECK-NEXT: pushq   %rcx
     36 ; CHECK-NEXT: popfq
     37 ; CHECK-NEXT: popq    %rbp
     38