diff --git a/lib/SPIRV/SPIRVWriter.cpp b/lib/SPIRV/SPIRVWriter.cpp index db2d9fa8a..e059126c1 100644 --- a/lib/SPIRV/SPIRVWriter.cpp +++ b/lib/SPIRV/SPIRVWriter.cpp @@ -1672,7 +1672,8 @@ SPIRVValue *LLVMToSPIRVBase::transUnaryInst(UnaryInstruction *U, } else { BOC = OpCrossWorkgroupCastToPtrINTEL; } - } else if (isa(Cast->getPointerOperand())) { + } else if (isa(Cast->getPointerOperand()) && + SrcAddrSpace != SPIRAS_Generic) { SPIRVType *TransTy = transScavengedType(U); return BM->addNullConstant(bcast(TransTy)); } else { diff --git a/test/SpecConstants/keep-tracked-const.ll b/test/SpecConstants/keep-tracked-const.ll index 04a568187..a00944338 100644 --- a/test/SpecConstants/keep-tracked-const.ll +++ b/test/SpecConstants/keep-tracked-const.ll @@ -17,8 +17,8 @@ target triple = "spir64-unknown-unknown" ; CHECK: Constant [[#Int8]] [[#]] 1 ; CHECK: Constant [[#Int8]] [[#]] 0 -; CHECK: Constant [[#Int32]] [[#]] 0 -; CHECK: Constant [[#Int32]] [[#]] 1 +; CHECK-DAG: Constant [[#Int32]] [[#]] 1 +; CHECK-DAG: Constant [[#Int32]] [[#]] 0 ; CHECK-LLVM: %conv17.i = sext i8 1 to i64 diff --git a/test/addrspacecast_generic_null.ll b/test/addrspacecast_generic_null.ll new file mode 100644 index 000000000..9a90e0a7b --- /dev/null +++ b/test/addrspacecast_generic_null.ll @@ -0,0 +1,18 @@ +; RUN: llvm-spirv %s -o %t.spv +; RUN: spirv-dis %t.spv | FileCheck %s + +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1" +target triple = "spir64-unknown-unknown" + +; Test that addrspacecast of generic null pointer generates GenericCastToPtr +; instruction in SPIR-V. + +; CHECK: %_ptr_Workgroup_uchar = OpTypePointer Workgroup %uchar +; CHECK: %[[NULL:[0-9]+]] = OpConstantNull %_ptr_Generic_uchar +; CHECK: %[[CAST:[0-9]+]] = OpGenericCastToPtr %_ptr_Workgroup_uchar %[[NULL]] +; CHECK: OpPtrEqual %bool %[[CAST]] + +define spir_kernel void @bar_generic_null(ptr addrspace(3) %arg) { + %expr = icmp eq ptr addrspace(3) addrspacecast (ptr addrspace(4) null to ptr addrspace(3)), %arg + ret void +}