mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
194d144faa
After D76797 the dominator tree is no longer used in LVI, so we can remove it as a pass dependency, and also get rid of the dominator tree enabling/disabling logic in JumpThreading. Apart from cleaning up the code, this also clarifies LVI cache consistency, in that the LVI cache can no longer depend on whether the DT was or wasn't enabled due to pending DT updates at any given time. Differential Revision: https://reviews.llvm.org/D76985
53 lines
2.0 KiB
LLVM
53 lines
2.0 KiB
LLVM
; Test that the lazy value analysis gets invalidated when its dependencies go
|
|
; away. Sadly, you can neither print nor verify LVI so we just have to require
|
|
; it and check that the pass manager does the right thing.
|
|
;
|
|
; Check basic invalidation.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='require<lazy-value-info>,invalidate<lazy-value-info>,require<lazy-value-info>' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-INVALIDATE
|
|
; CHECK-INVALIDATE: Running pass: RequireAnalysisPass
|
|
; CHECK-INVALIDATE: Running analysis: LazyValueAnalysis
|
|
; CHECK-INVALIDATE: Running pass: InvalidateAnalysisPass
|
|
; CHECK-INVALIDATE: Invalidating analysis: LazyValueAnalysis
|
|
; CHECK-INVALIDATE: Running pass: RequireAnalysisPass
|
|
; CHECK-INVALIDATE: Running analysis: LazyValueAnalysis
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
@.str = private unnamed_addr constant [8 x i8] c"a = %l\0A\00", align 1
|
|
|
|
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
|
|
|
|
declare void @hoo(i64*)
|
|
|
|
declare i32 @printf(i8* nocapture readonly, ...)
|
|
|
|
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
|
|
|
|
define void @goo(i32 %N, i64* %b) {
|
|
entry:
|
|
%a.i = alloca i64, align 8
|
|
%tmp = bitcast i64* %a.i to i8*
|
|
%c = getelementptr inbounds i64, i64* %b, i64 0
|
|
br label %for.cond
|
|
|
|
for.cond: ; preds = %for.body, %entry
|
|
%i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
|
|
%cmp = icmp slt i32 %i.0, %N
|
|
br i1 %cmp, label %for.body, label %for.end
|
|
|
|
for.body: ; preds = %for.cond
|
|
call void @llvm.lifetime.start.p0i8(i64 8, i8* %tmp)
|
|
call void @hoo(i64* %a.i)
|
|
call void @hoo(i64* %c)
|
|
%tmp1 = load volatile i64, i64* %a.i, align 8
|
|
%call.i = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i64 %tmp1)
|
|
call void @llvm.lifetime.end.p0i8(i64 8, i8* %tmp)
|
|
%inc = add nsw i32 %i.0, 1
|
|
br label %for.cond
|
|
|
|
for.end: ; preds = %for.cond
|
|
ret void
|
|
}
|