; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -verify-machineinstrs -mtriple x86_64-linux < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mtriple x86_64-windows < %s | FileCheck %s --check-prefix=WIN64 declare i64 @llvm.x86.flags.read.u64() declare void @llvm.x86.flags.write.u64(i64) define i64 @read_flags() { ; CHECK-LABEL: read_flags: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: pushfq ; CHECK-NEXT: popq %rax ; CHECK-NEXT: retq ; ; WIN64-LABEL: read_flags: ; WIN64: # %bb.0: # %entry ; WIN64-NEXT: pushq %rbp ; WIN64-NEXT: .seh_pushreg %rbp ; WIN64-NEXT: movq %rsp, %rbp ; WIN64-NEXT: .seh_setframe %rbp, 0 ; WIN64-NEXT: .seh_endprologue ; WIN64-NEXT: pushfq ; WIN64-NEXT: popq %rax ; WIN64-NEXT: popq %rbp ; WIN64-NEXT: retq ; WIN64-NEXT: .seh_endproc entry: %flags = call i64 @llvm.x86.flags.read.u64() ret i64 %flags } define void @write_flags(i64 %arg) { ; CHECK-LABEL: write_flags: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: pushq %rdi ; CHECK-NEXT: popfq ; CHECK-NEXT: retq ; ; WIN64-LABEL: write_flags: ; WIN64: # %bb.0: # %entry ; WIN64-NEXT: pushq %rbp ; WIN64-NEXT: .seh_pushreg %rbp ; WIN64-NEXT: movq %rsp, %rbp ; WIN64-NEXT: .seh_setframe %rbp, 0 ; WIN64-NEXT: .seh_endprologue ; WIN64-NEXT: pushq %rcx ; WIN64-NEXT: popfq ; WIN64-NEXT: popq %rbp ; WIN64-NEXT: retq ; WIN64-NEXT: .seh_endproc entry: call void @llvm.x86.flags.write.u64(i64 %arg) ret void }