|
2 | 2 | ; RUN: opt < %s -passes=dse -enable-dse-initializes-attr-improvement -S | FileCheck %s |
3 | 3 |
|
4 | 4 | declare void @p1_write_only(ptr nocapture noundef writeonly initializes((0, 2)) dead_on_unwind) |
5 | | - |
6 | 5 | declare void @p1_write_then_read(ptr nocapture noundef initializes((0, 2)) dead_on_unwind) |
7 | | - memory(argmem: readwrite, inaccessiblemem: readwrite) |
8 | | - |
9 | 6 | declare void @p1_clobber(ptr nocapture noundef) |
10 | | - |
11 | 7 | declare void @p2_same_range(ptr nocapture noundef initializes((0, 2)) dead_on_unwind, ptr nocapture noundef initializes((0, 2)) dead_on_unwind) |
12 | | - memory(argmem: readwrite, inaccessiblemem: readwrite) |
13 | | - |
14 | 8 | declare void @p2_no_init(ptr nocapture noundef initializes((0, 2)) dead_on_unwind, ptr nocapture noundef dead_on_unwind) |
15 | | - |
16 | 9 | declare void @p2_no_dead_on_unwind(ptr nocapture noundef initializes((0, 2)) dead_on_unwind, ptr nocapture noundef initializes((0, 2))) |
17 | | - memory(argmem: readwrite, inaccessiblemem: readwrite) |
18 | | - |
19 | 10 | declare void @p2_no_dead_on_unwind_but_nounwind(ptr nocapture noundef initializes((0, 2)) dead_on_unwind, ptr nocapture noundef initializes((0, 2))) nounwind |
20 | | - memory(argmem: readwrite, inaccessiblemem: readwrite) |
21 | 11 |
|
22 | 12 | ; Function Attrs: mustprogress nounwind uwtable |
23 | 13 | define i16 @p1_write_only_caller() { |
@@ -225,25 +215,23 @@ define i16 @p2_no_dead_on_unwind_but_nounwind_alias_caller() { |
225 | 215 | } |
226 | 216 |
|
227 | 217 | declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind |
228 | | - |
229 | 218 | declare void @large_p1(ptr nocapture noundef initializes((0, 200))) nounwind |
230 | | - memory(argmem: readwrite, inaccessiblemem: readwrite) |
231 | | - |
232 | 219 | declare void @large_p2(ptr nocapture noundef initializes((0, 200)), ptr nocapture noundef initializes((0, 100))) nounwind |
233 | | - memory(argmem: readwrite, inaccessiblemem: readwrite) |
234 | 220 |
|
235 | 221 | ; Function Attrs: mustprogress nounwind uwtable |
236 | 222 | define i16 @large_p1_caller() { |
237 | 223 | ; CHECK-LABEL: @large_p1_caller( |
238 | | -; CHECK-NEXT: [[PTR:%.*]] = alloca [200 x i8], align 1 |
239 | | -; CHECK-NEXT: call void @large_p1(ptr [[PTR]]) |
240 | | -; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[PTR]], align 2 |
| 224 | +; CHECK-NEXT: [[PTR:%.*]] = alloca [300 x i8], align 1 |
| 225 | +; CHECK-NEXT: [[TMP:%.*]] = getelementptr i8, ptr [[PTR]], i64 100 |
| 226 | +; CHECK-NEXT: call void @large_p1(ptr [[TMP]]) |
| 227 | +; CHECK-NEXT: [[L:%.*]] = load i16, ptr [[TMP]], align 2 |
241 | 228 | ; CHECK-NEXT: ret i16 [[L]] |
242 | 229 | ; |
243 | | - %ptr = alloca [200 x i8] |
244 | | - call void @llvm.memset.p0.i64(ptr %ptr, i8 42, i64 100, i1 false) |
245 | | - call void @large_p1(ptr %ptr) |
246 | | - %l = load i16, ptr %ptr |
| 230 | + %ptr = alloca [300 x i8] |
| 231 | + %tmp = getelementptr i8, ptr %ptr, i64 100 |
| 232 | + call void @llvm.memset.p0.i64(ptr %tmp, i8 42, i64 100, i1 false) |
| 233 | + call void @large_p1(ptr %tmp) |
| 234 | + %l = load i16, ptr %tmp |
247 | 235 | ret i16 %l |
248 | 236 | } |
249 | 237 |
|
@@ -315,8 +303,7 @@ define i16 @large_p2_may_or_partial_alias_caller2(ptr %base1, ptr %base2) { |
315 | 303 |
|
316 | 304 | @g = global i16 123, align 2 |
317 | 305 |
|
318 | | -declare void @read_global(ptr nocapture noundef initializes((0, 2))) |
319 | | - memory(read, argmem: write, inaccessiblemem: none) nounwind |
| 306 | +declare void @read_global(ptr nocapture noundef initializes((0, 2))) nounwind |
320 | 307 |
|
321 | 308 | define i16 @global_var_alias() { |
322 | 309 | ; CHECK-LABEL: @global_var_alias( |
|
0 commit comments