Skip to content

Commit b6bd485

Browse files
jgu222igcbot
authored andcommitted
minor refactor
When tracing a stored value, make sure to treat a pointer type as integer.
1 parent db36582 commit b6bd485

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

IGC/Compiler/CISACodeGen/MemOpt.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3030,7 +3030,8 @@ void LdStCombine::createBundles(BasicBlock* BB, InstAndOffsetPairs& Stores)
30303030

30313031
Type* Ty = LSI->getLdStType();
30323032
Type* eTy = Ty->getScalarType();
3033-
if (!(eTy->isIntegerTy() || eTy->isFloatingPointTy()))
3033+
// sanity check
3034+
if (!(eTy->isIntOrPtrTy() || eTy->isFloatingPointTy()))
30343035
return;
30353036

30363037
uint32_t eBytes = (uint32_t)DL->getTypeStoreSize(eTy);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
;=========================== begin_copyright_notice ============================
2+
;
3+
; Copyright (C) 2017-2023 Intel Corporation
4+
;
5+
; SPDX-License-Identifier: MIT
6+
;
7+
;============================ end_copyright_notice =============================
8+
9+
10+
11+
12+
; Given store i64* v0, i64** p
13+
; store i64* v1, i64** p+1
14+
; combined into
15+
; v = ((i64)v0, (i64)v1)
16+
; store <2xi64> v, p
17+
;
18+
; CHECK-LABEL: define spir_kernel void @test_two_pointers
19+
; CHECK: [[TMP1:%.*]] = insertelement <2 x i64> undef, i64 %{{.*}}, i64 0
20+
; CHECK: [[TMP2:%.*]] = insertelement <2 x i64> [[TMP1]], i64 %{{.*}}, i64 1
21+
; CHECK: [[TMP3:%.*]] = bitcast i64 addrspace(1)* addrspace(1)* %{{.*}} to <2 x i64> addrspace(1)*
22+
; CHECK: store <2 x i64> [[TMP2]], <2 x i64> addrspace(1)* [[TMP3]], align 8
23+
; CHECK: ret void
24+
25+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-n8:16:32"
26+
target triple = "spir64-unknown-unknown"
27+
28+
; Function Attrs: convergent nounwind
29+
define spir_kernel void @test_two_pointers(i64 addrspace(1)* %d, i64 addrspace(1)* %s, i16 %localIdX) {
30+
entry:
31+
%P = bitcast i64 addrspace(1)* %d to i64 addrspace(1)* addrspace(1)*
32+
%conv.i.i = zext i16 %localIdX to i64
33+
%arrayidx = getelementptr inbounds i64 addrspace(1)*, i64 addrspace(1)* addrspace(1)* %P, i64 %conv.i.i
34+
store i64 addrspace(1)* %d, i64 addrspace(1)* addrspace(1)* %arrayidx, align 8
35+
%add = add nuw nsw i64 %conv.i.i, 1
36+
%arrayidx1 = getelementptr inbounds i64 addrspace(1)*, i64 addrspace(1)* addrspace(1)* %P, i64 %add
37+
store i64 addrspace(1)* %s, i64 addrspace(1)* addrspace(1)* %arrayidx1, align 8
38+
ret void
39+
}

0 commit comments

Comments
 (0)