This commit enables unaligned memory accesses of vector types on AArch64 back end...
[oota-llvm.git] / test / CodeGen / X86 / cdecl-method-return.ll
1 ; RUN: llc < %s -mtriple=i686-pc-win32 -mcpu=core2 | FileCheck %s
2
3 ; The sret flag causes the first two parameters to be reordered on the stack.
4
5 define x86_cdeclmethodcc void @foo(i32* sret %dst, i32* %src) {
6   %v = load i32* %src
7   store i32 %v, i32* %dst
8   ret void
9 }
10
11 ; CHECK-LABEL: _foo:
12 ; CHECK:  movl    8(%esp), %[[dst:[^ ]*]]
13 ; CHECK:  movl    4(%esp), %[[src:[^ ]*]]
14 ; CHECK:  movl    (%[[src]]), %[[v:[^ ]*]]
15 ; CHECK:  movl    %[[v]], (%[[dst]])
16 ; CHECK:  retl
17
18 define i32 @bar() {
19   %src = alloca i32
20   %dst = alloca i32
21   store i32 42, i32* %src
22   call x86_cdeclmethodcc void @foo(i32* sret %dst, i32* %src)
23   %v = load i32* %dst
24   ret i32 %v
25 }
26
27 ; CHECK-LABEL: _bar:
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)
33 ; CHECK:  calll   _foo
34 ; CHECK:  movl    [[dst]], %eax
35 ; CHECK:  retl
36
37 ; If we don't have the sret flag, parameters are not reordered.
38
39 define x86_cdeclmethodcc void @baz(i32* %dst, i32* %src) {
40   %v = load i32* %src
41   store i32 %v, i32* %dst
42   ret void
43 }
44
45 ; CHECK-LABEL: _baz:
46 ; CHECK:  movl    4(%esp), %[[dst:[^ ]*]]
47 ; CHECK:  movl    8(%esp), %[[src:[^ ]*]]
48 ; CHECK:  movl    (%[[src]]), %[[v:[^ ]*]]
49 ; CHECK:  movl    %[[v]], (%[[dst]])
50 ; CHECK:  retl
51
52 define i32 @qux() {
53   %src = alloca i32
54   %dst = alloca i32
55   store i32 42, i32* %src
56   call x86_cdeclmethodcc void @baz(i32* %dst, i32* %src)
57   %v = load i32* %dst
58   ret i32 %v
59 }
60
61 ; CHECK-LABEL: _qux:
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)
67 ; CHECK:  calll   _baz
68 ; CHECK:  movl    [[dst]], %eax
69 ; CHECK:  retl