blob: 8360bf9dc7422a6e7a62e381f0bd391295a2072c [file] [log] [blame]
Jim Stichnothb0e142b2014-06-12 15:28:56 -07001; This test originally exhibited a bug in ebp-based stack slots. The
2; problem was that during a function call push sequence, the esp
3; adjustment was incorrectly added to the stack/frame offset for
4; ebp-based frames.
5
6; RUN: %llvm2ice -Om1 --target=x8632 --verbose none %s | FileCheck %s
7
8declare i32 @memcpy_helper2(i32 %buf, i32 %buf2, i32 %n);
9
10define i32 @memcpy_helper(i32 %buf, i32 %n) {
11entry:
12 %n.arg_trunc = trunc i32 %n to i8
13 %buf2 = alloca i8, i32 128, align 4
14 %buf2.asint = ptrtoint i8* %buf2 to i32
15 %arg_ext = zext i8 %n.arg_trunc to i32
16 %call = call i32 @memcpy_helper2(i32 %buf, i32 %buf2.asint, i32 %arg_ext)
17 ret i32 %call
18}
19
20; This check sequence is highly specific to the current Om1 lowering
21; and stack slot assignment code, and may need to be relaxed if the
22; lowering code changes.
23
Jim Stichnoth4d79fe52014-08-18 10:55:19 -070024; CHECK-LABEL: memcpy_helper:
25; CHECK: push ebp
26; CHECK: mov ebp, esp
27; CHECK: sub esp, 24
28; CHECK: mov eax, dword ptr [ebp+12]
29; CHECK: mov dword ptr [ebp-4], eax
30; CHECK: sub esp, 128
31; CHECK: mov dword ptr [ebp-8], esp
32; CHECK: mov eax, dword ptr [ebp-8]
33; CHECK: mov dword ptr [ebp-12], eax
34; CHECK: movzx eax, byte ptr [ebp-4]
35; CHECK: mov dword ptr [ebp-16], eax
36; CHECK: sub esp, 16
37; CHECK: mov ecx, dword ptr [ebp+8]
38; CHECK: mov dword ptr [esp], ecx
39; CHECK: mov ecx, dword ptr [ebp-12]
40; CHECK: mov dword ptr [esp+4], ecx
41; CHECK: mov ecx, dword ptr [ebp-16]
42; CHECK: mov dword ptr [esp+8], ecx
43; CHECK: call memcpy_helper2