forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			157 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llvm-as -f %s -o - | llc
 | |
| 
 | |
| ;; Date:     May 28, 2003.
 | |
| ;; From:     test/Programs/External/SPEC/CINT2000/175.vpr.llvm.bc
 | |
| ;; Function: int %main(int %argc.1, sbyte** %argv.1)
 | |
| ;;
 | |
| ;; Error:    A function call with about 56 arguments causes an assertion failure
 | |
| ;;	     in llc because the register allocator cannot find a register
 | |
| ;;	     not used explicitly by the call instruction.
 | |
| ;; 
 | |
| ;; Cause:    Regalloc was not keeping track of free registers correctly.
 | |
| ;;	     It was counting the registers allocated to all outgoing arguments,
 | |
| ;;	     even though most of those are copied to the stack (so those
 | |
| ;;	     registers are not actually used by the call instruction).
 | |
| ;;
 | |
| ;; Fixed:    By rewriting selection and allocation so that selection explicitly
 | |
| ;;	     inserts all copy operations required for passing arguments and
 | |
| ;;           for the return value of a call, copying to/from registers
 | |
| ;;           and/or to stack locations as needed.
 | |
| ;;
 | |
| 
 | |
| 	%struct..s_annealing_sched = type { uint, float, float, float, float }
 | |
| 	%struct..s_chan = type { uint, float, float, float, float }
 | |
| 	%struct..s_det_routing_arch = type { uint, float, float, float, uint, int, short, short, short, float, float }
 | |
| 	%struct..s_placer_opts = type { int, float, int, uint, sbyte*, uint, int }
 | |
| 	%struct..s_router_opts = type { float, float, float, float, float, int, int, uint, int }
 | |
| 	%struct..s_segment_inf = type { float, int, short, short, float, float, uint, float, float }
 | |
| 	%struct..s_switch_inf = type { uint, float, float, float, float }
 | |
| 
 | |
| implementation
 | |
| 
 | |
| int %main(int %argc.1, sbyte** %argv.1) {
 | |
| entry:		
 | |
| 	%net_file = alloca [300 x sbyte]		
 | |
| 	%place_file = alloca [300 x sbyte]		
 | |
| 	%arch_file = alloca [300 x sbyte]		
 | |
| 	%route_file = alloca [300 x sbyte]		
 | |
| 	%full_stats = alloca uint		
 | |
| 	%operation = alloca int		
 | |
| 	%verify_binary_search = alloca uint		
 | |
| 	%show_graphics = alloca uint		
 | |
| 	%annealing_sched = alloca %struct..s_annealing_sched		
 | |
| 	%placer_opts = alloca %struct..s_placer_opts		
 | |
| 	%router_opts = alloca %struct..s_router_opts		
 | |
| 	%det_routing_arch = alloca %struct..s_det_routing_arch		
 | |
| 	%segment_inf = alloca %struct..s_segment_inf*		
 | |
| 	%timing_inf = alloca { uint, float, float, float, float, float, float, float, float, float, float }		
 | |
| 	%tmp.101 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 4		
 | |
| 	%tmp.105 = getelementptr [300 x sbyte]* %net_file, long 0, long 0		
 | |
| 	%tmp.106 = getelementptr [300 x sbyte]* %arch_file, long 0, long 0		
 | |
| 	%tmp.107 = getelementptr [300 x sbyte]* %place_file, long 0, long 0		
 | |
| 	%tmp.108 = getelementptr [300 x sbyte]* %route_file, long 0, long 0		
 | |
| 	%tmp.109 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 0		
 | |
| 	%tmp.112 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 0		
 | |
| 	%tmp.114 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 6		
 | |
| 	%tmp.118 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 7		
 | |
| 	%tmp.135 = load int* %operation		
 | |
| 	%tmp.137 = load int* %tmp.112		
 | |
| 	%tmp.138 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 1		
 | |
| 	%tmp.139 = load float* %tmp.138		
 | |
| 	%tmp.140 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 2		
 | |
| 	%tmp.141 = load int* %tmp.140		
 | |
| 	%tmp.142 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 3		
 | |
| 	%tmp.143 = load uint* %tmp.142		
 | |
| 	%tmp.145 = load sbyte** %tmp.101		
 | |
| 	%tmp.146 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, ubyte 5		
 | |
| 	%tmp.147 = load uint* %tmp.146		
 | |
| 	%tmp.149 = load int* %tmp.114		
 | |
| 	%tmp.154 = load uint* %full_stats		
 | |
| 	%tmp.155 = load uint* %verify_binary_search		
 | |
| 	%tmp.156 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, ubyte 0		
 | |
| 	%tmp.157 = load uint* %tmp.156		
 | |
| 	%tmp.158 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, ubyte 1		
 | |
| 	%tmp.159 = load float* %tmp.158		
 | |
| 	%tmp.160 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, ubyte 2		
 | |
| 	%tmp.161 = load float* %tmp.160		
 | |
| 	%tmp.162 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, ubyte 3		
 | |
| 	%tmp.163 = load float* %tmp.162		
 | |
| 	%tmp.164 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, ubyte 4		
 | |
| 	%tmp.165 = load float* %tmp.164		
 | |
| 	%tmp.166 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 0		
 | |
| 	%tmp.167 = load float* %tmp.166		
 | |
| 	%tmp.168 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 1		
 | |
| 	%tmp.169 = load float* %tmp.168		
 | |
| 	%tmp.170 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 2		
 | |
| 	%tmp.171 = load float* %tmp.170		
 | |
| 	%tmp.172 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 3		
 | |
| 	%tmp.173 = load float* %tmp.172		
 | |
| 	%tmp.174 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 4		
 | |
| 	%tmp.175 = load float* %tmp.174		
 | |
| 	%tmp.176 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 5		
 | |
| 	%tmp.177 = load int* %tmp.176		
 | |
| 	%tmp.178 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 6		
 | |
| 	%tmp.179 = load int* %tmp.178		
 | |
| 	%tmp.181 = load uint* %tmp.118		
 | |
| 	%tmp.182 = getelementptr %struct..s_router_opts* %router_opts, long 0, ubyte 8		
 | |
| 	%tmp.183 = load int* %tmp.182		
 | |
| 	%tmp.184 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 0		
 | |
| 	%tmp.185 = load uint* %tmp.184		
 | |
| 	%tmp.186 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 1		
 | |
| 	%tmp.187 = load float* %tmp.186		
 | |
| 	%tmp.188 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 2		
 | |
| 	%tmp.189 = load float* %tmp.188		
 | |
| 	%tmp.190 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 3		
 | |
| 	%tmp.191 = load float* %tmp.190		
 | |
| 	%tmp.192 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 4		
 | |
| 	%tmp.193 = load uint* %tmp.192		
 | |
| 	%tmp.194 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 5		
 | |
| 	%tmp.195 = load int* %tmp.194		
 | |
| 	%tmp.196 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 6		
 | |
| 	%tmp.197 = load short* %tmp.196		
 | |
| 	%tmp.198 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 7		
 | |
| 	%tmp.199 = load short* %tmp.198		
 | |
| 	%tmp.200 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 8		
 | |
| 	%tmp.201 = load short* %tmp.200		
 | |
| 	%tmp.202 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 9		
 | |
| 	%tmp.203 = load float* %tmp.202		
 | |
| 	%tmp.204 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, ubyte 10		
 | |
| 	%tmp.205 = load float* %tmp.204		
 | |
| 	%tmp.206 = load %struct..s_segment_inf** %segment_inf		
 | |
| 	%tmp.208 = load uint* %tmp.109		
 | |
| 	%tmp.209 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 1		
 | |
| 	%tmp.210 = load float* %tmp.209		
 | |
| 	%tmp.211 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 2		
 | |
| 	%tmp.212 = load float* %tmp.211		
 | |
| 	%tmp.213 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 3		
 | |
| 	%tmp.214 = load float* %tmp.213		
 | |
| 	%tmp.215 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 4		
 | |
| 	%tmp.216 = load float* %tmp.215		
 | |
| 	%tmp.217 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 5		
 | |
| 	%tmp.218 = load float* %tmp.217		
 | |
| 	%tmp.219 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 6		
 | |
| 	%tmp.220 = load float* %tmp.219		
 | |
| 	%tmp.221 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 7		
 | |
| 	%tmp.222 = load float* %tmp.221		
 | |
| 	%tmp.223 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 8		
 | |
| 	%tmp.224 = load float* %tmp.223		
 | |
| 	%tmp.225 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 9		
 | |
| 	%tmp.226 = load float* %tmp.225		
 | |
| 	%tmp.227 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, ubyte 10		
 | |
| 	%tmp.228 = load float* %tmp.227		
 | |
| 	call void %place_and_route( int %tmp.135, int %tmp.137, float %tmp.139, int %tmp.141, uint %tmp.143, sbyte* %tmp.145, uint %tmp.147, int %tmp.149, sbyte* %tmp.107, sbyte* %tmp.105, sbyte* %tmp.106, sbyte* %tmp.108, uint %tmp.154, uint %tmp.155, uint %tmp.157, float %tmp.159, float %tmp.161, float %tmp.163, float %tmp.165, float %tmp.167, float %tmp.169, float %tmp.171, float %tmp.173, float %tmp.175, int %tmp.177, int %tmp.179, uint %tmp.181, int %tmp.183, uint %tmp.185, float %tmp.187, float %tmp.189, float %tmp.191, uint %tmp.193, int %tmp.195, short %tmp.197, short %tmp.199, short %tmp.201, float %tmp.203, float %tmp.205, %struct..s_segment_inf* %tmp.206, uint %tmp.208, float %tmp.210, float %tmp.212, float %tmp.214, float %tmp.216, float %tmp.218, float %tmp.220, float %tmp.222, float %tmp.224, float %tmp.226, float %tmp.228 )
 | |
| 	%tmp.231 = load uint* %show_graphics		
 | |
| 	%tmp.232 = setne uint %tmp.231, 0		
 | |
| 	br bool %tmp.232, label %then.2, label %endif.2
 | |
| 
 | |
| then.2:		
 | |
| 	br label %endif.2
 | |
| 
 | |
| endif.2:
 | |
| 	ret int 0
 | |
| }
 | |
| 
 | |
| declare int %printf(sbyte*, ...)
 | |
| 
 | |
| declare void %place_and_route(int, int, float, int, uint, sbyte*, uint, int, sbyte*, sbyte*, sbyte*, sbyte*, uint, uint, uint, float, float, float, float, float, float, float, float, float, int, int, uint, int, uint, float, float, float, uint, int, short, short, short, float, float, %struct..s_segment_inf*, uint, float, float, float, float, float, float, float, float, float, float)
 |