1 ; RUN: llc < %s -mtriple=i686-pc-win32 -mcpu=core2 | FileCheck %s
3 ; The sret flag causes the first two parameters to be reordered on the stack.
5 define x86_cdeclmethodcc void @foo(i32* sret %dst, i32* %src) {
7 store i32 %v, i32* %dst
12 ; CHECK: movl 8(%esp), %[[dst:[^ ]*]]
13 ; CHECK: movl 4(%esp), %[[src:[^ ]*]]
14 ; CHECK: movl (%[[src]]), %[[v:[^ ]*]]
15 ; CHECK: movl %[[v]], (%[[dst]])
21 store i32 42, i32* %src
22 call x86_cdeclmethodcc void @foo(i32* sret %dst, i32* %src)
28 ; CHECK: movl $42, [[src:[^,]*]]
29 ; CHECK: leal [[src]], %[[reg:[^ ]*]]
30 ; CHECK: movl %[[reg]], (%esp)
31 ; CHECK: leal [[dst:[^,]*]], %[[reg:[^ ]*]]
32 ; CHECK: movl %[[reg]], 4(%esp)
34 ; CHECK: movl [[dst]], %eax
37 ; If we don't have the sret flag, parameters are not reordered.
39 define x86_cdeclmethodcc void @baz(i32* %dst, i32* %src) {
41 store i32 %v, i32* %dst
46 ; CHECK: movl 4(%esp), %[[dst:[^ ]*]]
47 ; CHECK: movl 8(%esp), %[[src:[^ ]*]]
48 ; CHECK: movl (%[[src]]), %[[v:[^ ]*]]
49 ; CHECK: movl %[[v]], (%[[dst]])
55 store i32 42, i32* %src
56 call x86_cdeclmethodcc void @baz(i32* %dst, i32* %src)
62 ; CHECK: movl $42, [[src:[^,]*]]
63 ; CHECK: leal [[src]], %[[reg:[^ ]*]]
64 ; CHECK: movl %[[reg]], 4(%esp)
65 ; CHECK: leal [[dst:[^,]*]], %[[reg:[^ ]*]]
66 ; CHECK: movl %[[reg]], (%esp)
68 ; CHECK: movl [[dst]], %eax