<div dir="ltr">LGTM.<div><br></div><div>-Eli</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Sep 27, 2013 at 6:32 PM, Matt Arsenault <span dir="ltr"><<a href="mailto:Matthew.Arsenault@amd.com" target="_blank">Matthew.Arsenault@amd.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">  Fix address space when a bitcast is necessary<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1781" target="_blank">http://llvm-reviews.chandlerc.com/D1781</a><br>
<br>
CHANGE SINCE LAST DIFF<br>
  <a href="http://llvm-reviews.chandlerc.com/D1781?vs=4536&id=4537#toc" target="_blank">http://llvm-reviews.chandlerc.com/D1781?vs=4536&id=4537#toc</a><br>
<div class="im"><br>
Files:<br>
  lib/IR/Module.cpp<br>
  unittests/IR/ValueTest.cpp<br>
<br>
Index: lib/IR/Module.cpp<br>
===================================================================<br>
--- lib/IR/Module.cpp<br>
+++ lib/IR/Module.cpp<br>
</div>@@ -260,8 +260,10 @@<br>
<div class="im"><br>
   // If the variable exists but has the wrong type, return a bitcast to the<br>
   // right type.<br>
-  if (GV->getType() != PointerType::getUnqual(Ty))<br>
</div>-    return ConstantExpr::getBitCast(GV, PointerType::getUnqual(Ty));<br>
<div class="im">+  Type *GVTy = GV->getType();<br>
</div>+  PointerType *PTy = PointerType::get(Ty, GVTy->getPointerAddressSpace());<br>
+  if (GV->getType() != PTy)<br>
+    return ConstantExpr::getBitCast(GV, PTy);<br>
<div class="im"><br>
   // Otherwise, we just found the existing function or a prototype.<br>
</div>   return GV;<br>
<div class="im">Index: unittests/IR/ValueTest.cpp<br>
===================================================================<br>
--- unittests/IR/ValueTest.cpp<br>
+++ unittests/IR/ValueTest.cpp<br>
</div>@@ -43,4 +43,46 @@<br>
<div class="im">   EXPECT_TRUE(F->arg_begin()->isUsedInBasicBlock(F->begin()));<br>
 }<br>
<br>
+TEST(GlobalTest, CreateAddressSpace) {<br>
+  LLVMContext &Ctx = getGlobalContext();<br>
+  OwningPtr<Module> M(new Module("TestModule", Ctx));<br>
</div>+  Type *Int8Ty = Type::getInt32Ty(Ctx);<br>
<div class="im">+  Type *Int32Ty = Type::getInt32Ty(Ctx);<br>
+<br>
+  GlobalVariable *Dummy0<br>
+    = new GlobalVariable(*M,<br>
+                         Int32Ty,<br>
+                         true,<br>
+                         GlobalValue::ExternalLinkage,<br>
+                         Constant::getAllOnesValue(Int32Ty),<br>
+                         "dummy",<br>
+                         0,<br>
+                         GlobalVariable::NotThreadLocal,<br>
+                         1);<br>
+<br>
+  // Make sure the address space isn't dropped when returning this.<br>
+  Constant *Dummy1 = M->getOrInsertGlobal("dummy", Int32Ty);<br>
+  EXPECT_EQ(Dummy0, Dummy1);<br>
</div>+  EXPECT_EQ(1u, Dummy1->getType()->getPointerAddressSpace());<br>
+<br>
+<br>
+  // This one requires a bitcast, but the address space must also stay the same.<br>
+<br>
+  GlobalVariable *DummyCast0<br>
<div class="im">+    = new GlobalVariable(*M,<br>
+                         Int32Ty,<br>
+                         true,<br>
+                         GlobalValue::ExternalLinkage,<br>
+                         Constant::getAllOnesValue(Int32Ty),<br>
</div>+                         "dummy_cast",<br>
<div class="im">+                         0,<br>
+                         GlobalVariable::NotThreadLocal,<br>
+                         1);<br>
+<br>
+  // Make sure the address space isn't dropped when returning this.<br>
</div>+  Constant *DummyCast1 = M->getOrInsertGlobal("dummy_cast", Int8Ty);<br>
+  EXPECT_EQ(1u, DummyCast1->getType()->getPointerAddressSpace());<br>
+<br>
<div class="HOEnZb"><div class="h5">+<br>
+}<br>
 } // end anonymous namespace<br>
</div></div><br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>