mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	instead of cloning and RAUWing it. - Make AbstractTypeUser a friend of Value so that it can offer its subclasses a way to update a Value's type in place. This is better than a universally visible setType method on Value, and it's sufficient for the immediate need. - Eliminate the constant "convert" functions. This eliminates a lot of logic duplication, and fixes a complicated bug where a constant can't actually be cloned during the type refinement process because some of the types that its folder needs are half-destroyed, being in the middle of refinement themselves. - Move the getValType functions from being static overloaded functions in Constants.cpp to be members of class template specializations in ConstantsContext.h. This means that the code ends up getting instantiated twice, however it also makes it possible to eliminate all "convert" functions, so it's not a big net code size increase. And if desired, the duplicate instantiations could be eliminated with some reorganization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81861 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			21 lines
		
	
	
		
			863 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			21 lines
		
	
	
		
			863 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; This file is used by first.ll, so it doesn't actually do anything itself
 | |
| ; RUN: true
 | |
| 
 | |
| %AnalysisResolver = type { i8, %PMDataManager* }
 | |
| %"DenseMap<P*,AU*>" = type { i64, %"pair<P*,AU*>"*, i64, i64 }
 | |
| %PMDataManager = type { i8, %PMTopLevelManager*, i8, i8, i8, i8, i8, i64, i8 }
 | |
| %PMTopLevelManager = type { i8, i8, i8, i8, i8, i8, i8, i8, %"DenseMap<P*,AU*>" }
 | |
| %P = type { i8, %AnalysisResolver*, i64 }
 | |
| %PI = type { i8, i8, i8, i8, i8, i8, %"vector<const PI*>", %P* }
 | |
| %"SmallVImpl<const PI*>" = type { i8, %PI* }
 | |
| %"_V_base<const PI*>" = type { %"_V_base<const PI*>::_V_impl" }
 | |
| %"_V_base<const PI*>::_V_impl" = type { %PI*, i8, i8 }
 | |
| %"pair<P*,AU*>" = type opaque
 | |
| %"vector<const PI*>" = type { %"_V_base<const PI*>" }
 | |
| 
 | |
| define void @f(%"SmallVImpl<const PI*>"* %this) {
 | |
| entry:
 | |
|   %x = getelementptr inbounds %"SmallVImpl<const PI*>"* %this, i64 0, i32 1
 | |
|   ret void
 | |
| }
 |