|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
2 | | -; RUN: opt -S -passes=gvn < %s | FileCheck %s |
3 | | - |
| 2 | +; RUN: opt -S -passes=gvn < %s | FileCheck --check-prefixes=CHECK,MDEP %s |
| 3 | +; RUN: opt -S -passes='gvn<memoryssa;no-memdep>' -verify-analysis-invalidation < %s | FileCheck --check-prefixes=CHECK,MSSA %s |
4 | 4 | declare i32 @setjmp() returns_twice |
5 | 5 | declare void @longjmp() |
6 | 6 | declare ptr @malloc(i64) |
@@ -38,18 +38,32 @@ if.end: |
38 | 38 |
|
39 | 39 | ; We are still allowed to optimize non-volatile accesses to allocas. |
40 | 40 | define i32 @test_alloca() { |
41 | | -; CHECK-LABEL: define i32 @test_alloca() { |
42 | | -; CHECK-NEXT: [[ALLOC:%.*]] = alloca i43, align 8 |
43 | | -; CHECK-NEXT: store i32 10, ptr [[ALLOC]], align 4 |
44 | | -; CHECK-NEXT: [[SJ:%.*]] = call i32 @setjmp() |
45 | | -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[SJ]], 0 |
46 | | -; CHECK-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]] |
47 | | -; CHECK: [[IF_THEN]]: |
48 | | -; CHECK-NEXT: store i32 20, ptr [[ALLOC]], align 4 |
49 | | -; CHECK-NEXT: call void @longjmp() |
50 | | -; CHECK-NEXT: unreachable |
51 | | -; CHECK: [[IF_END]]: |
52 | | -; CHECK-NEXT: ret i32 10 |
| 41 | +; MDEP-LABEL: define i32 @test_alloca() { |
| 42 | +; MDEP-NEXT: [[ALLOC:%.*]] = alloca i43, align 8 |
| 43 | +; MDEP-NEXT: store i32 10, ptr [[ALLOC]], align 4 |
| 44 | +; MDEP-NEXT: [[SJ:%.*]] = call i32 @setjmp() |
| 45 | +; MDEP-NEXT: [[CMP:%.*]] = icmp eq i32 [[SJ]], 0 |
| 46 | +; MDEP-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]] |
| 47 | +; MDEP: [[IF_THEN]]: |
| 48 | +; MDEP-NEXT: store i32 20, ptr [[ALLOC]], align 4 |
| 49 | +; MDEP-NEXT: call void @longjmp() |
| 50 | +; MDEP-NEXT: unreachable |
| 51 | +; MDEP: [[IF_END]]: |
| 52 | +; MDEP-NEXT: ret i32 10 |
| 53 | +; |
| 54 | +; MSSA-LABEL: define i32 @test_alloca() { |
| 55 | +; MSSA-NEXT: [[ALLOC:%.*]] = alloca i43, align 8 |
| 56 | +; MSSA-NEXT: store i32 10, ptr [[ALLOC]], align 4 |
| 57 | +; MSSA-NEXT: [[SJ:%.*]] = call i32 @setjmp() |
| 58 | +; MSSA-NEXT: [[CMP:%.*]] = icmp eq i32 [[SJ]], 0 |
| 59 | +; MSSA-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]] |
| 60 | +; MSSA: [[IF_THEN]]: |
| 61 | +; MSSA-NEXT: store i32 20, ptr [[ALLOC]], align 4 |
| 62 | +; MSSA-NEXT: call void @longjmp() |
| 63 | +; MSSA-NEXT: unreachable |
| 64 | +; MSSA: [[IF_END]]: |
| 65 | +; MSSA-NEXT: [[RES:%.*]] = load i32, ptr [[ALLOC]], align 4 |
| 66 | +; MSSA-NEXT: ret i32 [[RES]] |
53 | 67 | ; |
54 | 68 | %alloc = alloca i43 |
55 | 69 | store i32 10, ptr %alloc, align 4 |
|
0 commit comments