mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81293 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			28 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s
 | |
| 
 | |
| ;; GetMemInstArgs() folded the two getElementPtr instructions together,
 | |
| ;; producing an illegal getElementPtr.  That's because the type generated
 | |
| ;; by the last index for the first one is a structure field, not an array
 | |
| ;; element, and the second one indexes off that structure field.
 | |
| ;; The code is legal but not type-safe and the two GEPs should not be folded.
 | |
| ;; 
 | |
| ;; This code fragment is from Spec/CINT2000/197.parser/197.parser.bc,
 | |
| ;; file post_process.c, function build_domain().
 | |
| ;; (Modified to replace store with load and return load value.)
 | |
| ;; 
 | |
|         %Domain = type { i8*, i32, i32*, i32, i32, i32*, %Domain* }
 | |
| @domain_array = external global [497 x %Domain]         ; <[497 x %Domain]*> [#uses=2]
 | |
| 
 | |
| declare void @opaque([497 x %Domain]*)
 | |
| 
 | |
| define i32 @main(i32 %argc, i8** %argv) {
 | |
| bb0:
 | |
|         call void @opaque( [497 x %Domain]* @domain_array )
 | |
|         %cann-indvar-idxcast = sext i32 %argc to i64            ; <i64> [#uses=1]
 | |
|         %reg841 = getelementptr [497 x %Domain]* @domain_array, i64 0, i64 %cann-indvar-idxcast, i32 3          ; <i32*> [#uses=1]
 | |
|         %reg846 = getelementptr i32* %reg841, i64 1             ; <i32*> [#uses=1]
 | |
|         %reg820 = load i32* %reg846             ; <i32> [#uses=1]
 | |
|         ret i32 %reg820
 | |
| }
 | |
| 
 |