From 36f5eb594940857536605200f250a5cbe41f1ec4 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Sun, 17 Nov 2013 00:06:39 +0000 Subject: [PATCH] Use right address space pointer size llvm-svn: 194940 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 3 ++- llvm/test/CodeGen/R600/32-bit-local-address-space.ll | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 85e5494b8e02..12105341e8ef 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -1126,9 +1126,10 @@ SDValue SelectionDAG::getGlobalAddress(const GlobalValue *GV, SDLoc DL, unsigned char TargetFlags) { assert((TargetFlags == 0 || isTargetGA) && "Cannot set target flags on target-independent globals"); + const TargetLowering *TLI = TM.getTargetLowering(); // Truncate (with sign-extension) the offset value to the pointer size. - unsigned BitWidth = TM.getTargetLowering()->getPointerTy().getSizeInBits(); + unsigned BitWidth = TLI->getPointerTypeSizeInBits(GV->getType()); if (BitWidth < 64) Offset = SignExtend64(Offset, BitWidth); diff --git a/llvm/test/CodeGen/R600/32-bit-local-address-space.ll b/llvm/test/CodeGen/R600/32-bit-local-address-space.ll index 566a422d9efc..63909f0b094b 100644 --- a/llvm/test/CodeGen/R600/32-bit-local-address-space.ll +++ b/llvm/test/CodeGen/R600/32-bit-local-address-space.ll @@ -73,3 +73,14 @@ define void @infer_ptr_alignment_global_offset(float addrspace(1)* %out, i32 %ti store float %val, float addrspace(1)* %out ret void } + + +@ptr = addrspace(3) global i32 addrspace(3)* null +@dst = addrspace(3) global [16384 x i32] zeroinitializer + +; SI-LABEL: @global_ptr: +; SI-CHECK: DS_WRITE_B32 +define void @global_ptr() nounwind { + store i32 addrspace(3)* getelementptr ([16384 x i32] addrspace(3)* @dst, i32 0, i32 16), i32 addrspace(3)* addrspace(3)* @ptr + ret void +}