mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-03 14:21:30 +00:00 
			
		
		
		
	[opaque pointer type] Add textual IR support for explicit type parameter to gep operator
Similar to gep (r230786) and load (r230794) changes.
Similar migration script can be used to update test cases, which
successfully migrated all of LLVM and Polly, but about 4 test cases
needed manually changes in Clang.
(this script will read the contents of stdin and massage it into stdout
- wrap it in the 'apply.sh' script shown in previous commits + xargs to
apply it over a large set of test cases)
import fileinput
import sys
import re
rep = re.compile(r"(getelementptr(?:\s+inbounds)?\s*\()((<\d*\s+x\s+)?([^@]*?)(|\s*addrspace\(\d+\))\s*\*(?(3)>)\s*)(?=$|%|@|null|undef|blockaddress|getelementptr|addrspacecast|bitcast|inttoptr|zeroinitializer|<|\[\[[a-zA-Z]|\{\{)", re.MULTILINE | re.DOTALL)
def conv(match):
  line = match.group(1)
  line += match.group(4)
  line += ", "
  line += match.group(2)
  return line
line = sys.stdin.read()
off = 0
for match in re.finditer(rep, line):
  sys.stdout.write(line[off:match.start()])
  sys.stdout.write(conv(match))
  off = match.end()
sys.stdout.write(line[off:])
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232184 91177308-0d34-0410-b5e6-96231b3b80d8
			
			
This commit is contained in:
		@@ -3,21 +3,21 @@
 | 
			
		||||
 | 
			
		||||
; Verify that over-indexed getelementptrs are folded.
 | 
			
		||||
@A = external global [2 x [3 x [5 x [7 x i32]]]]
 | 
			
		||||
@B = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]]* @A, i64 0, i64 0, i64 2, i64 1, i64 7523)
 | 
			
		||||
; CHECK: @B = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]]* @A, i64 36, i64 0, i64 1, i64 0, i64 5)
 | 
			
		||||
@C = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]]* @A, i64 3, i64 2, i64 0, i64 0, i64 7523)
 | 
			
		||||
; CHECK: @C = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]]* @A, i64 39, i64 1, i64 1, i64 4, i64 5)
 | 
			
		||||
@B = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]], [2 x [3 x [5 x [7 x i32]]]]* @A, i64 0, i64 0, i64 2, i64 1, i64 7523)
 | 
			
		||||
; CHECK: @B = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]], [2 x [3 x [5 x [7 x i32]]]]* @A, i64 36, i64 0, i64 1, i64 0, i64 5)
 | 
			
		||||
@C = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]], [2 x [3 x [5 x [7 x i32]]]]* @A, i64 3, i64 2, i64 0, i64 0, i64 7523)
 | 
			
		||||
; CHECK: @C = global i32* getelementptr ([2 x [3 x [5 x [7 x i32]]]], [2 x [3 x [5 x [7 x i32]]]]* @A, i64 39, i64 1, i64 1, i64 4, i64 5)
 | 
			
		||||
 | 
			
		||||
; Verify that constant expression GEPs work with i84 indices.
 | 
			
		||||
@D = external global [1 x i32]
 | 
			
		||||
 | 
			
		||||
@E = global i32* getelementptr inbounds ([1 x i32]* @D, i84 0, i64 1)
 | 
			
		||||
; CHECK: @E = global i32* getelementptr inbounds ([1 x i32]* @D, i84 1, i64 0)
 | 
			
		||||
@E = global i32* getelementptr inbounds ([1 x i32], [1 x i32]* @D, i84 0, i64 1)
 | 
			
		||||
; CHECK: @E = global i32* getelementptr inbounds ([1 x i32], [1 x i32]* @D, i84 1, i64 0)
 | 
			
		||||
 | 
			
		||||
; Verify that i16 indices work.
 | 
			
		||||
@x = external global {i32, i32}
 | 
			
		||||
@y = global i32* getelementptr ({ i32, i32 }* @x, i16 42, i32 0)
 | 
			
		||||
; CHECK: @y = global i32* getelementptr ({ i32, i32 }* @x, i16 42, i32 0)
 | 
			
		||||
@y = global i32* getelementptr ({ i32, i32 }, { i32, i32 }* @x, i16 42, i32 0)
 | 
			
		||||
; CHECK: @y = global i32* getelementptr ({ i32, i32 }, { i32, i32 }* @x, i16 42, i32 0)
 | 
			
		||||
 | 
			
		||||
; See if i92 indices work too.
 | 
			
		||||
define i32 *@test({i32, i32}* %t, i92 %n) {
 | 
			
		||||
@@ -29,7 +29,7 @@ define i32 *@test({i32, i32}* %t, i92 %n) {
 | 
			
		||||
 | 
			
		||||
; Verify that constant expression vector GEPs work.
 | 
			
		||||
 | 
			
		||||
@z = global <2 x i32*> getelementptr (<2 x [3 x {i32, i32}]*> zeroinitializer, <2 x i32> <i32 1, i32 2>, <2 x i32> <i32 2, i32 3>, <2 x i32> <i32 1, i32 1>)
 | 
			
		||||
@z = global <2 x i32*> getelementptr ([3 x {i32, i32}], <2 x [3 x {i32, i32}]*> zeroinitializer, <2 x i32> <i32 1, i32 2>, <2 x i32> <i32 2, i32 3>, <2 x i32> <i32 1, i32 1>)
 | 
			
		||||
 | 
			
		||||
; Verify that struct GEP works with a vector of pointers.
 | 
			
		||||
define <2 x i32*> @test7(<2 x {i32, i32}*> %a) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user