1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/test/Transforms/SROA/dead-inst.ll
Arthur Eubanks b987f39d75 [NewPM] Hide pass manager debug logging behind -debug-pass-manager-verbose
Printing pass manager invocations is fairly verbose and not super
useful.

This allows us to remove DebugLogging from pass managers and PassBuilder
since all logging (aside from analysis managers) goes through
instrumentation now.

This has the downside of never being able to print the top level pass
manager via instrumentation, but that seems like a minor downside.

Reviewed By: ychen

Differential Revision: https://reviews.llvm.org/D101797
2021-05-07 21:51:47 -07:00

96 lines
2.8 KiB
LLVM

; SROA fails to rewrite allocs but does rewrite some phis and delete
; dead instructions. Ensure that this invalidates analyses required
; for other passes.
; RUN: opt < %s -passes=bdce,sroa,bdce -o %t -debug-pass-manager 2>&1 | FileCheck %s
; CHECK: Running pass: BDCEPass on H
; CHECK: Running analysis: DemandedBitsAnalysis on H
; CHECK: Running pass: SROA on H
; CHECK: Invalidating analysis: DemandedBitsAnalysis on H
; CHECK: Running pass: BDCEPass on H
; CHECK: Running analysis: DemandedBitsAnalysis on H
target datalayout = "e-m:e-i64:64-n32:64"
target triple = "powerpc64le-grtev4-linux-gnu"
%class.b = type { i64 }
declare void @D(%class.b* sret(%class.b), %class.b* dereferenceable(32)) local_unnamed_addr
; Function Attrs: nounwind
define hidden fastcc void @H(%class.b* noalias nocapture readnone, [2 x i64]) unnamed_addr {
%3 = alloca %class.b, align 8
%.sroa.0 = alloca i64, align 8
store i64 0, i64* %.sroa.0, align 8
%4 = extractvalue [2 x i64] %1, 1
switch i64 %4, label %6 [
i64 4, label %foo
i64 5, label %5
]
; <label>:5:
%.sroa.0.0..sroa_cast3 = bitcast i64* %.sroa.0 to i8**
br label %12
; <label>:6:
%7 = icmp ugt i64 %4, 5
%.sroa.0.0..sroa_cast5 = bitcast i64* %.sroa.0 to i8**
br i1 %7, label %8, label %12
; <label>:8:
%9 = load i8, i8* inttoptr (i64 4 to i8*), align 4
%10 = icmp eq i8 %9, 47
%11 = select i1 %10, i64 5, i64 4
br label %12
; <label>:12:
%13 = phi i8** [ %.sroa.0.0..sroa_cast3, %5 ], [ %.sroa.0.0..sroa_cast5, %8 ], [ %.sroa.0.0..sroa_cast5, %6 ]
%14 = phi i64 [ 4, %5 ], [ %11, %8 ], [ 4, %6 ]
%15 = icmp ne i64 %4, 0
%16 = icmp ugt i64 %4, %14
%17 = and i1 %15, %16
br i1 %17, label %18, label %a.exit
; <label>:18:
%19 = tail call i8* @memchr(i8* undef, i32 signext undef, i64 undef)
%20 = icmp eq i8* %19, null
%21 = sext i1 %20 to i64
br label %a.exit
a.exit:
%22 = phi i64 [ -1, %12 ], [ %21, %18 ]
%23 = load i8*, i8** %13, align 8
%24 = sub nsw i64 %22, %14
%25 = bitcast %class.b* %3 to i8*
call void @llvm.lifetime.start.p0i8(i64 32, i8* nonnull %25)
%26 = icmp ult i64 %24, 2
br i1 %26, label %G.exit, label %27
; <label>:27:
%28 = getelementptr inbounds i8, i8* %23, i64 undef
%29 = icmp eq i8* %28, null
br i1 %29, label %30, label %31
; <label>:30:
unreachable
; <label>:31:
call void @D(%class.b* nonnull sret(%class.b) %3, %class.b* nonnull dereferenceable(32) undef)
br label %G.exit
G.exit:
call void @llvm.lifetime.end.p0i8(i64 32, i8* nonnull %25)
br label %foo
foo:
ret void
}
; Function Attrs: nounwind readonly
declare i8* @memchr(i8*, i32 signext, i64) local_unnamed_addr
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)