Skip to content

Commit 6808e7d

Browse files
Return UNDEF on invalid addrspacecast
1 parent 9d3df67 commit 6808e7d

File tree

2 files changed

+13
-25
lines changed

2 files changed

+13
-25
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2773,22 +2773,13 @@ unsigned NVPTXTargetLowering::getJumpTableEncoding() const {
27732773

27742774
SDValue NVPTXTargetLowering::LowerADDRSPACECAST(SDValue Op,
27752775
SelectionDAG &DAG) const {
2776-
SDLoc DL(Op);
27772776
AddrSpaceCastSDNode *N = cast<AddrSpaceCastSDNode>(Op.getNode());
2778-
2779-
EVT OperandVT = Op.getOperand(0).getValueType();
27802777
unsigned SrcAS = N->getSrcAddressSpace();
2781-
EVT ResultVT = Op.getValueType();
27822778
unsigned DestAS = N->getDestAddressSpace();
2783-
2784-
if (SrcAS == llvm::ADDRESS_SPACE_GENERIC ||
2785-
DestAS == llvm::ADDRESS_SPACE_GENERIC)
2786-
return Op;
2787-
2788-
SDValue ToGeneric = DAG.getAddrSpaceCast(DL, OperandVT, Op.getOperand(0),
2789-
SrcAS, llvm::ADDRESS_SPACE_GENERIC);
2790-
return DAG.getAddrSpaceCast(DL, ResultVT, ToGeneric,
2791-
llvm::ADDRESS_SPACE_GENERIC, DestAS);
2779+
if (SrcAS != llvm::ADDRESS_SPACE_GENERIC &&
2780+
DestAS != llvm::ADDRESS_SPACE_GENERIC)
2781+
return DAG.getUNDEF(Op.getValueType());
2782+
return Op;
27922783
}
27932784

27942785
// This function is almost a copy of SelectionDAG::expandVAArg().

llvm/test/CodeGen/NVPTX/addrspacecast.ll

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
; RUN: llc -O0 < %s -mtriple=nvptx -mcpu=sm_20 | FileCheck %s -check-prefixes=ALL,CLS32,G32
2-
; RUN: llc -O0 < %s -mtriple=nvptx64 -mcpu=sm_20 | FileCheck %s -check-prefixes=ALL,NOPTRCONV,CLS64,G64
3-
; RUN: llc -O0 < %s -mtriple=nvptx64 -mcpu=sm_20 --nvptx-short-ptr| FileCheck %s -check-prefixes=ALL,PTRCONV,CLS64,G64
1+
; RUN: llc -O0 < %s -mtriple=nvptx -mcpu=sm_20 | FileCheck %s -check-prefixes=ALL,CLS32
2+
; RUN: llc -O0 < %s -mtriple=nvptx64 -mcpu=sm_20 | FileCheck %s -check-prefixes=ALL,NOPTRCONV,CLS64
3+
; RUN: llc -O0 < %s -mtriple=nvptx64 -mcpu=sm_20 --nvptx-short-ptr | FileCheck %s -check-prefixes=ALL,PTRCONV,CLS64
44
; RUN: %if ptxas && !ptxas-12.0 %{ llc -O0 < %s -mtriple=nvptx -mcpu=sm_20 | %ptxas-verify %}
55
; RUN: %if ptxas %{ llc -O0 < %s -mtriple=nvptx64 -mcpu=sm_20 | %ptxas-verify %}
66
; RUN: %if ptxas %{ llc -O0 < %s -mtriple=nvptx64 -mcpu=sm_20 --nvptx-short-ptr | %ptxas-verify %}
77

88
; ALL-LABEL: conv1
99
define i32 @conv1(ptr addrspace(1) %ptr) {
10-
; G32: cvta.global.u32
10+
; CLS32: cvta.global.u32
1111
; ALL-NOT: cvt.u64.u32
12-
; G64: cvta.global.u64
12+
; CLS64: cvta.global.u64
1313
; ALL: ld.u32
1414
%genptr = addrspacecast ptr addrspace(1) %ptr to ptr
1515
%val = load i32, ptr %genptr
@@ -101,13 +101,10 @@ define i32 @conv8(ptr %ptr) {
101101

102102
; ALL-LABEL: conv9
103103
define i32 @conv9(ptr addrspace(1) %ptr) {
104-
; CLS32: cvta.global.u32
105-
; CLS32: cvta.to.shared.u32
106-
; CLS64: cvta.global.u64
107-
; CLS64: cvta.to.shared.u64
108-
; PTRCONV: cvt.u32.u64
109-
; NOPTRCONV-NOT: cvt.u32.u64
110-
; ALL: ld.shared.u32
104+
; CLS32: // implicit-def: %[[ADDR:r[0-9]+]]
105+
; PTRCONV: // implicit-def: %[[ADDR:r[0-9]+]]
106+
; NOPTRCONV: // implicit-def: %[[ADDR:rd[0-9]+]]
107+
; ALL: ld.shared.u32 %r{{[0-9]+}}, [%[[ADDR]]]
111108
%specptr = addrspacecast ptr addrspace(1) %ptr to ptr addrspace(3)
112109
%val = load i32, ptr addrspace(3) %specptr
113110
ret i32 %val

0 commit comments

Comments
 (0)