OLD | NEW |
1 ; Test if we can read alloca instructions. | 1 ; Test if we can read alloca instructions. |
2 | 2 |
3 ; RUN: %p2i -i %s --insts | FileCheck %s | 3 ; RUN: %p2i -i %s --insts | FileCheck %s |
4 ; RUN: %if --need=allow_disable_ir_gen --command \ | 4 ; RUN: %if --need=allow_disable_ir_gen --command \ |
5 ; RUN: %p2i -i %s --args -notranslate -timing -no-ir-gen \ | 5 ; RUN: %p2i -i %s --args -notranslate -timing -no-ir-gen \ |
6 ; RUN: | %if --need=allow_disable_ir_gen --command \ | 6 ; RUN: | %if --need=allow_disable_ir_gen --command \ |
7 ; RUN: FileCheck --check-prefix=NOIR %s | 7 ; RUN: FileCheck --check-prefix=NOIR %s |
8 | 8 |
9 ; Show examples where size is defined by a constant. | 9 ; Show examples where size is defined by a constant. |
10 | 10 |
11 define i32 @AllocaA0Size1() { | 11 define internal i32 @AllocaA0Size1() { |
12 entry: | 12 entry: |
13 %array = alloca i8, i32 1 | 13 %array = alloca i8, i32 1 |
14 %addr = ptrtoint i8* %array to i32 | 14 %addr = ptrtoint i8* %array to i32 |
15 ret i32 %addr | 15 ret i32 %addr |
16 | 16 |
17 ; CHECK: entry: | 17 ; CHECK: entry: |
18 ; CHECK-NEXT: %array = alloca i8, i32 1 | 18 ; CHECK-NEXT: %array = alloca i8, i32 1 |
19 ; CHECK-NEXT: ret i32 %array | 19 ; CHECK-NEXT: ret i32 %array |
20 } | 20 } |
21 | 21 |
22 define i32 @AllocaA0Size2() { | 22 define internal i32 @AllocaA0Size2() { |
23 entry: | 23 entry: |
24 %array = alloca i8, i32 2 | 24 %array = alloca i8, i32 2 |
25 %addr = ptrtoint i8* %array to i32 | 25 %addr = ptrtoint i8* %array to i32 |
26 ret i32 %addr | 26 ret i32 %addr |
27 | 27 |
28 ; CHECK: entry: | 28 ; CHECK: entry: |
29 ; CHECK-NEXT: %array = alloca i8, i32 2 | 29 ; CHECK-NEXT: %array = alloca i8, i32 2 |
30 ; CHECK-NEXT: ret i32 %array | 30 ; CHECK-NEXT: ret i32 %array |
31 } | 31 } |
32 | 32 |
33 define i32 @AllocaA0Size3() { | 33 define internal i32 @AllocaA0Size3() { |
34 entry: | 34 entry: |
35 %array = alloca i8, i32 3 | 35 %array = alloca i8, i32 3 |
36 %addr = ptrtoint i8* %array to i32 | 36 %addr = ptrtoint i8* %array to i32 |
37 ret i32 %addr | 37 ret i32 %addr |
38 | 38 |
39 ; CHECK: entry: | 39 ; CHECK: entry: |
40 ; CHECK-NEXT: %array = alloca i8, i32 3 | 40 ; CHECK-NEXT: %array = alloca i8, i32 3 |
41 ; CHECK-NEXT: ret i32 %array | 41 ; CHECK-NEXT: ret i32 %array |
42 } | 42 } |
43 | 43 |
44 define i32 @AllocaA0Size4() { | 44 define internal i32 @AllocaA0Size4() { |
45 entry: | 45 entry: |
46 %array = alloca i8, i32 4 | 46 %array = alloca i8, i32 4 |
47 %addr = ptrtoint i8* %array to i32 | 47 %addr = ptrtoint i8* %array to i32 |
48 ret i32 %addr | 48 ret i32 %addr |
49 | 49 |
50 ; CHECK: entry: | 50 ; CHECK: entry: |
51 ; CHECK-NEXT: %array = alloca i8, i32 4 | 51 ; CHECK-NEXT: %array = alloca i8, i32 4 |
52 ; CHECK-NEXT: ret i32 %array | 52 ; CHECK-NEXT: ret i32 %array |
53 } | 53 } |
54 | 54 |
55 define i32 @AllocaA1Size4(i32 %n) { | 55 define internal i32 @AllocaA1Size4(i32 %n) { |
56 entry: | 56 entry: |
57 %array = alloca i8, i32 4, align 1 | 57 %array = alloca i8, i32 4, align 1 |
58 %addr = ptrtoint i8* %array to i32 | 58 %addr = ptrtoint i8* %array to i32 |
59 ret i32 %addr | 59 ret i32 %addr |
60 | 60 |
61 ; CHECK: entry: | 61 ; CHECK: entry: |
62 ; CHECK-NEXT: %array = alloca i8, i32 4, align 1 | 62 ; CHECK-NEXT: %array = alloca i8, i32 4, align 1 |
63 ; CHECK-NEXT: ret i32 %array | 63 ; CHECK-NEXT: ret i32 %array |
64 } | 64 } |
65 | 65 |
66 define i32 @AllocaA2Size4(i32 %n) { | 66 define internal i32 @AllocaA2Size4(i32 %n) { |
67 entry: | 67 entry: |
68 %array = alloca i8, i32 4, align 2 | 68 %array = alloca i8, i32 4, align 2 |
69 %addr = ptrtoint i8* %array to i32 | 69 %addr = ptrtoint i8* %array to i32 |
70 ret i32 %addr | 70 ret i32 %addr |
71 | 71 |
72 ; CHECK: entry: | 72 ; CHECK: entry: |
73 ; CHECK-NEXT: %array = alloca i8, i32 4, align 2 | 73 ; CHECK-NEXT: %array = alloca i8, i32 4, align 2 |
74 ; CHECK-NEXT: ret i32 %array | 74 ; CHECK-NEXT: ret i32 %array |
75 } | 75 } |
76 | 76 |
77 define i32 @AllocaA8Size4(i32 %n) { | 77 define internal i32 @AllocaA8Size4(i32 %n) { |
78 entry: | 78 entry: |
79 %array = alloca i8, i32 4, align 8 | 79 %array = alloca i8, i32 4, align 8 |
80 %addr = ptrtoint i8* %array to i32 | 80 %addr = ptrtoint i8* %array to i32 |
81 ret i32 %addr | 81 ret i32 %addr |
82 | 82 |
83 ; CHECK: entry: | 83 ; CHECK: entry: |
84 ; CHECK-NEXT: %array = alloca i8, i32 4, align 8 | 84 ; CHECK-NEXT: %array = alloca i8, i32 4, align 8 |
85 ; CHECK-NEXT: ret i32 %array | 85 ; CHECK-NEXT: ret i32 %array |
86 } | 86 } |
87 | 87 |
88 define i32 @Alloca16Size4(i32 %n) { | 88 define internal i32 @Alloca16Size4(i32 %n) { |
89 entry: | 89 entry: |
90 %array = alloca i8, i32 4, align 16 | 90 %array = alloca i8, i32 4, align 16 |
91 %addr = ptrtoint i8* %array to i32 | 91 %addr = ptrtoint i8* %array to i32 |
92 ret i32 %addr | 92 ret i32 %addr |
93 | 93 |
94 ; CHECK: entry: | 94 ; CHECK: entry: |
95 ; CHECK-NEXT: %array = alloca i8, i32 4, align 16 | 95 ; CHECK-NEXT: %array = alloca i8, i32 4, align 16 |
96 ; CHECK-NEXT: ret i32 %array | 96 ; CHECK-NEXT: ret i32 %array |
97 } | 97 } |
98 | 98 |
99 ; Show examples where size is not known at compile time. | 99 ; Show examples where size is not known at compile time. |
100 | 100 |
101 define i32 @AllocaVarsizeA0(i32 %n) { | 101 define internal i32 @AllocaVarsizeA0(i32 %n) { |
102 entry: | 102 entry: |
103 %array = alloca i8, i32 %n | 103 %array = alloca i8, i32 %n |
104 %addr = ptrtoint i8* %array to i32 | 104 %addr = ptrtoint i8* %array to i32 |
105 ret i32 %addr | 105 ret i32 %addr |
106 | 106 |
107 ; CHECK: entry: | 107 ; CHECK: entry: |
108 ; CHECK-NEXT: %array = alloca i8, i32 %n | 108 ; CHECK-NEXT: %array = alloca i8, i32 %n |
109 ; CHECK-NEXT: ret i32 %array | 109 ; CHECK-NEXT: ret i32 %array |
110 } | 110 } |
111 | 111 |
112 define i32 @AllocaVarsizeA1(i32 %n) { | 112 define internal i32 @AllocaVarsizeA1(i32 %n) { |
113 entry: | 113 entry: |
114 %array = alloca i8, i32 %n, align 1 | 114 %array = alloca i8, i32 %n, align 1 |
115 %addr = ptrtoint i8* %array to i32 | 115 %addr = ptrtoint i8* %array to i32 |
116 ret i32 %addr | 116 ret i32 %addr |
117 | 117 |
118 ; CHECK: entry: | 118 ; CHECK: entry: |
119 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 1 | 119 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 1 |
120 ; CHECK-NEXT: ret i32 %array | 120 ; CHECK-NEXT: ret i32 %array |
121 } | 121 } |
122 | 122 |
123 define i32 @AllocaVarsizeA2(i32 %n) { | 123 define internal i32 @AllocaVarsizeA2(i32 %n) { |
124 entry: | 124 entry: |
125 %array = alloca i8, i32 %n, align 2 | 125 %array = alloca i8, i32 %n, align 2 |
126 %addr = ptrtoint i8* %array to i32 | 126 %addr = ptrtoint i8* %array to i32 |
127 ret i32 %addr | 127 ret i32 %addr |
128 | 128 |
129 ; CHECK: entry: | 129 ; CHECK: entry: |
130 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 2 | 130 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 2 |
131 ; CHECK-NEXT: ret i32 %array | 131 ; CHECK-NEXT: ret i32 %array |
132 } | 132 } |
133 | 133 |
134 define i32 @AllocaVarsizeA4(i32 %n) { | 134 define internal i32 @AllocaVarsizeA4(i32 %n) { |
135 entry: | 135 entry: |
136 %array = alloca i8, i32 %n, align 4 | 136 %array = alloca i8, i32 %n, align 4 |
137 %addr = ptrtoint i8* %array to i32 | 137 %addr = ptrtoint i8* %array to i32 |
138 ret i32 %addr | 138 ret i32 %addr |
139 | 139 |
140 ; CHECK: entry: | 140 ; CHECK: entry: |
141 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 4 | 141 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 4 |
142 ; CHECK-NEXT: ret i32 %array | 142 ; CHECK-NEXT: ret i32 %array |
143 } | 143 } |
144 | 144 |
145 define i32 @AllocaVarsizeA8(i32 %n) { | 145 define internal i32 @AllocaVarsizeA8(i32 %n) { |
146 entry: | 146 entry: |
147 %array = alloca i8, i32 %n, align 8 | 147 %array = alloca i8, i32 %n, align 8 |
148 %addr = ptrtoint i8* %array to i32 | 148 %addr = ptrtoint i8* %array to i32 |
149 ret i32 %addr | 149 ret i32 %addr |
150 | 150 |
151 ; CHECK: entry: | 151 ; CHECK: entry: |
152 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 8 | 152 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 8 |
153 ; CHECK-NEXT: ret i32 %array | 153 ; CHECK-NEXT: ret i32 %array |
154 } | 154 } |
155 | 155 |
156 define i32 @AllocaVarsizeA16(i32 %n) { | 156 define internal i32 @AllocaVarsizeA16(i32 %n) { |
157 entry: | 157 entry: |
158 %array = alloca i8, i32 %n, align 16 | 158 %array = alloca i8, i32 %n, align 16 |
159 %addr = ptrtoint i8* %array to i32 | 159 %addr = ptrtoint i8* %array to i32 |
160 ret i32 %addr | 160 ret i32 %addr |
161 | 161 |
162 ; CHECK: entry: | 162 ; CHECK: entry: |
163 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 16 | 163 ; CHECK-NEXT: %array = alloca i8, i32 %n, align 16 |
164 ; CHECK-NEXT: ret i32 %array | 164 ; CHECK-NEXT: ret i32 %array |
165 } | 165 } |
166 | 166 |
167 ; NOIR: Total across all functions | 167 ; NOIR: Total across all functions |
OLD | NEW |