82 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=gvn -S %s | FileCheck %s3 4; Test for PR46054. Make sure we correctly invalidate MemoryDependenceAnalysis,5; after removing a nonlocaldef.6 7target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"8 9define void @test_double(ptr %data) {10; CHECK-LABEL: @test_double(11; CHECK-NEXT: entry:12; CHECK-NEXT: [[LUC:%.*]] = tail call noalias nonnull ptr @data()13; CHECK-NEXT: store i64 1, ptr [[LUC]], align 8, !invariant.group !014; CHECK-NEXT: call void @fn(i64 1)15; CHECK-NEXT: br i1 true, label [[A:%.*]], label [[ENTRY_B_CRIT_EDGE:%.*]]16; CHECK: entry.B_crit_edge:17; CHECK-NEXT: br label [[B:%.*]]18; CHECK: A:19; CHECK-NEXT: br label [[B]]20; CHECK: B:21; CHECK-NEXT: call void @fn(i64 1)22; CHECK-NEXT: ret void23;24entry:25 %luc = tail call noalias nonnull ptr @data()26 store i64 1, ptr %luc, !invariant.group !027 %QQ = load i64, ptr %luc, !invariant.group !028 call void @fn(i64 %QQ)29 br i1 true, label %A, label %B30 31A: ; preds = %loop32 br label %B33 34B: ; preds = %A, %loop35 %QQ.1 = load i64, ptr %luc, !invariant.group !036 call void @fn(i64 %QQ.1)37 ret void38}39 40declare void @fn(i64)41 42declare noalias ptr @data()43 44 45define void @test_double_ptr(ptr %data) {46; CHECK-LABEL: @test_double_ptr(47; CHECK-NEXT: entry:48; CHECK-NEXT: [[LUC:%.*]] = tail call noalias nonnull ptr @data.ptr()49; CHECK-NEXT: store ptr null, ptr [[LUC]], align 8, !invariant.group !050; CHECK-NEXT: call void @fn.ptr(ptr null)51; CHECK-NEXT: br i1 true, label [[A:%.*]], label [[ENTRY_B_CRIT_EDGE:%.*]]52; CHECK: entry.B_crit_edge:53; CHECK-NEXT: br label [[B:%.*]]54; CHECK: A:55; CHECK-NEXT: br label [[B]]56; CHECK: B:57; CHECK-NEXT: call void @fn.ptr(ptr null)58; CHECK-NEXT: ret void59;60entry:61 %luc = tail call noalias nonnull ptr @data.ptr()62 store ptr null, ptr %luc, !invariant.group !063 %QQ = load ptr, ptr %luc, !invariant.group !064 call void @fn.ptr(ptr %QQ)65 br i1 true, label %A, label %B66 67A: ; preds = %loop68 br label %B69 70B: ; preds = %A, %loop71 %QQ.1 = load ptr, ptr %luc, !invariant.group !072 call void @fn.ptr(ptr %QQ.1)73 ret void74}75 76 77declare void @fn.ptr(ptr)78 79declare noalias ptr @data.ptr()80 81!0 = distinct !{}82