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
This commit is contained in:
Christopher Lamb 2007-12-17 01:00:21 +00:00
parent 17af357779
commit 303dae993a
2 changed files with 16 additions and 2 deletions

View File

@ -2671,7 +2671,8 @@ allocate, and free memory in LLVM.</p>
<h5>Overview:</h5> <h5>Overview:</h5>
<p>The '<tt>malloc</tt>' instruction allocates memory from the system <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> <h5>Arguments:</h5>
@ -2758,7 +2759,8 @@ after this instruction executes.</p>
<p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the <p>The '<tt>alloca</tt>' instruction allocates memory on the stack frame of the
currently executing function, to be automatically released when this function 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> <h5>Arguments:</h5>
@ -3972,6 +3974,10 @@ Front-ends for type-safe garbage collected languages should generate these
intrinsics to make use of the LLVM garbage collectors. For more details, see <a intrinsics to make use of the LLVM garbage collectors. For more details, see <a
href="GarbageCollection.html">Accurate Garbage Collection with LLVM</a>. href="GarbageCollection.html">Accurate Garbage Collection with LLVM</a>.
</p> </p>
<p>The garbage collection intrinsics only operate on objects in the generic
address space (address space zero).</p>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->

View File

@ -254,6 +254,7 @@ namespace { // Anonymous namespace for class
void visitUserOp1(Instruction &I); void visitUserOp1(Instruction &I);
void visitUserOp2(Instruction &I) { visitUserOp1(I); } void visitUserOp2(Instruction &I) { visitUserOp1(I); }
void visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI); void visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI);
void visitAllocationInst(AllocationInst &AI);
void VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F, void VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F,
unsigned Count, ...); unsigned Count, ...);
@ -987,6 +988,13 @@ void Verifier::visitStoreInst(StoreInst &SI) {
visitInstruction(SI); 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. /// verifyInstruction - Verify that an instruction is well formed.
/// ///