Skip to content

Commit b72bd0b

Browse files
committed
more review feedback
1 parent 56b6209 commit b72bd0b

File tree

5 files changed

+50
-14
lines changed

5 files changed

+50
-14
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3050,13 +3050,14 @@ SDValue NVPTXTargetLowering::LowerADDRSPACECAST(SDValue Op,
30503050
DestAS == llvm::ADDRESS_SPACE_SHARED_CLUSTER) ||
30513051
(SrcAS == llvm::ADDRESS_SPACE_SHARED_CLUSTER &&
30523052
DestAS == llvm::ADDRESS_SPACE_SHARED)) {
3053+
SDLoc DL(Op.getNode());
30533054
const MVT GenerictVT =
30543055
getPointerTy(DAG.getDataLayout(), ADDRESS_SPACE_GENERIC);
3055-
const MVT OutputVT = getPointerTy(DAG.getDataLayout(), DestAS);
30563056
SDValue GenericConversion = DAG.getAddrSpaceCast(
3057-
SDLoc(), GenerictVT, Op.getOperand(0), SrcAS, ADDRESS_SPACE_GENERIC);
3058-
SDValue SharedClusterConversion = DAG.getAddrSpaceCast(
3059-
SDLoc(), OutputVT, GenericConversion, ADDRESS_SPACE_GENERIC, DestAS);
3057+
DL, GenerictVT, Op.getOperand(0), SrcAS, ADDRESS_SPACE_GENERIC);
3058+
SDValue SharedClusterConversion =
3059+
DAG.getAddrSpaceCast(DL, Op.getValueType(), GenericConversion,
3060+
ADDRESS_SPACE_GENERIC, DestAS);
30603061
return SharedClusterConversion;
30613062
}
30623063

llvm/lib/Target/NVPTX/NVPTXIntrinsics.td

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2416,10 +2416,8 @@ foreach space = ["local", "shared", "global", "const", "param"] in {
24162416
defm cvta_to_#space : G_TO_NG<space>;
24172417
}
24182418

2419-
foreach space = ["shared::cluster"] in {
2420-
defm cvta_#space : NG_TO_G<space, false, [hasclusters]>;
2421-
defm cvta_to_#space : G_TO_NG<space, false, [hasclusters]>;
2422-
}
2419+
defm cvta_shared_cluster : NG_TO_G<"shared::cluster", false, [hasClusters]>;
2420+
defm cvta_to_shared_cluster : G_TO_NG<"shared::cluster", false, [hasClusters]>;
24232421

24242422
def : Pat<(int_nvvm_ptr_param_to_gen i32:$src),
24252423
(cvta_param $src)>;

llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,10 @@ 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),
288+
llvm::ADDRESS_SPACE_SHARED_CLUSTER);
287289
default:
288290
break;
289291
}

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)