mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17568 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			58 lines
		
	
	
		
			807 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			807 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
 | |
| ; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
 | |
| ; RUN: diff %t1.ll %t2.ll
 | |
| 
 | |
| implementation
 | |
| 
 | |
| ;; This is an irreducible flow graph
 | |
| 
 | |
| 
 | |
| void "irreducible"(bool %cond)
 | |
| begin
 | |
| 	br bool %cond, label %X, label %Y
 | |
| 
 | |
| X:
 | |
| 	br label %Y
 | |
| Y:
 | |
| 	br label %X
 | |
| end
 | |
| 
 | |
| ;; This is a pair of loops that share the same header
 | |
| 
 | |
| void "sharedheader"(bool %cond)
 | |
| begin
 | |
| 	br label %A
 | |
| A:
 | |
| 	br bool %cond, label %X, label %Y
 | |
| 
 | |
| X:
 | |
| 	br label %A
 | |
| Y:
 | |
| 	br label %A
 | |
| end
 | |
| 
 | |
| ;; This is a simple nested loop
 | |
| void "nested"(bool %cond1, bool %cond2, bool %cond3)
 | |
| begin
 | |
| 	br label %Loop1
 | |
| 
 | |
| Loop1:
 | |
| 	br label %Loop2
 | |
| 
 | |
| Loop2:
 | |
| 	br label %Loop3
 | |
| 
 | |
| Loop3:
 | |
| 	br bool %cond3, label %Loop3, label %L3Exit
 | |
| 
 | |
| L3Exit:
 | |
| 	br bool %cond2, label %Loop2, label %L2Exit
 | |
| 
 | |
| L2Exit:
 | |
| 	br bool %cond1, label %Loop1, label %L1Exit
 | |
| 
 | |
| L1Exit:
 | |
| 	ret void
 | |
| end
 | |
| 
 |