You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			2.9 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 all non-preserved analyses for: H
 | ||
|  | ; CHECK: Invalidating analysis: DemandedBitsAnalysis on H
 | ||
|  | ; CHECK: Running pass: BDCEPass on H
 | ||
|  | ; CHECK: Running analysis: DemandedBitsAnalysis on H
 | ||
|  | ; CHECK: Finished llvm::Function pass manager run.
 | ||
|  | 
 | ||
|  | 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* 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 %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) |