mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Fix a bug in InstCombine where we would incorrectly attempt to construct a
bitcast between pointers of two different address spaces if they happened to have the same pointer size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203862 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -335,6 +335,13 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI, | |||||||
|         NewLoad->setAlignment(LI.getAlignment()); |         NewLoad->setAlignment(LI.getAlignment()); | ||||||
|         NewLoad->setAtomic(LI.getOrdering(), LI.getSynchScope()); |         NewLoad->setAtomic(LI.getOrdering(), LI.getSynchScope()); | ||||||
|         // Now cast the result of the load. |         // Now cast the result of the load. | ||||||
|  |         PointerType *OldTy = dyn_cast<PointerType>(NewLoad->getType()); | ||||||
|  |         PointerType *NewTy = dyn_cast<PointerType>(LI.getType()); | ||||||
|  |         if (OldTy && NewTy && | ||||||
|  |             OldTy->getAddressSpace() != NewTy->getAddressSpace()) { | ||||||
|  |           return new AddrSpaceCastInst(NewLoad, LI.getType()); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         return new BitCastInst(NewLoad, LI.getType()); |         return new BitCastInst(NewLoad, LI.getType()); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								test/Transforms/InstCombine/load-addrspace-cast.ll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								test/Transforms/InstCombine/load-addrspace-cast.ll
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | ; RUN: opt -instcombine -S < %s | FileCheck %s | ||||||
|  | target datalayout = "e-p:64:64:64-n8:16:32:64" | ||||||
|  |  | ||||||
|  | define i32* @pointer_to_addrspace_pointer(i32 addrspace(1)** %x) nounwind { | ||||||
|  | ; CHECK-LABEL: @pointer_to_addrspace_pointer( | ||||||
|  | ; CHECK: load | ||||||
|  | ; CHECK: addrspacecast | ||||||
|  |   %y = bitcast i32 addrspace(1)** %x to i32** | ||||||
|  |   %z = load i32** %y | ||||||
|  |   ret i32* %z | ||||||
|  | } | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user