Make it clear in the LangRef that allocation instructions only operated on the generic address space. Implement support in the verifier for ensuring this is true.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45080 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/docs/LangRef.html b/docs/LangRef.html
index df6baa7..f9e0824 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -2671,7 +2671,8 @@
 <h5>Overview:</h5>
 
 <p>The '<tt>malloc</tt>' instruction allocates memory from the system
-heap and returns a pointer to it.</p>
+heap and returns a pointer to it. The object is always allocated in the generic 
+address space (address space zero).</p>
 
 <h5>Arguments:</h5>
 
@@ -2758,7 +2759,8 @@
 
 <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
 currently executing function, to be automatically released when this function
-returns to its caller.</p>
+returns to its caller. The object is always allocated in the generic address 
+space (address space zero).</p>
 
 <h5>Arguments:</h5>
 
@@ -3972,6 +3974,10 @@
 intrinsics to make use of the LLVM garbage collectors.  For more details, see <a
 href="GarbageCollection.html">Accurate Garbage Collection with LLVM</a>.
 </p>
+
+<p>The garbage collection intrinsics only operate on objects in the generic 
+	address space (address space zero).</p>
+
 </div>
 
 <!-- _______________________________________________________________________ -->
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index c3633ff..fb8db17 100644
--- a/lib/VMCore/Verifier.cpp
+++ b/lib/VMCore/Verifier.cpp
@@ -254,6 +254,7 @@
     void visitUserOp1(Instruction &I);
     void visitUserOp2(Instruction &I) { visitUserOp1(I); }
     void visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI);
+    void visitAllocationInst(AllocationInst &AI);
 
     void VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F,
                                   unsigned Count, ...);
@@ -987,6 +988,13 @@
   visitInstruction(SI);
 }
 
+void Verifier::visitAllocationInst(AllocationInst &AI) {
+  const PointerType *Ptr = AI.getType();
+  Assert(Ptr->getAddressSpace() == 0, 
+    "Allocation instruction pointer not in the generic address space!");
+  visitInstruction(AI);
+}
+
 
 /// verifyInstruction - Verify that an instruction is well formed.
 ///