mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	This adds back r222061, but now calls initializePAEvalPass from the correct library to avoid link problems. Original message: Don't make assumptions about the name of private global variables. Private variables are can be renamed, so it is not reliable to make decisions on the name. The name is also dropped by the assembler before getting to the linker, so using the name causes a disconnect between how llvm makes a decision (var name) and how the linker makes a decision (section it is in). This patch changes one case where we were looking at the variable name to use the section instead. Test tuning by Michael Gottesman. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222117 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; RUN: opt -disable-output -pa-eval %s 2>&1 | FileCheck %s
 | 
						|
 | 
						|
@"\01l_objc_msgSend_fixup_" = global i8 0
 | 
						|
@g1 = global i8 0, section "__OBJC,__message_refs,literal_pointers,no_dead_strip"
 | 
						|
@g2 = global i8 0, section "__DATA, __objc_classrefs, regular, no_dead_strip"
 | 
						|
@g3 = global i8 0, section "__DATA, __objc_superrefs, regular, no_dead_strip"
 | 
						|
@g4 = global i8 0, section "__TEXT,__objc_methname,cstring_literals"
 | 
						|
@g5 = global i8 0, section "__TEXT,__cstring,cstring_literals"
 | 
						|
 | 
						|
declare void @g(i8)
 | 
						|
 | 
						|
define void @f(i8* %a, i8** %b, i8** %c) {
 | 
						|
  %y1 = load i8* %a
 | 
						|
  call void @g(i8 %y1)
 | 
						|
 | 
						|
  %y2 = load i8** %b
 | 
						|
  %y3 = load i8** %c
 | 
						|
 | 
						|
  %x0 = load i8* @"\01l_objc_msgSend_fixup_"
 | 
						|
  call void @g(i8 %x0)
 | 
						|
 | 
						|
  %x1 = load i8* @g1
 | 
						|
  call void @g(i8 %x1)
 | 
						|
 | 
						|
  %x2 = load i8* @g2
 | 
						|
  call void @g(i8 %x2)
 | 
						|
 | 
						|
  %x3 = load i8* @g3
 | 
						|
  call void @g(i8 %x3)
 | 
						|
 | 
						|
  %x4 = load i8* @g4
 | 
						|
  call void @g(i8 %x4)
 | 
						|
 | 
						|
  %x5 = load i8* @g5
 | 
						|
  call void @g(i8 %x5)
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; CHECK: y1 and y2 are related.
 | 
						|
; CHECK: y1 and y3 are related.
 | 
						|
; CHECK: y2 and y3 are related.
 | 
						|
; CHECK: x0 and y1 are not related.
 | 
						|
; CHECK: x0 and y2 are not related.
 | 
						|
; CHECK: x0 and y3 are not related.
 | 
						|
; CHECK: l_objc_msgSend_fixup_ and y1 are not related.
 | 
						|
; CHECK: l_objc_msgSend_fixup_ and y2 are not related.
 | 
						|
; CHECK: l_objc_msgSend_fixup_ and y3 are not related.
 | 
						|
; CHECK: x1 and y1 are not related.
 | 
						|
; CHECK: x2 and y1 are not related.
 | 
						|
; CHECK: x3 and y1 are not related.
 | 
						|
; CHECK: x4 and y1 are not related.
 | 
						|
; CHECK: x5 and y1 are not related.
 |