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

Side by Side Diff: test/Transforms/NaCl/expand-getelementptr.ll

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 9 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
(Empty)
1 ; RUN: opt < %s -expand-getelementptr -S | FileCheck %s
2
3 target datalayout = "p:32:32:32"
4
5 %MyStruct = type { i8, i32, i8 }
6 %MyArray = type { [100 x i64] }
7 %MyArrayOneByte = type { [100 x i8] }
8
9
10 ; Test indexing struct field
11 define i8* @test_struct_field(%MyStruct* %ptr) {
12 %addr = getelementptr %MyStruct* %ptr, i32 0, i32 2
13 ret i8* %addr
14 }
15 ; CHECK: @test_struct_field
16 ; CHECK-NEXT: %gep_int = ptrtoint %MyStruct* %ptr to i32
17 ; CHECK-NEXT: %gep = add i32 %gep_int, 8
18 ; CHECK-NEXT: %addr = inttoptr i32 %gep to i8*
19 ; CHECK-NEXT: ret i8* %addr
20
21
22 ; Test non-constant index into an array
23 define i64* @test_array_index(%MyArray* %ptr, i32 %index) {
24 %addr = getelementptr %MyArray* %ptr, i32 0, i32 0, i32 %index
25 ret i64* %addr
26 }
27 ; CHECK: @test_array_index
28 ; CHECK-NEXT: %gep_int = ptrtoint %MyArray* %ptr to i32
29 ; CHECK-NEXT: %gep_array = mul i32 %index, 8
30 ; CHECK-NEXT: %gep = add i32 %gep_int, %gep_array
31 ; CHECK-NEXT: %addr = inttoptr i32 %gep to i64*
32 ; CHECK-NEXT: ret i64* %addr
33
34
35 ; Test constant index into an array (as a pointer)
36 define %MyStruct* @test_ptr_add(%MyStruct* %ptr) {
37 %addr = getelementptr %MyStruct* %ptr, i32 2
38 ret %MyStruct* %addr
39 }
40 ; CHECK: @test_ptr_add
41 ; CHECK-NEXT: %gep_int = ptrtoint %MyStruct* %ptr to i32
42 ; CHECK-NEXT: %gep = add i32 %gep_int, 24
43 ; CHECK-NEXT: %addr = inttoptr i32 %gep to %MyStruct*
44 ; CHECK-NEXT: ret %MyStruct* %addr
45
46
47 ; Test that additions and multiplications are combined properly
48 define i64* @test_add_and_index(%MyArray* %ptr, i32 %index) {
49 %addr = getelementptr %MyArray* %ptr, i32 1, i32 0, i32 %index
50 ret i64* %addr
51 }
52 ; CHECK: @test_add_and_index
53 ; CHECK-NEXT: %gep_int = ptrtoint %MyArray* %ptr to i32
54 ; CHECK-NEXT: %gep = add i32 %gep_int, 800
55 ; CHECK-NEXT: %gep_array = mul i32 %index, 8
56 ; CHECK-NEXT: %gep1 = add i32 %gep, %gep_array
57 ; CHECK-NEXT: %addr = inttoptr i32 %gep1 to i64*
58 ; CHECK-NEXT: ret i64* %addr
59
60
61 ; Test that we don't multiply by 1 unnecessarily
62 define i8* @test_add_and_index_one_byte(%MyArrayOneByte* %ptr, i32 %index) {
63 %addr = getelementptr %MyArrayOneByte* %ptr, i32 1, i32 0, i32 %index
64 ret i8* %addr
65 }
66 ; CHECK: @test_add_and_index
67 ; CHECK-NEXT: %gep_int = ptrtoint %MyArrayOneByte* %ptr to i32
68 ; CHECK-NEXT: %gep = add i32 %gep_int, 100
69 ; CHECK-NEXT: %gep1 = add i32 %gep, %index
70 ; CHECK-NEXT: %addr = inttoptr i32 %gep1 to i8*
71 ; CHECK-NEXT: ret i8* %addr
72
73
74 ; Test >32-bit array index
75 define i64* @test_array_index64(%MyArray* %ptr, i64 %index) {
76 %addr = getelementptr %MyArray* %ptr, i32 0, i32 0, i64 %index
77 ret i64* %addr
78 }
79 ; CHECK: @test_array_index64
80 ; CHECK-NEXT: %gep_int = ptrtoint %MyArray* %ptr to i32
81 ; CHECK-NEXT: %gep_trunc = trunc i64 %index to i32
82 ; CHECK-NEXT: %gep_array = mul i32 %gep_trunc, 8
83 ; CHECK-NEXT: %gep = add i32 %gep_int, %gep_array
84 ; CHECK-NEXT: %addr = inttoptr i32 %gep to i64*
85 ; CHECK-NEXT: ret i64* %addr
86
87
88 ; Test <32-bit array index
89 define i64* @test_array_index16(%MyArray* %ptr, i16 %index) {
90 %addr = getelementptr %MyArray* %ptr, i32 0, i32 0, i16 %index
91 ret i64* %addr
92 }
93 ; CHECK: @test_array_index16
94 ; CHECK-NEXT: %gep_int = ptrtoint %MyArray* %ptr to i32
95 ; CHECK-NEXT: %gep_sext = sext i16 %index to i32
96 ; CHECK-NEXT: %gep_array = mul i32 %gep_sext, 8
97 ; CHECK-NEXT: %gep = add i32 %gep_int, %gep_array
98 ; CHECK-NEXT: %addr = inttoptr i32 %gep to i64*
99 ; CHECK-NEXT: ret i64* %addr
100
101
102 ; Test >32-bit constant array index
103 define i64* @test_array_index64_const(%MyArray* %ptr) {
104 %addr = getelementptr %MyArray* %ptr, i32 0, i32 0, i64 100
105 ret i64* %addr
106 }
107 ; CHECK: @test_array_index64_const
108 ; CHECK-NEXT: %gep_int = ptrtoint %MyArray* %ptr to i32
109 ; CHECK-NEXT: %gep = add i32 %gep_int, 800
110 ; CHECK-NEXT: %addr = inttoptr i32 %gep to i64*
111 ; CHECK-NEXT: ret i64* %addr
112
113
114 ; Test <32-bit constant array index -- test sign extension
115 define i64* @test_array_index16_const(%MyArray* %ptr) {
116 %addr = getelementptr %MyArray* %ptr, i32 0, i32 0, i16 -100
117 ret i64* %addr
118 }
119 ; CHECK: @test_array_index16_const
120 ; CHECK-NEXT: %gep_int = ptrtoint %MyArray* %ptr to i32
121 ; CHECK-NEXT: %gep = add i32 %gep_int, -800
122 ; CHECK-NEXT: %addr = inttoptr i32 %gep to i64*
123 ; CHECK-NEXT: ret i64* %addr
OLDNEW
« no previous file with comments | « test/Transforms/NaCl/expand-ctors-zeroinit.ll ('k') | test/Transforms/NaCl/expand-indirectbr.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698