1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-linux -mattr=+sse3 | FileCheck %s --check-prefix=X86 3; RUN: llc < %s -mtriple=x86_64-linux -mattr=+sse3 | FileCheck %s --check-prefix=X64 4; RUN: llc < %s -mtriple=x86_64-win32 -mattr=+sse3 | FileCheck %s --check-prefix=WIN64 5 6; PR8573 7 8define void @foo(i8* %P, i32 %E, i32 %H) nounwind { 9; X86-LABEL: foo: 10; X86: # %bb.0: # %entry 11; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 12; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 13; X86-NEXT: movl {{[0-9]+}}(%esp), %edx 14; X86-NEXT: monitor 15; X86-NEXT: retl 16; 17; X64-LABEL: foo: 18; X64: # %bb.0: # %entry 19; X64-NEXT: movl %esi, %ecx 20; X64-NEXT: movq %rdi, %rax 21; X64-NEXT: monitor 22; X64-NEXT: retq 23; 24; WIN64-LABEL: foo: 25; WIN64: # %bb.0: # %entry 26; WIN64-NEXT: movq %rcx, %rax 27; WIN64-NEXT: movl %edx, %ecx 28; WIN64-NEXT: movl %r8d, %edx 29; WIN64-NEXT: monitor 30; WIN64-NEXT: retq 31entry: 32 tail call void @llvm.x86.sse3.monitor(i8* %P, i32 %E, i32 %H) 33 ret void 34} 35 36declare void @llvm.x86.sse3.monitor(i8*, i32, i32) nounwind 37 38define void @bar(i32 %E, i32 %H) nounwind { 39; X86-LABEL: bar: 40; X86: # %bb.0: # %entry 41; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx 42; X86-NEXT: movl {{[0-9]+}}(%esp), %eax 43; X86-NEXT: mwait 44; X86-NEXT: retl 45; 46; X64-LABEL: bar: 47; X64: # %bb.0: # %entry 48; X64-NEXT: movl %esi, %eax 49; X64-NEXT: movl %edi, %ecx 50; X64-NEXT: mwait 51; X64-NEXT: retq 52; 53; WIN64-LABEL: bar: 54; WIN64: # %bb.0: # %entry 55; WIN64-NEXT: movl %edx, %eax 56; WIN64-NEXT: mwait 57; WIN64-NEXT: retq 58entry: 59 tail call void @llvm.x86.sse3.mwait(i32 %E, i32 %H) 60 ret void 61} 62 63declare void @llvm.x86.sse3.mwait(i32, i32) nounwind 64