mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Fix oversight in -analyze output. PtrRtCheck contains the pointers that need to be checked against each other and not whether memchecks are necessary. For instance in the testcase PtrRtCheck has four elements but all no-alias so no checking is necessary. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234833 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: opt -basicaa -loop-accesses -analyze < %s | FileCheck %s
 | |
| 
 | |
| ; If the arrays don't alias this loop is safe with no memchecks:
 | |
| ;   for (i = 0; i < n; i++)
 | |
| ;    A[i] = A[i+1] * B[i] * C[i];
 | |
| 
 | |
| target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 | |
| target triple = "x86_64-apple-macosx10.10.0"
 | |
| 
 | |
| ; CHECK: Memory dependences are safe{{$}}
 | |
| 
 | |
| define void @f(i16* noalias %a,
 | |
|                i16* noalias %b,
 | |
|                i16* noalias %c) {
 | |
| entry:
 | |
|   br label %for.body
 | |
| 
 | |
| for.body:                                         ; preds = %for.body, %entry
 | |
|   %ind = phi i64 [ 0, %entry ], [ %add, %for.body ]
 | |
| 
 | |
|   %add = add nuw nsw i64 %ind, 1
 | |
| 
 | |
|   %arrayidxA_plus_2 = getelementptr inbounds i16, i16* %a, i64 %add
 | |
|   %loadA_plus_2 = load i16, i16* %arrayidxA_plus_2, align 2
 | |
| 
 | |
|   %arrayidxB = getelementptr inbounds i16, i16* %b, i64 %ind
 | |
|   %loadB = load i16, i16* %arrayidxB, align 2
 | |
| 
 | |
|   %arrayidxC = getelementptr inbounds i16, i16* %c, i64 %ind
 | |
|   %loadC = load i16, i16* %arrayidxC, align 2
 | |
| 
 | |
|   %mul = mul i16 %loadB, %loadA_plus_2
 | |
|   %mul1 = mul i16 %mul, %loadC
 | |
| 
 | |
|   %arrayidxA = getelementptr inbounds i16, i16* %a, i64 %ind
 | |
|   store i16 %mul1, i16* %arrayidxA, align 2
 | |
| 
 | |
|   %exitcond = icmp eq i64 %add, 20
 | |
|   br i1 %exitcond, label %for.end, label %for.body
 | |
| 
 | |
| for.end:                                          ; preds = %for.body
 | |
|   ret void
 | |
| }
 |