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

Side by Side Diff: tests_lit/llvm2ice_tests/callindirect.pnacl.ll

Issue 647193003: emitIAS for store and indirect calls. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: stuff Created 6 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
« src/IceInstX8632.cpp ('K') | « tests_lit/llvm2ice_tests/8bit.pnacl.ll ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; Test of multiple indirect calls to the same target. Each call 1 ; Test of multiple indirect calls to the same target. Each call
2 ; should be to the same operand, whether it's in a register or on the 2 ; should be to the same operand, whether it's in a register or on the
3 ; stack. 3 ; stack.
4 4
5 ; RUN: %p2i -i %s --args -O2 --verbose none \ 5 ; RUN: %p2i -i %s --args -O2 --verbose none \
6 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ 6 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
7 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 7 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
8 ; RUN: %p2i -i %s --args -Om1 --verbose none \ 8 ; RUN: %p2i -i %s --args -Om1 --verbose none \
9 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ 9 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
10 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - \ 10 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - \
11 ; RUN: | FileCheck --check-prefix=OPTM1 %s 11 ; RUN: | FileCheck --check-prefix=OPTM1 %s
12 ; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s 12 ; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s
13 13
14 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 14 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
15 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 15 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
16 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 16 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
17 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 17 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
18 18
19 define internal void @CallIndirect(i32 %f) { 19 define internal void @CallIndirect(i32 %f) {
20 entry: 20 entry:
21 %__1 = inttoptr i32 %f to void ()* 21 %__1 = inttoptr i32 %f to void ()*
22 call void %__1() 22 call void %__1()
23 call void %__1() 23 call void %__1()
24 call void %__1() 24 call void %__1()
25 call void %__1() 25 call void %__1()
26 call void %__1() 26 call void %__1()
27 ret void 27 ret void
28 } 28 }
29 ; CHECK-LABEL: CallIndirect
29 ; CHECK: call [[REGISTER:[a-z]+]] 30 ; CHECK: call [[REGISTER:[a-z]+]]
30 ; CHECK: call [[REGISTER]] 31 ; CHECK: call [[REGISTER]]
31 ; CHECK: call [[REGISTER]] 32 ; CHECK: call [[REGISTER]]
32 ; CHECK: call [[REGISTER]] 33 ; CHECK: call [[REGISTER]]
33 ; CHECK: call [[REGISTER]] 34 ; CHECK: call [[REGISTER]]
34 ; 35 ;
36 ; OPTM1-LABEL: CallIndirect
35 ; OPTM1: call [[TARGET:.+]] 37 ; OPTM1: call [[TARGET:.+]]
36 ; OPTM1: call [[TARGET]] 38 ; OPTM1: call [[TARGET]]
37 ; OPTM1: call [[TARGET]] 39 ; OPTM1: call [[TARGET]]
38 ; OPTM1: call [[TARGET]] 40 ; OPTM1: call [[TARGET]]
39 ; OPTM1: call [[TARGET]] 41 ; OPTM1: call [[TARGET]]
40 42
43 @fp_v = internal global [4 x i8] zeroinitializer, align 4
44
45 define internal void @CallIndirectGlobal() {
46 entry:
47 %fp_ptr_i32 = bitcast [4 x i8]* @fp_v to i32*
48 %fp_ptr = load i32* %fp_ptr_i32, align 1
49 %fp = inttoptr i32 %fp_ptr to void ()*
50 call void %fp()
51 call void %fp()
52 call void %fp()
53 call void %fp()
54 ret void
55 }
56 ; CHECK-LABEL: CallIndirectGlobal
57 ; CHECK: call [[REGISTER:[a-z]+]]
58 ; CHECK: call [[REGISTER]]
59 ; CHECK: call [[REGISTER]]
60 ; CHECK: call [[REGISTER]]
61 ;
62 ; OPTM1-LABEL: CallIndirectGlobal
63 ; OPTM1: call [[TARGET:.+]]
64 ; OPTM1: call [[TARGET]]
65 ; OPTM1: call [[TARGET]]
66 ; OPTM1: call [[TARGET]]
67
68 ; Calling an absolute address is used for non-IRT PNaCl pexes to directly
69 ; access syscall trampolines. Do we need to support this?
70 ; define internal void @CallIndirectConst() {
71 ; entry:
72 ; %__1 = inttoptr i32 66496 to void ()*
73 ; call void %__1()
74 ; call void %__1()
75 ; call void %__1()
76 ; call void %__1()
77 ; call void %__1()
78 ; ret void
79 ; }
80
41 ; ERRORS-NOT: ICE translation error 81 ; ERRORS-NOT: ICE translation error
OLDNEW
« src/IceInstX8632.cpp ('K') | « tests_lit/llvm2ice_tests/8bit.pnacl.ll ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698