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