Skip to content

Commit aebb089

Browse files
committed
more review feedback
1 parent 01314d5 commit aebb089

File tree

4 files changed

+47
-10
lines changed

4 files changed

+47
-10
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3026,13 +3026,14 @@ SDValue NVPTXTargetLowering::LowerADDRSPACECAST(SDValue Op,
30263026
DestAS == llvm::ADDRESS_SPACE_SHARED_CLUSTER) ||
30273027
(SrcAS == llvm::ADDRESS_SPACE_SHARED_CLUSTER &&
30283028
DestAS == llvm::ADDRESS_SPACE_SHARED)) {
3029+
SDLoc DL(Op.getNode());
30293030
const MVT GenerictVT =
30303031
getPointerTy(DAG.getDataLayout(), ADDRESS_SPACE_GENERIC);
3031-
const MVT OutputVT = getPointerTy(DAG.getDataLayout(), DestAS);
30323032
SDValue GenericConversion = DAG.getAddrSpaceCast(
3033-
SDLoc(), GenerictVT, Op.getOperand(0), SrcAS, ADDRESS_SPACE_GENERIC);
3034-
SDValue SharedClusterConversion = DAG.getAddrSpaceCast(
3035-
SDLoc(), OutputVT, GenericConversion, ADDRESS_SPACE_GENERIC, DestAS);
3033+
DL, GenerictVT, Op.getOperand(0), SrcAS, ADDRESS_SPACE_GENERIC);
3034+
SDValue SharedClusterConversion =
3035+
DAG.getAddrSpaceCast(DL, Op.getValueType(), GenericConversion,
3036+
ADDRESS_SPACE_GENERIC, DestAS);
30363037
return SharedClusterConversion;
30373038
}
30383039

llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,9 @@ NVPTXTargetMachine::getPredicatedAddrSpace(const Value *V) const {
282282
case Intrinsic::nvvm_isspacep_local:
283283
return std::make_pair(II->getArgOperand(0), llvm::ADDRESS_SPACE_LOCAL);
284284
case Intrinsic::nvvm_isspacep_shared:
285-
case Intrinsic::nvvm_isspacep_shared_cluster:
286285
return std::make_pair(II->getArgOperand(0), llvm::ADDRESS_SPACE_SHARED);
286+
case Intrinsic::nvvm_isspacep_shared_cluster:
287+
return std::make_pair(II->getArgOperand(0), llvm::ADDRESS_SPACE_SHARED_CLUSTER);
287288
default:
288289
break;
289290
}

llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,9 +424,13 @@ static std::optional<bool> evaluateIsSpace(Intrinsic::ID IID, unsigned AS) {
424424
case Intrinsic::nvvm_isspacep_local:
425425
return AS == NVPTXAS::ADDRESS_SPACE_LOCAL;
426426
case Intrinsic::nvvm_isspacep_shared:
427+
// If shared cluster this can't be evaluated at compile time.
428+
if (AS == NVPTXAS::ADDRESS_SPACE_SHARED_CLUSTER)
429+
return std::nullopt;
427430
return AS == NVPTXAS::ADDRESS_SPACE_SHARED;
428431
case Intrinsic::nvvm_isspacep_shared_cluster:
429-
return AS == NVPTXAS::ADDRESS_SPACE_SHARED_CLUSTER;
432+
return AS == NVPTXAS::ADDRESS_SPACE_SHARED_CLUSTER ||
433+
AS == NVPTXAS::ADDRESS_SPACE_SHARED;
430434
case Intrinsic::nvvm_isspacep_const:
431435
return AS == NVPTXAS::ADDRESS_SPACE_CONST;
432436
default:

llvm/test/Transforms/InferAddressSpaces/NVPTX/isspacep.ll

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ entry:
114114
ret i1 %val
115115
}
116116

117-
define i1 @test_isspacep_cluster_shared_true(ptr addrspace(7) %addr) {
118-
; CHECK-LABEL: define i1 @test_isspacep_cluster_shared_true(
117+
define i1 @test_isspacep_shared_cluster_true(ptr addrspace(7) %addr) {
118+
; CHECK-LABEL: define i1 @test_isspacep_shared_cluster_true(
119119
; CHECK-SAME: ptr addrspace(7) [[ADDR:%.*]]) {
120120
; CHECK-NEXT: [[ENTRY:.*:]]
121121
; CHECK-NEXT: ret i1 true
@@ -127,8 +127,8 @@ entry:
127127
ret i1 %val
128128
}
129129

130-
define i1 @test_isspacep_cluster_shared_false(ptr addrspace(1) %addr) {
131-
; CHECK-LABEL: define i1 @test_isspacep_cluster_shared_false(
130+
define i1 @test_isspacep_shared_cluster_false(ptr addrspace(1) %addr) {
131+
; CHECK-LABEL: define i1 @test_isspacep_shared_cluster_false(
132132
; CHECK-SAME: ptr addrspace(1) [[ADDR:%.*]]) {
133133
; CHECK-NEXT: [[ENTRY:.*:]]
134134
; CHECK-NEXT: ret i1 false
@@ -139,3 +139,34 @@ entry:
139139
%val = call i1 @llvm.nvvm.isspacep.shared.cluster(ptr %addr1)
140140
ret i1 %val
141141
}
142+
143+
; isspacep_shared_cluster returns true for shared
144+
define i1 @test_isspacep_cluster_shared_shared(ptr addrspace(3) %addr) {
145+
; CHECK-LABEL: define i1 @test_isspacep_cluster_shared_shared(
146+
; CHECK-SAME: ptr addrspace(3) [[ADDR:%.*]]) {
147+
; CHECK-NEXT: [[ENTRY:.*:]]
148+
; CHECK-NEXT: ret i1 true
149+
;
150+
entry:
151+
%addr0 = addrspacecast ptr addrspace(3) %addr to ptr
152+
%addr1 = getelementptr i8, ptr %addr0, i32 10
153+
%val = call i1 @llvm.nvvm.isspacep.shared.cluster(ptr %addr1)
154+
ret i1 %val
155+
}
156+
157+
; shared cluster cannot be evaluated to shared at compile time
158+
define i1 @test_isspacep_shared_shared_cluster(ptr addrspace(7) %addr) {
159+
; CHECK-LABEL: define i1 @test_isspacep_shared_shared_cluster(
160+
; CHECK-SAME: ptr addrspace(7) [[ADDR:%.*]]) {
161+
; CHECK-NEXT: [[ENTRY:.*:]]
162+
; CHECK-NEXT: [[ADDR2:%.*]] = getelementptr i8, ptr addrspace(7) [[ADDR]], i32 10
163+
; CHECK-NEXT: [[ADDR1:%.*]] = addrspacecast ptr addrspace(7) [[ADDR2]] to ptr
164+
; CHECK-NEXT: [[VAL:%.*]] = call i1 @llvm.nvvm.isspacep.shared(ptr [[ADDR1]])
165+
; CHECK-NEXT: ret i1 [[VAL]]
166+
;
167+
entry:
168+
%addr0 = addrspacecast ptr addrspace(7) %addr to ptr
169+
%addr1 = getelementptr i8, ptr %addr0, i32 10
170+
%val = call i1 @llvm.nvvm.isspacep.shared(ptr %addr1)
171+
ret i1 %val
172+
}

0 commit comments

Comments
 (0)