mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[IR] GetUnderlyingObject(), stripPointerCastsAndOffsets(): don't crash on bitcast <1 x i8*> to i8*
I'm not sure how to write standalone tests for each of two changes here. If either one of these two fixes is missing, the test fill crash.
This commit is contained in:
parent
0a9046a444
commit
59860824ed
@ -4147,6 +4147,8 @@ Value *llvm::GetUnderlyingObject(Value *V, const DataLayout &DL,
|
||||
} else if (Operator::getOpcode(V) == Instruction::BitCast ||
|
||||
Operator::getOpcode(V) == Instruction::AddrSpaceCast) {
|
||||
V = cast<Operator>(V)->getOperand(0);
|
||||
if (!V->getType()->isPointerTy())
|
||||
return V;
|
||||
} else if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) {
|
||||
if (GA->isInterposable())
|
||||
return V;
|
||||
|
@ -552,6 +552,8 @@ static const Value *stripPointerCastsAndOffsets(
|
||||
V = GEP->getPointerOperand();
|
||||
} else if (Operator::getOpcode(V) == Instruction::BitCast) {
|
||||
V = cast<Operator>(V)->getOperand(0);
|
||||
if (!V->getType()->isPointerTy())
|
||||
return V;
|
||||
} else if (StripKind != PSK_ZeroIndicesSameRepresentation &&
|
||||
Operator::getOpcode(V) == Instruction::AddrSpaceCast) {
|
||||
// TODO: If we know an address space cast will not change the
|
||||
|
14
test/Transforms/InstSimplify/icmp.ll
Normal file
14
test/Transforms/InstSimplify/icmp.ll
Normal file
@ -0,0 +1,14 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -instsimplify -S | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:64:64:64-p1:16:16:16-p2:32:32:32-p3:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||
|
||||
declare void @usei8ptr(i8* %ptr)
|
||||
|
||||
; Ensure that we do not crash when looking at such a weird bitcast.
|
||||
define i1 @bitcast_from_single_element_pointer_vector_to_pointer(<1 x i8*> %ptr1vec, i8* %ptr2) {
|
||||
%ptr1 = bitcast <1 x i8*> %ptr1vec to i8*
|
||||
call void @usei8ptr(i8* %ptr1)
|
||||
%cmp = icmp eq i8* %ptr1, %ptr2
|
||||
ret i1 %cmp
|
||||
}
|
Loading…
Reference in New Issue
Block a user