|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
2 |
| -; RUN: opt -basic-aa -dse -S %s | FileCheck %s |
| 2 | +; RUN: opt -basic-aa -dse -dse-optimize-memoryssa=false -S %s | FileCheck --check-prefixes=CHECK,UNOPT %s |
| 3 | +; RUN: opt -basic-aa -dse -dse-optimize-memoryssa -S %s | FileCheck --check-prefixes=CHECK,OPT %s |
| 4 | +; RUN: opt -basic-aa -dse -S %s | FileCheck --check-prefixes=CHECK,UNOPT %s |
3 | 5 |
|
4 | 6 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
5 | 7 |
|
@@ -315,17 +317,28 @@ bb3:
|
315 | 317 |
|
316 | 318 | ; The store in bb3 can be eliminated, because the store in bb1 cannot alias it.
|
317 | 319 | define void @test10(i32* noalias %P, i32* %Q, i1 %c) {
|
318 |
| -; CHECK-LABEL: @test10( |
319 |
| -; CHECK-NEXT: store i32 0, i32* [[P:%.*]], align 4 |
320 |
| -; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
321 |
| -; CHECK: bb1: |
322 |
| -; CHECK-NEXT: store i32 10, i32* [[Q:%.*]], align 4 |
323 |
| -; CHECK-NEXT: br label [[BB3:%.*]] |
324 |
| -; CHECK: bb2: |
325 |
| -; CHECK-NEXT: ret void |
326 |
| -; CHECK: bb3: |
327 |
| -; CHECK-NEXT: store i32 0, i32* [[P]], align 4 |
328 |
| -; CHECK-NEXT: ret void |
| 320 | +; UNOPT-LABEL: @test10( |
| 321 | +; UNOPT-NEXT: store i32 0, i32* [[P:%.*]], align 4 |
| 322 | +; UNOPT-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
| 323 | +; UNOPT: bb1: |
| 324 | +; UNOPT-NEXT: store i32 10, i32* [[Q:%.*]], align 4 |
| 325 | +; UNOPT-NEXT: br label [[BB3:%.*]] |
| 326 | +; UNOPT: bb2: |
| 327 | +; UNOPT-NEXT: ret void |
| 328 | +; UNOPT: bb3: |
| 329 | +; UNOPT-NEXT: store i32 0, i32* [[P]], align 4 |
| 330 | +; UNOPT-NEXT: ret void |
| 331 | +; |
| 332 | +; OPT-LABEL: @test10( |
| 333 | +; OPT-NEXT: store i32 0, i32* [[P:%.*]], align 4 |
| 334 | +; OPT-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
| 335 | +; OPT: bb1: |
| 336 | +; OPT-NEXT: store i32 10, i32* [[Q:%.*]], align 4 |
| 337 | +; OPT-NEXT: br label [[BB3:%.*]] |
| 338 | +; OPT: bb2: |
| 339 | +; OPT-NEXT: ret void |
| 340 | +; OPT: bb3: |
| 341 | +; OPT-NEXT: ret void |
329 | 342 | ;
|
330 | 343 | store i32 0, i32* %P
|
331 | 344 | br i1 %c, label %bb1, label %bb2
|
@@ -412,13 +425,19 @@ define void @test12_memset_simple(i8* %ptr) {
|
412 | 425 | }
|
413 | 426 |
|
414 | 427 | define void @test12_memset_other_store_in_between(i8* %ptr) {
|
415 |
| -; CHECK-LABEL: @test12_memset_other_store_in_between( |
416 |
| -; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* [[PTR:%.*]], i8 0, i64 10, i1 false) |
417 |
| -; CHECK-NEXT: [[PTR_4:%.*]] = getelementptr i8, i8* [[PTR]], i64 4 |
418 |
| -; CHECK-NEXT: store i8 8, i8* [[PTR_4]], align 1 |
419 |
| -; CHECK-NEXT: [[PTR_5:%.*]] = getelementptr i8, i8* [[PTR]], i64 5 |
420 |
| -; CHECK-NEXT: store i8 0, i8* [[PTR_5]], align 1 |
421 |
| -; CHECK-NEXT: ret void |
| 428 | +; UNOPT-LABEL: @test12_memset_other_store_in_between( |
| 429 | +; UNOPT-NEXT: call void @llvm.memset.p0i8.i64(i8* [[PTR:%.*]], i8 0, i64 10, i1 false) |
| 430 | +; UNOPT-NEXT: [[PTR_4:%.*]] = getelementptr i8, i8* [[PTR]], i64 4 |
| 431 | +; UNOPT-NEXT: store i8 8, i8* [[PTR_4]], align 1 |
| 432 | +; UNOPT-NEXT: [[PTR_5:%.*]] = getelementptr i8, i8* [[PTR]], i64 5 |
| 433 | +; UNOPT-NEXT: store i8 0, i8* [[PTR_5]], align 1 |
| 434 | +; UNOPT-NEXT: ret void |
| 435 | +; |
| 436 | +; OPT-LABEL: @test12_memset_other_store_in_between( |
| 437 | +; OPT-NEXT: call void @llvm.memset.p0i8.i64(i8* [[PTR:%.*]], i8 0, i64 10, i1 false) |
| 438 | +; OPT-NEXT: [[PTR_4:%.*]] = getelementptr i8, i8* [[PTR]], i64 4 |
| 439 | +; OPT-NEXT: store i8 8, i8* [[PTR_4]], align 1 |
| 440 | +; OPT-NEXT: ret void |
422 | 441 | ;
|
423 | 442 | call void @llvm.memset.p0i8.i64(i8* %ptr, i8 0, i64 10, i1 false)
|
424 | 443 | %ptr.4 = getelementptr i8, i8* %ptr, i64 4
|
@@ -525,8 +544,8 @@ declare i8* @strcat(i8*, i8*) nounwind argmemonly
|
525 | 544 |
|
526 | 545 | define void @test14_strcat(i8* noalias %P, i8* noalias %Q) {
|
527 | 546 | ; CHECK-LABEL: @test14_strcat(
|
528 |
| -; CHECK-NEXT: call i8* @strcat(i8* [[P:%.*]], i8* [[Q:%.*]]) |
529 |
| -; CHECK-NEXT: call i8* @strcat(i8* [[P]], i8* [[Q]]) |
| 547 | +; CHECK-NEXT: [[CALL1:%.*]] = call i8* @strcat(i8* [[P:%.*]], i8* [[Q:%.*]]) |
| 548 | +; CHECK-NEXT: [[CALL2:%.*]] = call i8* @strcat(i8* [[P]], i8* [[Q]]) |
530 | 549 | ; CHECK-NEXT: ret void
|
531 | 550 | ;
|
532 | 551 | %call1 = call i8* @strcat(i8* %P, i8* %Q)
|
|
0 commit comments