1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-linux -mattr=+waitpkg | FileCheck %s --check-prefix=X64 3; RUN: llc < %s -mtriple=i386-pc-linux -mattr=+waitpkg | FileCheck %s --check-prefix=X32 4 5define void @test_umonitor(i8* %address) { 6; X64-LABEL: test_umonitor: 7; X64: # %bb.0: # %entry 8; X64-NEXT: umonitor %rdi 9; X64-NEXT: retq 10; 11; X32-LABEL: test_umonitor: 12; X32: # %bb.0: # %entry 13; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 14; X32-NEXT: umonitor %eax 15; X32-NEXT: retl 16entry: 17 call void @llvm.x86.umonitor(i8* %address) 18 ret void 19} 20 21define i8 @test_umwait(i32 %control, i32 %counter_high, i32 %counter_low) { 22; X64-LABEL: test_umwait: 23; X64: # %bb.0: # %entry 24; X64-NEXT: movl %edx, %eax 25; X64-NEXT: movl %esi, %edx 26; X64-NEXT: umwait %edi 27; X64-NEXT: setb %al 28; X64-NEXT: retq 29; 30; X32-LABEL: test_umwait: 31; X32: # %bb.0: # %entry 32; X32-NEXT: movl {{[0-9]+}}(%esp), %edx 33; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 34; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 35; X32-NEXT: umwait %ecx 36; X32-NEXT: setb %al 37; X32-NEXT: retl 38entry: 39 call i8 @llvm.x86.umwait(i32 %control, i32 %counter_high, i32 %counter_low) 40 ret i8 %0 41} 42 43define i8 @test_tpause(i32 %control, i32 %counter_high, i32 %counter_low) { 44; X64-LABEL: test_tpause: 45; X64: # %bb.0: # %entry 46; X64-NEXT: movl %edx, %eax 47; X64-NEXT: movl %esi, %edx 48; X64-NEXT: tpause %edi 49; X64-NEXT: setb %al 50; X64-NEXT: retq 51; 52; X32-LABEL: test_tpause: 53; X32: # %bb.0: # %entry 54; X32-NEXT: movl {{[0-9]+}}(%esp), %edx 55; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 56; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 57; X32-NEXT: tpause %ecx 58; X32-NEXT: setb %al 59; X32-NEXT: retl 60entry: 61 call i8 @llvm.x86.tpause(i32 %control, i32 %counter_high, i32 %counter_low) 62 ret i8 %0 63} 64 65declare void @llvm.x86.umonitor(i8*) 66declare i8 @llvm.x86.umwait(i32, i32, i32) 67declare i8 @llvm.x86.tpause(i32, i32, i32) 68