mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-18 14:31:27 +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:
parent
43d5e074aa
commit
d3fc1be4f6
@ -335,6 +335,13 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
|
||||
NewLoad->setAlignment(LI.getAlignment());
|
||||
NewLoad->setAtomic(LI.getOrdering(), LI.getSynchScope());
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
|
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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user