60 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=gvn < %s | FileCheck %s --check-prefixes=CHECK,MDEP3; RUN: opt -S -passes='gvn<memoryssa>' < %s | FileCheck %s --check-prefixes=CHECK,MSSA4 5define i32 @test1(ptr %p, i1 %C) {6; MDEP-LABEL: define i32 @test1(7; MDEP-SAME: ptr [[P:%.*]], i1 [[C:%.*]]) {8; MDEP-NEXT: [[BLOCK1:.*:]]9; MDEP-NEXT: br i1 [[C]], label %[[BLOCK2:.*]], label %[[BLOCK3:.*]]10; MDEP: [[BLOCK2]]:11; MDEP-NEXT: [[PRE_PRE:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG0:![0-9]+]], !invariant.group [[META1:![0-9]+]]12; MDEP-NEXT: br label %[[BLOCK4:.*]]13; MDEP: [[BLOCK3]]:14; MDEP-NEXT: store i32 0, ptr [[P]], align 415; MDEP-NEXT: br label %[[BLOCK4]]16; MDEP: [[BLOCK4]]:17; MDEP-NEXT: [[PRE:%.*]] = phi i32 [ 0, %[[BLOCK3]] ], [ [[PRE_PRE]], %[[BLOCK2]] ]18; MDEP-NEXT: ret i32 [[PRE]]19;20; MSSA-LABEL: define i32 @test1(21; MSSA-SAME: ptr [[P:%.*]], i1 [[C:%.*]]) {22; MSSA-NEXT: [[BLOCK1:.*:]]23; MSSA-NEXT: br i1 [[C]], label %[[BLOCK2:.*]], label %[[BLOCK3:.*]]24; MSSA: [[BLOCK2]]:25; MSSA-NEXT: br label %[[BLOCK4:.*]]26; MSSA: [[BLOCK3]]:27; MSSA-NEXT: store i32 0, ptr [[P]], align 428; MSSA-NEXT: br label %[[BLOCK4]]29; MSSA: [[BLOCK4]]:30; MSSA-NEXT: [[PRE:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG0:![0-9]+]], !invariant.group [[META1:![0-9]+]]31; MSSA-NEXT: ret i32 [[PRE]]32;33block1:34 br i1 %C, label %block2, label %block335 36block2:37 br label %block438 39block3:40 store i32 0, ptr %p41 br label %block442 43block4:44 %PRE = load i32, ptr %p, !range !0, !invariant.group !145 ret i32 %PRE46}47 48 49!0 = !{i32 40, i32 100}50!1 = !{!"magic ptr"}51;.52; MDEP: [[RNG0]] = !{i32 40, i32 100}53; MDEP: [[META1]] = !{!"magic ptr"}54;.55; MSSA: [[RNG0]] = !{i32 40, i32 100}56; MSSA: [[META1]] = !{!"magic ptr"}57;.58;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:59; CHECK: {{.*}}60