From 048ffb239c282277959463c61200b86e2380cb84 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 12 Jan 2009 01:18:58 +0000 Subject: [PATCH] make tblgen emit the entire Intrinsic::getAttributes method, not a random piece of it. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62066 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Function.cpp | 11 +---------- utils/TableGen/IntrinsicEmitter.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 8eaff880ee4..bda2eff4c99 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -359,20 +359,11 @@ const FunctionType *Intrinsic::getType(ID id, const Type **Tys, return FunctionType::get(ResultTy, ArgTys, IsVarArg); } -AttrListPtr Intrinsic::getAttributes(ID id) { - Attributes Attr = Attribute::None; - +/// This defines the "Intrinsic::getAttributes(ID id)" method. #define GET_INTRINSIC_ATTRIBUTES #include "llvm/Intrinsics.gen" #undef GET_INTRINSIC_ATTRIBUTES - // Intrinsics cannot throw exceptions. - Attr |= Attribute::NoUnwind; - - AttributeWithIndex PAWI = AttributeWithIndex::get(~0, Attr); - return AttrListPtr::get(&PAWI, 1); -} - Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys, unsigned numTys) { // There can never be multiple globals with the same name of different types, diff --git a/utils/TableGen/IntrinsicEmitter.cpp b/utils/TableGen/IntrinsicEmitter.cpp index 86e83e59111..714e73f22cd 100644 --- a/utils/TableGen/IntrinsicEmitter.cpp +++ b/utils/TableGen/IntrinsicEmitter.cpp @@ -387,10 +387,14 @@ void IntrinsicEmitter::EmitGenerator(const std::vector &Ints, OS << "#endif\n\n"; } +/// EmitAttributes - This emits the Intrinsic::getAttributes method. void IntrinsicEmitter:: EmitAttributes(const std::vector &Ints, std::ostream &OS) { OS << "// Add parameter attributes that are not common to all intrinsics.\n"; OS << "#ifdef GET_INTRINSIC_ATTRIBUTES\n"; + OS << "AttrListPtr Intrinsic::getAttributes(ID id) {"; + OS << " // No intrinsic can throw exceptions.\n"; + OS << " Attributes Attr = Attribute::NoUnwind;\n"; OS << " switch (id) {\n"; OS << " default: break;\n"; for (unsigned i = 0, e = Ints.size(); i != e; ++i) { @@ -415,6 +419,9 @@ EmitAttributes(const std::vector &Ints, std::ostream &OS) { OS << " Attr |= Attribute::ReadOnly; // These do not write memory.\n"; OS << " break;\n"; OS << " }\n"; + OS << " AttributeWithIndex PAWI = AttributeWithIndex::get(~0, Attr);\n"; + OS << " return AttrListPtr::get(&PAWI, 1);\n"; + OS << "}\n"; OS << "#endif\n\n"; }