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@32115 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			32 lines
		
	
	
		
			889 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			889 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; This testcase is due to tail-duplication not wanting to copy the return
 | 
						|
; instruction into the terminating blocks because there was other code
 | 
						|
; optimized out of the function after the taildup happened.
 | 
						|
; XFAIL: *
 | 
						|
; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | not grep call
 | 
						|
 | 
						|
int %t4(int %a) {
 | 
						|
entry:
 | 
						|
        %tmp.1 = and int %a, 1
 | 
						|
        %tmp.2 = cast int %tmp.1 to bool
 | 
						|
        br bool %tmp.2, label %then.0, label %else.0
 | 
						|
 | 
						|
then.0:
 | 
						|
        %tmp.5 = add int %a, -1
 | 
						|
        %tmp.3 = call int %t4( int %tmp.5 )
 | 
						|
        br label %return
 | 
						|
 | 
						|
else.0:
 | 
						|
        %tmp.7 = setne int %a, 0
 | 
						|
        br bool %tmp.7, label %then.1, label %return
 | 
						|
 | 
						|
then.1:
 | 
						|
        %tmp.11 = add int %a, -2
 | 
						|
        %tmp.9 = call int %t4( int %tmp.11 )
 | 
						|
        br label %return
 | 
						|
 | 
						|
return:
 | 
						|
        %result.0 = phi int [ 0, %else.0 ], [ %tmp.3, %then.0 ], [ %tmp.9, %then.1 ]
 | 
						|
        ret int %result.0
 | 
						|
}
 | 
						|
 |