mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-03 14:21:30 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32115 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			47 lines
		
	
	
		
			935 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			935 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; Test that GCSE uses basicaa to do alias analysis, which is capable of 
 | 
						|
; disambiguating some obvious cases.  All loads should be removable in 
 | 
						|
; this testcase.
 | 
						|
 | 
						|
; RUN: llvm-upgrade < %s | llvm-as | opt -basicaa -load-vn -gcse -instcombine -dce | llvm-dis | not grep load
 | 
						|
 | 
						|
%A = global int 7
 | 
						|
%B = global int 8
 | 
						|
implementation
 | 
						|
 | 
						|
int %test() {
 | 
						|
	%A1 = load int* %A
 | 
						|
 | 
						|
	store int 123, int* %B  ; Store cannot alias %A
 | 
						|
 | 
						|
	%A2 = load int* %A
 | 
						|
	%X = sub int %A1, %A2
 | 
						|
	ret int %X
 | 
						|
}
 | 
						|
 | 
						|
int %test2() {
 | 
						|
        %A1 = load int* %A
 | 
						|
        br label %Loop
 | 
						|
Loop:
 | 
						|
        %AP = phi int [0, %0], [%X, %Loop]
 | 
						|
        store int %AP, int* %B  ; Store cannot alias %A
 | 
						|
 | 
						|
        %A2 = load int* %A
 | 
						|
        %X = sub int %A1, %A2
 | 
						|
        %c = seteq int %X, 0
 | 
						|
        br bool %c, label %out, label %Loop
 | 
						|
 | 
						|
out:
 | 
						|
        ret int %X
 | 
						|
}
 | 
						|
 | 
						|
declare void %external()
 | 
						|
 | 
						|
int %test3() {
 | 
						|
	%X = alloca int
 | 
						|
	store int 7, int* %X
 | 
						|
	call void %external()
 | 
						|
	%V = load int* %X
 | 
						|
	ret int %V
 | 
						|
}
 | 
						|
 |