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@234917 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| """A ladder graph creation program.
 | |
| 
 | |
| This is a python program that creates c source code that will generate
 | |
| CFGs that are ladder graphs.  Ladder graphs are generally the worst case
 | |
| for a lot of dominance related algorithms (Dominance frontiers, etc),
 | |
| and often generate N^2 or worse behavior.
 | |
| 
 | |
| One good use of this program is to test whether your linear time algorithm is
 | |
| really behaving linearly.
 | |
| """
 | |
| 
 | |
| import argparse
 | |
| def main():
 | |
|   parser = argparse.ArgumentParser(description=__doc__)
 | |
|   parser.add_argument('rungs', type=int,
 | |
|                       help="Number of ladder rungs. Must be a multiple of 2")
 | |
|   args = parser.parse_args()
 | |
|   if (args.rungs % 2) != 0:
 | |
|     print "Rungs must be a multiple of 2"
 | |
|     return
 | |
|   print "int ladder(int *foo, int *bar, int x) {"
 | |
|   rung1 = xrange(0, args.rungs, 2)
 | |
|   rung2 = xrange(1, args.rungs, 2)
 | |
|   for i in rung1:
 | |
|     print "rung1%d:" % i
 | |
|     print "*foo = x++;"
 | |
|     if i != rung1[-1]:
 | |
|       print "if (*bar) goto rung1%d;" % (i+2)
 | |
|       print "else goto rung2%d;" % (i+1)
 | |
|     else:
 | |
|       print "goto rung2%d;" % (i+1)
 | |
|   for i in rung2:
 | |
|     print "rung2%d:" % i
 | |
|     print "*foo = x++;"
 | |
|     if i != rung2[-1]:
 | |
|       print "goto rung2%d;" % (i+2)
 | |
|     else:
 | |
|       print "return *foo;"
 | |
|   print "}"
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|   main()
 |