Use right address space pointer size
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Sun, 17 Nov 2013 00:06:39 +0000 (00:06 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Sun, 17 Nov 2013 00:06:39 +0000 (00:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194940 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAG.cpp
test/CodeGen/R600/32-bit-local-address-space.ll

index 85e5494b8e0245d9f0e40871a51a12e92b52a300..12105341e8efef3d730be2a6ad5862f9d11dc06a 100644 (file)
@@ -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);
 
index 566a422d9efc1fc44cf008e279d830f0dbc5317a..63909f0b094bc0bd1670648d9dd4df57fd6baa21 100644 (file)
@@ -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
+}