mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
InstSimplify: Don't simplify gep X, (Y-X) to Y if types differ
It's incorrect to perform this simplification if the types differ. A bitcast would need to be inserted for this to work. This fixes PR20771. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216597 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1c768816d7
commit
48164ed24d
@ -2837,7 +2837,8 @@ static Value *SimplifyGEPInst(ArrayRef<Value *> Ops, const Query &Q, unsigned) {
|
||||
return Constant::getNullValue(GEPTy);
|
||||
Value *Temp;
|
||||
if (match(P, m_PtrToInt(m_Value(Temp))))
|
||||
return Temp;
|
||||
if (Temp->getType() == GEPTy)
|
||||
return Temp;
|
||||
return nullptr;
|
||||
};
|
||||
|
||||
|
@ -64,3 +64,17 @@ define i64* @test6(i64* %b) {
|
||||
; CHECK-LABEL: @test6
|
||||
; CHECK-NEXT: ret i64* null
|
||||
}
|
||||
|
||||
define i8* @test7(i8* %b, i8** %e) {
|
||||
%e_ptr = ptrtoint i8** %e to i64
|
||||
%b_ptr = ptrtoint i8* %b to i64
|
||||
%sub = sub i64 %e_ptr, %b_ptr
|
||||
%gep = getelementptr inbounds i8* %b, i64 %sub
|
||||
ret i8* %gep
|
||||
; CHECK-LABEL: @test7
|
||||
; CHECK-NEXT: ptrtoint
|
||||
; CHECK-NEXT: ptrtoint
|
||||
; CHECK-NEXT: sub
|
||||
; CHECK-NEXT: getelementptr
|
||||
; CHECK-NEXT: ret
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user