Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(535)

Side by Side Diff: tests_lit/llvm2ice_tests/int-arg.ll

Issue 1416493002: Implements simple returns and call args for Mips. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Incorporating changes from stichnot Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; This file checks that Subzero generates code in accordance with the 1 ; This file checks that Subzero generates code in accordance with the
2 ; calling convention for integers. 2 ; calling convention for integers.
3 3
4 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ 4 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
5 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ 5 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \
6 ; RUN: | %if --need=target_X8632 --command FileCheck %s 6 ; RUN: | %if --need=target_X8632 --command FileCheck %s
7 7
8 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) 8 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented)
9 ; once enough infrastructure is in. Also, switch to --filetype=obj 9 ; once enough infrastructure is in. Also, switch to --filetype=obj
10 ; when possible. 10 ; when possible.
11 ; RUN: %if --need=target_ARM32 --need=allow_dump \ 11 ; RUN: %if --need=target_ARM32 --need=allow_dump \
12 ; RUN: --command %p2i --filetype=asm --assemble \ 12 ; RUN: --command %p2i --filetype=asm --assemble \
13 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ 13 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \
14 ; RUN: -allow-externally-defined-symbols \ 14 ; RUN: -allow-externally-defined-symbols \
15 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ 15 ; RUN: | %if --need=target_ARM32 --need=allow_dump \
16 ; RUN: --command FileCheck --check-prefix ARM32 %s 16 ; RUN: --command FileCheck --check-prefix ARM32 %s
17 17
18 ; TODO(RKotler): Stop skipping unimplemented parts (via --skip-unimplemented)
19 ; once enough infrastructure is in. Also, switch to --filetype=obj
20 ; when possible.
21 ; RUN: %if --need=target_MIPS32 --need=allow_dump \
22 ; RUN: --command %p2i --filetype=asm --assemble \
23 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \
24 ; RUN: -allow-externally-defined-symbols \
25 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \
26 ; RUN: --command FileCheck --check-prefix MIPS32 %s
27
18 ; For x86-32, integer arguments use the stack. 28 ; For x86-32, integer arguments use the stack.
19 ; For ARM32, integer arguments can be r0-r3. i64 arguments occupy two 29 ; For ARM32, integer arguments can be r0-r3. i64 arguments occupy two
20 ; adjacent 32-bit registers, and require the first to be an even register. 30 ; adjacent 32-bit registers, and require the first to be an even register.
21 31
22 32
23 ; i32 33 ; i32
24 34
25 define internal i32 @test_returning32_arg0(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { 35 define internal i32 @test_returning32_arg0(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) {
26 entry: 36 entry:
27 ret i32 %arg0 37 ret i32 %arg0
28 } 38 }
29 ; CHECK-LABEL: test_returning32_arg0 39 ; CHECK-LABEL: test_returning32_arg0
30 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x4] 40 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x4]
31 ; CHECK-NEXT: ret 41 ; CHECK-NEXT: ret
32 ; ARM32-LABEL: test_returning32_arg0 42 ; ARM32-LABEL: test_returning32_arg0
33 ; ARM32-NEXT: bx lr 43 ; ARM32-NEXT: bx lr
44 ; MIPS32-LABEL: <test_returning32_arg0>
Jim Stichnoth 2015/10/20 04:41:00 What do you think about using MIPS32-LABEL: test
rkotlerimgtec 2015/10/21 00:30:54 For some reason I was having trouble with make che
Jim Stichnoth 2015/10/21 02:12:17 I just gave it a try locally (just in this file),
rkotlerimgtec 2015/10/21 03:37:00 Done.
45 ; MIPS32: move v0,a0
46 ; MIPS32-NEXT: jr ra
34 47
35 define internal i32 @test_returning32_arg1(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { 48 define internal i32 @test_returning32_arg1(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) {
36 entry: 49 entry:
37 ret i32 %arg1 50 ret i32 %arg1
38 } 51 }
39 ; CHECK-LABEL: test_returning32_arg1 52 ; CHECK-LABEL: test_returning32_arg1
40 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x8] 53 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x8]
41 ; CHECK-NEXT: ret 54 ; CHECK-NEXT: ret
42 ; ARM32-LABEL: test_returning32_arg1 55 ; ARM32-LABEL: test_returning32_arg1
43 ; ARM32-NEXT: mov r0, r1 56 ; ARM32-NEXT: mov r0, r1
44 ; ARM32-NEXT: bx lr 57 ; ARM32-NEXT: bx lr
45 58 ; MIPS32-LABEL: <test_returning32_arg1>
59 ; MIPS32: move v0,a1
60 ; MIPS32-NEXT: jr ra
46 61
47 define internal i32 @test_returning32_arg2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { 62 define internal i32 @test_returning32_arg2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) {
48 entry: 63 entry:
49 ret i32 %arg2 64 ret i32 %arg2
50 } 65 }
51 ; CHECK-LABEL: test_returning32_arg2 66 ; CHECK-LABEL: test_returning32_arg2
52 ; CHECK-NEXT: mov eax,{{.*}} [esp+0xc] 67 ; CHECK-NEXT: mov eax,{{.*}} [esp+0xc]
53 ; CHECK-NEXT: ret 68 ; CHECK-NEXT: ret
54 ; ARM32-LABEL: test_returning32_arg2 69 ; ARM32-LABEL: test_returning32_arg2
55 ; ARM32-NEXT: mov r0, r2 70 ; ARM32-NEXT: mov r0, r2
56 ; ARM32-NEXT: bx lr 71 ; ARM32-NEXT: bx lr
72 ; MIPS32-LABEL: <test_returning32_arg2>
73 ; MIPS32: move v0,a2
74 ; MIPS32-NEXT: jr ra
57 75
58 76
59 define internal i32 @test_returning32_arg3(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { 77 define internal i32 @test_returning32_arg3(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) {
60 entry: 78 entry:
61 ret i32 %arg3 79 ret i32 %arg3
62 } 80 }
63 ; CHECK-LABEL: test_returning32_arg3 81 ; CHECK-LABEL: test_returning32_arg3
64 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x10] 82 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x10]
65 ; CHECK-NEXT: ret 83 ; CHECK-NEXT: ret
66 ; ARM32-LABEL: test_returning32_arg3 84 ; ARM32-LABEL: test_returning32_arg3
(...skipping 29 matching lines...) Expand all
96 define internal i64 @test_returning64_arg0(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { 114 define internal i64 @test_returning64_arg0(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) {
97 entry: 115 entry:
98 ret i64 %arg0 116 ret i64 %arg0
99 } 117 }
100 ; CHECK-LABEL: test_returning64_arg0 118 ; CHECK-LABEL: test_returning64_arg0
101 ; CHECK-NEXT: mov {{.*}} [esp+0x4] 119 ; CHECK-NEXT: mov {{.*}} [esp+0x4]
102 ; CHECK-NEXT: mov {{.*}} [esp+0x8] 120 ; CHECK-NEXT: mov {{.*}} [esp+0x8]
103 ; CHECK: ret 121 ; CHECK: ret
104 ; ARM32-LABEL: test_returning64_arg0 122 ; ARM32-LABEL: test_returning64_arg0
105 ; ARM32-NEXT: bx lr 123 ; ARM32-NEXT: bx lr
124 ; MIPS32-LABEL: <test_returning64_arg0>
125 ; MIPS32-NEXT: move v0,a0
126 ; MIPS32-NEXT: move v1,a1
127
106 128
107 define internal i64 @test_returning64_arg1(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { 129 define internal i64 @test_returning64_arg1(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) {
108 entry: 130 entry:
109 ret i64 %arg1 131 ret i64 %arg1
110 } 132 }
111 ; CHECK-LABEL: test_returning64_arg1 133 ; CHECK-LABEL: test_returning64_arg1
112 ; CHECK-NEXT: mov {{.*}} [esp+0xc] 134 ; CHECK-NEXT: mov {{.*}} [esp+0xc]
113 ; CHECK-NEXT: mov {{.*}} [esp+0x10] 135 ; CHECK-NEXT: mov {{.*}} [esp+0x10]
114 ; CHECK: ret 136 ; CHECK: ret
115 ; ARM32-LABEL: test_returning64_arg1 137 ; ARM32-LABEL: test_returning64_arg1
116 ; ARM32-NEXT: mov r0, r2 138 ; ARM32-NEXT: mov r0, r2
117 ; ARM32-NEXT: mov r1, r3 139 ; ARM32-NEXT: mov r1, r3
118 ; ARM32-NEXT: bx lr 140 ; ARM32-NEXT: bx lr
141 ; MIPS32-LABEL: <test_returning64_arg1>
142 ; MIPS32-NEXT: move v0,a2
143 ; MIPS32-NEXT: move v1,a3
119 144
120 define internal i64 @test_returning64_arg2(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { 145 define internal i64 @test_returning64_arg2(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) {
121 entry: 146 entry:
122 ret i64 %arg2 147 ret i64 %arg2
123 } 148 }
124 ; CHECK-LABEL: test_returning64_arg2 149 ; CHECK-LABEL: test_returning64_arg2
125 ; CHECK-NEXT: mov {{.*}} [esp+0x14] 150 ; CHECK-NEXT: mov {{.*}} [esp+0x14]
126 ; CHECK-NEXT: mov {{.*}} [esp+0x18] 151 ; CHECK-NEXT: mov {{.*}} [esp+0x18]
127 ; CHECK: ret 152 ; CHECK: ret
128 ; ARM32-LABEL: test_returning64_arg2 153 ; ARM32-LABEL: test_returning64_arg2
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 ; ARM32-DAG: mov [[REG1:.*]], r1 293 ; ARM32-DAG: mov [[REG1:.*]], r1
269 ; ARM32-DAG: mov [[REG2:.*]], r2 294 ; ARM32-DAG: mov [[REG2:.*]], r2
270 ; ARM32-DAG: mov [[REG3:.*]], r3 295 ; ARM32-DAG: mov [[REG3:.*]], r3
271 ; ARM32: str [[REG2]], [sp] 296 ; ARM32: str [[REG2]], [sp]
272 ; ARM32: str [[REG1]], [sp, #4] 297 ; ARM32: str [[REG1]], [sp, #4]
273 ; ARM32-DAG: mov r0 298 ; ARM32-DAG: mov r0
274 ; ARM32-DAG: mov r1 299 ; ARM32-DAG: mov r1
275 ; ARM32-DAG: mov r2 300 ; ARM32-DAG: mov r2
276 ; ARM32-DAG: mov r3, [[REG3]] 301 ; ARM32-DAG: mov r3, [[REG3]]
277 ; ARM32: bl 302 ; ARM32: bl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698