Fix codegen for null different sized pointer.

llvm-svn: 194932
This commit is contained in:
Matt Arsenault 2013-11-16 20:24:41 +00:00
parent 378a9f2b91
commit 19231e630e
2 changed files with 15 additions and 2 deletions

View File

@ -1064,8 +1064,10 @@ SDValue SelectionDAGBuilder::getValueImpl(const Value *V) {
if (const GlobalValue *GV = dyn_cast<GlobalValue>(C)) if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
return DAG.getGlobalAddress(GV, getCurSDLoc(), VT); return DAG.getGlobalAddress(GV, getCurSDLoc(), VT);
if (isa<ConstantPointerNull>(C)) if (isa<ConstantPointerNull>(C)) {
return DAG.getConstant(0, TLI->getPointerTy()); unsigned AS = V->getType()->getPointerAddressSpace();
return DAG.getConstant(0, TLI->getPointerTy(AS));
}
if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C))
return DAG.getConstantFP(*CFP, VT); return DAG.getConstantFP(*CFP, VT);

View File

@ -40,3 +40,14 @@ entry:
store i32 %1, i32 addrspace(1)* %out store i32 %1, i32 addrspace(1)* %out
ret void ret void
} }
; CHECK-LABEL: @null_32bit_lds_ptr:
; CHECK: V_CMP_NE_I32
; CHECK-NOT: V_CMP_NE_I32
; CHECK: V_CNDMASK_B32
define void @null_32bit_lds_ptr(i32 addrspace(1)* %out, i32 addrspace(3)* %lds) nounwind {
%cmp = icmp ne i32 addrspace(3)* %lds, null
%x = select i1 %cmp, i32 123, i32 456
store i32 %x, i32 addrspace(1)* %out
ret void
}