mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3477 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; This test makes sure that these instructions are properly eliminated.
 | 
						|
;
 | 
						|
 | 
						|
; RUN: if as < %s | opt -instcombine -die | dis | grep phi
 | 
						|
; RUN: then exit 1
 | 
						|
; RUN: else exit 0
 | 
						|
; RUN: fi
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
int %test1(int %A, bool %b) {
 | 
						|
BB0:    br bool %b, label %BB1, label %BB2
 | 
						|
BB1:
 | 
						|
        %B = phi int [%A, %BB0]     ; Combine away one argument PHI nodes
 | 
						|
        ret int %B
 | 
						|
BB2:
 | 
						|
        ret int %A
 | 
						|
}
 | 
						|
 | 
						|
int %test2(int %A, bool %b) {
 | 
						|
BB0:    br bool %b, label %BB1, label %BB2
 | 
						|
BB1:
 | 
						|
	br label %BB2
 | 
						|
BB2:
 | 
						|
        %B = phi int [%A, %BB0], [%A, %BB1]     ; Combine away PHI nodes with same values
 | 
						|
        ret int %B
 | 
						|
}
 | 
						|
 | 
						|
int %test3(int %A, bool %b) {
 | 
						|
BB0: br label %Loop
 | 
						|
 | 
						|
Loop:
 | 
						|
	%B = phi int [%A, %BB0], [%B, %Loop]    ; PHI has same value always.
 | 
						|
	br bool %b, label %Loop, label %Exit
 | 
						|
Exit:
 | 
						|
	ret int %B
 | 
						|
}
 | 
						|
 | 
						|
int %test3(bool %b) {
 | 
						|
BB0:  ret int 7                                 ; Loop is unreachable
 | 
						|
 | 
						|
Loop:
 | 
						|
        %B = phi int [%B, %L2], [%B, %Loop]     ; PHI has same value always.
 | 
						|
        br bool %b, label %L2, label %Loop
 | 
						|
L2:
 | 
						|
	br label %Loop
 | 
						|
}
 | 
						|
 |