Index: llvm/trunk/lib/Transforms/Scalar/InferAddressSpaces.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/InferAddressSpaces.cpp +++ llvm/trunk/lib/Transforms/Scalar/InferAddressSpaces.cpp @@ -358,7 +358,8 @@ // If the operands of the expression on the top are already explored, // adds that expression to the resultant postorder. if (PostorderStack.back().second) { - Postorder.push_back(TopVal); + if (TopVal->getType()->getPointerAddressSpace() == FlatAddrSpace) + Postorder.push_back(TopVal); PostorderStack.pop_back(); continue; } Index: llvm/trunk/test/Transforms/InferAddressSpaces/AMDGPU/basic.ll =================================================================== --- llvm/trunk/test/Transforms/InferAddressSpaces/AMDGPU/basic.ll +++ llvm/trunk/test/Transforms/InferAddressSpaces/AMDGPU/basic.ll @@ -170,4 +170,16 @@ ret { i32 addrspace(4)*, i1 } %ret } +; Null pointer in local addr space +; CHECK-LABEL: @local_nullptr +; CHECK: icmp ne i8 addrspace(3)* %a, addrspacecast (i8* null to i8 addrspace(3)*) +; CHECK-NOT: i8 addrspace(3)* null +define void @local_nullptr(i32 addrspace(1)* nocapture %results, i8 addrspace(3)* %a) { +entry: + %tobool = icmp ne i8 addrspace(3)* %a, addrspacecast (i8* null to i8 addrspace(3)*) + %conv = zext i1 %tobool to i32 + store i32 %conv, i32 addrspace(1)* %results, align 4 + ret void +} + attributes #0 = { nounwind }