diff options
-rw-r--r-- | docs/LangRef.html | 44 | ||||
-rw-r--r-- | include/llvm/LLVMContext.h | 3 | ||||
-rw-r--r-- | lib/VMCore/LLVMContext.cpp | 5 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 33 | ||||
-rw-r--r-- | test/Verifier/alloc-1.ll | 48 | ||||
-rw-r--r-- | test/Verifier/alloc-2.ll | 19 |
6 files changed, 1 insertions, 151 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index 2b81279b6e..9cb7e6392a 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -105,7 +105,6 @@ <li><a href="#tbaa">'<tt>tbaa</tt>' Metadata</a></li> <li><a href="#fpmath">'<tt>fpmath</tt>' Metadata</a></li> <li><a href="#range">'<tt>range</tt>' Metadata</a></li> - <li><a href="#alloc">'<tt>alloc</tt>' Metadata</a></li> </ol> </li> </ol> @@ -3078,49 +3077,6 @@ call void @llvm.dbg.value(metadata !24, i64 0, metadata !25) </pre> </div> </div> - -<!-- _______________________________________________________________________ --> -<h4> - <a name="alloc">'<tt>alloc</tt>' Metadata</a> -</h4> - -<div> - -<p><tt>alloc</tt> metadata may be attached to any instruction returning a - pointer. It can be used to express the size and offset relative to the - beginning of the buffer pointed by.</p> - -<blockquote> - -<p>The first parameter is a function that returns the size of the buffer, and - the second (optional) parameter is a function that returns the offset from - the beginning of the buffer. If the second parameter is not present or null, - the offset is assumed to be null. Both functions must be either readonly or - readnone.</p> -<p><tt>alloc</tt> metadata can have additional parameters, which are passed to - the size and offset functions when they are evaluated. Therefore the size and - offset functions must have the same signature.</p> - -</blockquote> - - -<p>Examples:</p> -<div class="doc_code"> -<pre> - ; size of buffer allocated by this call is my_malloc_size(%s), and offset=0 - %a = call my_malloc(%s), !alloc !{i32 (i32)* @my_malloc_size, null, i32 %s} - - ; size of the buffer pointed by *ptr is size(%x), and offset=offset(%x) - %b = load i8** %foo, !alloc !{i32 (i32)* @size, i32 (i32)* @offset, i32 %x} - - ; size of buffer allocated by this call is foo_size(), and offset=0 - %a = call alloc_foo(%s), !alloc !0 -... -!0 = metadata {i32 ()* @foo_size} -</pre> -</div> -</div> - </div> </div> diff --git a/include/llvm/LLVMContext.h b/include/llvm/LLVMContext.h index d15f3e0850..a8306a9e76 100644 --- a/include/llvm/LLVMContext.h +++ b/include/llvm/LLVMContext.h @@ -43,8 +43,7 @@ public: MD_tbaa = 1, // "tbaa" MD_prof = 2, // "prof" MD_fpmath = 3, // "fpmath" - MD_range = 4, // "range" - MD_alloc = 5 // "alloc" + MD_range = 4 // "range" }; /// getMDKindID - Return a unique non-zero ID for the specified metadata kind. diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index a140543a51..f07f0b3939 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/lib/VMCore/LLVMContext.cpp @@ -53,11 +53,6 @@ LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { unsigned RangeID = getMDKindID("range"); assert(RangeID == MD_range && "range kind id drifted"); (void)RangeID; - - // Create the 'alloc' metadata kind. - unsigned AllocID = getMDKindID("alloc"); - assert(AllocID == MD_alloc && "alloc kind id drifted"); - (void)AllocID; } LLVMContext::~LLVMContext() { delete pImpl; } diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 2ca4854d9a..477b81dc67 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -1672,39 +1672,6 @@ void Verifier::visitInstruction(Instruction &I) { } } - if (MDNode *MD = I.getMetadata(LLVMContext::MD_alloc)) { - Assert1(I.getType()->isPointerTy(), "alloc requires a pointer result", &I); - Assert1(MD->getNumOperands() >= 1, "alloc takes at least one operand", &I); - Function *SizeFn = dyn_cast<Function>(MD->getOperand(0)); - Function *OffsetFn = MD->getNumOperands() >= 2 ? - dyn_cast_or_null<Function>(MD->getOperand(1)) : 0; - Assert1(SizeFn, "first parameter of alloc must be a function", &I); - Assert1(MD->getNumOperands() == 1 || !MD->getOperand(1) || OffsetFn, - "second parameter of alloc must be either a function or null", &I); - Assert1(SizeFn->onlyReadsMemory(), - "size function must be readonly/readnone", &I); - Assert1(!OffsetFn || OffsetFn->onlyReadsMemory(), - "offset function must be readonly/readnone", &I); - Assert1(SizeFn->getReturnType()->isIntegerTy(), - "size function must return an integer", &I); - Assert1(!OffsetFn || OffsetFn->getReturnType()->isIntegerTy(), - "offset function must return an integer", &I); - - FunctionType *SizeFnTy = SizeFn->getFunctionType(); - FunctionType *OffsetFnTy = OffsetFn ? OffsetFn->getFunctionType() : 0; - Assert1(SizeFnTy->getNumParams() == MD->getNumOperands()-2, - "size function number of parameters mismatch", &I); - Assert1(!OffsetFnTy || OffsetFnTy->getNumParams() == MD->getNumOperands()-2, - "offset function number of parameters mismatch", &I); - for (unsigned i = 0, e = SizeFnTy->getNumParams(); i != e; ++i) { - Assert1(SizeFnTy->getParamType(i) == MD->getOperand(i+2)->getType(), - "size function parameter type mismatch", &I); - if (OffsetFnTy) - Assert1(OffsetFnTy->getParamType(i) == MD->getOperand(i+2)->getType(), - "offset function parameter type mismatch", &I); - } - } - MDNode *MD = I.getMetadata(LLVMContext::MD_range); Assert1(!MD || isa<LoadInst>(I), "Ranges are only for loads!", &I); diff --git a/test/Verifier/alloc-1.ll b/test/Verifier/alloc-1.ll deleted file mode 100644 index 60917a03be..0000000000 --- a/test/Verifier/alloc-1.ll +++ /dev/null @@ -1,48 +0,0 @@ -; RUN: not llvm-as < %s -o /dev/null |& FileCheck %s - -declare i32 @size() readonly -declare i32 @sizeR() -declare i32 @size1(i32) readnone -declare i32 @size1i8(i8) readnone -declare i32* @sizeptr() readnone - -define void @f1(i8** %x, i32* %y) { -entry: - %0 = load i8** %x, !alloc !0 - %1 = load i8** %x, !alloc !1 - %2 = load i8** %x, !alloc !2 - %3 = load i8** %x, !alloc !3 - %4 = load i8** %x, !alloc !4 - %5 = load i8** %x, !alloc !5 - %6 = load i8** %x, !alloc !6 - %7 = load i8** %x, !alloc !7 - %8 = load i8** %x, !alloc !8 - %9 = load i32* %y, !alloc !9 - %10 = load i8** %x, !alloc !10 - %11 = load i8** %x, !alloc !11 - ret void -} -; CHECK: alloc takes at least one operand -!0 = metadata !{} -; CHECK: first parameter of alloc must be a function -!1 = metadata !{i32 0} -; CHECK: second parameter of alloc must be either a function or null -!2 = metadata !{i32 ()* @size, i32 0} -; CHECK: size function number of parameters mismatch -!3 = metadata !{i32 ()* @size, null, i32 0} -; CHECK: offset function number of parameters mismatch -!4 = metadata !{i32 (i32)* @size1, i32 ()* @size, i32 1} -; CHECK: size function must be readonly/readnone -!5 = metadata !{i32 ()* @sizeR, i32 ()* @size} -; CHECK: offset function must be readonly/readnone -!6 = metadata !{i32 ()* @size, i32 ()* @sizeR} -; CHECK: size function parameter type mismatch -!7 = metadata !{i32 (i32)* @size1, i32 (i8)* @size1i8, i8 5} -; CHECK: offset function parameter type mismatch -!8 = metadata !{i32 (i8)* @size1i8, i32 (i32)* @size1, i8 5} -; CHECK: alloc requires a pointer result -!9 = metadata !{i32 ()* @size, null} -; CHECK: size function must return an integer -!10 = metadata !{i32* ()* @sizeptr, null} -; CHECK: offset function must return an integer -!11 = metadata !{i32 ()* @size, i32* ()* @sizeptr} diff --git a/test/Verifier/alloc-2.ll b/test/Verifier/alloc-2.ll deleted file mode 100644 index 10496d141a..0000000000 --- a/test/Verifier/alloc-2.ll +++ /dev/null @@ -1,19 +0,0 @@ -; RUN: llvm-as < %s -o /dev/null - -declare i32 @size() readonly -declare i32 @size1(i32) readnone -declare i32 @size1i8(i8) readnone - -define void @ok(i8** %x, i32 %y) { -entry: - %0 = load i8** %x, !alloc !0 - %1 = load i8** %x, !alloc !1 - %2 = load i8** %x, !alloc !2 - %3 = load i8** %x, !alloc !3 - %4 = load i8** %x, !alloc !{i32 (i32)* @size1, i32 (i32)* @size1, i32 %y} - ret void -} -!0 = metadata !{i32 ()* @size, i32 ()* @size} -!1 = metadata !{i32 ()* @size, null} -!2 = metadata !{i32 (i32)* @size1, i32 (i32)* @size1, i32 0} -!3 = metadata !{i32 (i8)* @size1i8, i32 (i8)* @size1i8, i8 0} |