Skip to content

Commit e817029

Browse files
committed
[DSE] Preserve address space
Preserve address space when inserting i8* cast.
1 parent 9aa951e commit e817029

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,8 +642,10 @@ static bool tryToShorten(Instruction *EarlierWrite, int64_t &EarlierStart,
642642
EarlierIntrinsic->setDestAlignment(PrefAlign);
643643

644644
if (!IsOverwriteEnd) {
645-
Type *Int8PtrTy = Type::getInt8PtrTy(EarlierIntrinsic->getContext());
646645
Value *OrigDest = EarlierIntrinsic->getRawDest();
646+
Type *Int8PtrTy =
647+
Type::getInt8PtrTy(EarlierIntrinsic->getContext(),
648+
OrigDest->getType()->getPointerAddressSpace());
647649
Value *Dest = OrigDest;
648650
if (OrigDest->getType() != Int8PtrTy)
649651
Dest = CastInst::CreatePointerCast(OrigDest, Int8PtrTy, "", EarlierWrite);

llvm/test/Transforms/DeadStoreElimination/OverwriteStoreBegin.ll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,26 @@ entry:
6161
ret void
6262
}
6363

64+
define void @write4to7_addrspace(i32 addrspace(1)* nocapture %p) {
65+
; CHECK-LABEL: @write4to7_addrspace(
66+
; CHECK-NEXT: entry:
67+
; CHECK-NEXT: [[ARRAYIDX0:%.*]] = getelementptr inbounds i32, i32 addrspace(1)* [[P:%.*]], i64 1
68+
; CHECK-NEXT: [[P3:%.*]] = bitcast i32 addrspace(1)* [[ARRAYIDX0]] to i8 addrspace(1)*
69+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, i8 addrspace(1)* [[P3]], i64 4
70+
; CHECK-NEXT: call void @llvm.memset.p1i8.i64(i8 addrspace(1)* align 4 [[TMP0]], i8 0, i64 24, i1 false)
71+
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i32, i32 addrspace(1)* [[P]], i64 1
72+
; CHECK-NEXT: store i32 1, i32 addrspace(1)* [[ARRAYIDX1]], align 4
73+
; CHECK-NEXT: ret void
74+
;
75+
entry:
76+
%arrayidx0 = getelementptr inbounds i32, i32 addrspace(1)* %p, i64 1
77+
%p3 = bitcast i32 addrspace(1)* %arrayidx0 to i8 addrspace(1)*
78+
call void @llvm.memset.p1i8.i64(i8 addrspace(1)* align 4 %p3, i8 0, i64 28, i1 false)
79+
%arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %p, i64 1
80+
store i32 1, i32 addrspace(1)* %arrayidx1, align 4
81+
ret void
82+
}
83+
6484
define void @write4to7_atomic(i32* nocapture %p) {
6585
; CHECK-LABEL: @write4to7_atomic(
6686
; CHECK-NEXT: entry:
@@ -433,6 +453,7 @@ entry:
433453
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
434454
declare void @llvm.memset.p0i32.i64(i32* nocapture, i8, i64, i1) nounwind
435455
declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
456+
declare void @llvm.memset.p1i8.i64(i8 addrspace(1)* nocapture, i8, i64, i1) nounwind
436457
declare void @llvm.memset.element.unordered.atomic.p0i8.i64(i8* nocapture, i8, i64, i32) nounwind
437458

438459
define void @ow_begin_align1(i8* nocapture %p) {

0 commit comments

Comments
 (0)