Skip to content

Commit

Permalink
[DSE] Preserve address space
Browse files Browse the repository at this point in the history
Preserve address space when inserting i8* cast.
  • Loading branch information
nikic committed Jun 27, 2021
1 parent 9aa951e commit e817029
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
4 changes: 3 additions & 1 deletion llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
Expand Up @@ -642,8 +642,10 @@ static bool tryToShorten(Instruction *EarlierWrite, int64_t &EarlierStart,
EarlierIntrinsic->setDestAlignment(PrefAlign);

if (!IsOverwriteEnd) {
Type *Int8PtrTy = Type::getInt8PtrTy(EarlierIntrinsic->getContext());
Value *OrigDest = EarlierIntrinsic->getRawDest();
Type *Int8PtrTy =
Type::getInt8PtrTy(EarlierIntrinsic->getContext(),
OrigDest->getType()->getPointerAddressSpace());
Value *Dest = OrigDest;
if (OrigDest->getType() != Int8PtrTy)
Dest = CastInst::CreatePointerCast(OrigDest, Int8PtrTy, "", EarlierWrite);
Expand Down
21 changes: 21 additions & 0 deletions llvm/test/Transforms/DeadStoreElimination/OverwriteStoreBegin.ll
Expand Up @@ -61,6 +61,26 @@ entry:
ret void
}

define void @write4to7_addrspace(i32 addrspace(1)* nocapture %p) {
; CHECK-LABEL: @write4to7_addrspace(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[ARRAYIDX0:%.*]] = getelementptr inbounds i32, i32 addrspace(1)* [[P:%.*]], i64 1
; CHECK-NEXT: [[P3:%.*]] = bitcast i32 addrspace(1)* [[ARRAYIDX0]] to i8 addrspace(1)*
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i8, i8 addrspace(1)* [[P3]], i64 4
; CHECK-NEXT: call void @llvm.memset.p1i8.i64(i8 addrspace(1)* align 4 [[TMP0]], i8 0, i64 24, i1 false)
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i32, i32 addrspace(1)* [[P]], i64 1
; CHECK-NEXT: store i32 1, i32 addrspace(1)* [[ARRAYIDX1]], align 4
; CHECK-NEXT: ret void
;
entry:
%arrayidx0 = getelementptr inbounds i32, i32 addrspace(1)* %p, i64 1
%p3 = bitcast i32 addrspace(1)* %arrayidx0 to i8 addrspace(1)*
call void @llvm.memset.p1i8.i64(i8 addrspace(1)* align 4 %p3, i8 0, i64 28, i1 false)
%arrayidx1 = getelementptr inbounds i32, i32 addrspace(1)* %p, i64 1
store i32 1, i32 addrspace(1)* %arrayidx1, align 4
ret void
}

define void @write4to7_atomic(i32* nocapture %p) {
; CHECK-LABEL: @write4to7_atomic(
; CHECK-NEXT: entry:
Expand Down Expand Up @@ -433,6 +453,7 @@ entry:
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
declare void @llvm.memset.p0i32.i64(i32* nocapture, i8, i64, i1) nounwind
declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
declare void @llvm.memset.p1i8.i64(i8 addrspace(1)* nocapture, i8, i64, i1) nounwind
declare void @llvm.memset.element.unordered.atomic.p0i8.i64(i8* nocapture, i8, i64, i32) nounwind

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

0 comments on commit e817029

Please sign in to comment.