diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AsmParser/llvmAsmParser.h.cvs | 4 | ||||
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 22 | ||||
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y.cvs | 22 | ||||
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.cpp | 4 | ||||
-rw-r--r-- | lib/Bitcode/Writer/BitcodeWriter.cpp | 1 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/IPO/InlineAlways.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/IPO/InlineSimple.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/IPO/Inliner.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/Scalar/LoopUnswitch.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/Utils/InlineCost.cpp | 2 | ||||
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 6 | ||||
-rw-r--r-- | lib/VMCore/Function.cpp | 1 | ||||
-rw-r--r-- | lib/VMCore/ParameterAttributes.cpp | 1 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 19 |
16 files changed, 52 insertions, 42 deletions
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs index 7275b9e..a45ec52 100644 --- a/lib/AsmParser/llvmAsmParser.h.cvs +++ b/lib/AsmParser/llvmAsmParser.h.cvs @@ -366,7 +366,7 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 970 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y" +#line 970 "/Volumes/Nanpura/mainline/llvm/lib/AsmParser/llvmAsmParser.y" { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -395,7 +395,7 @@ typedef union YYSTYPE llvm::GlobalValue::LinkageTypes Linkage; llvm::GlobalValue::VisibilityTypes Visibility; llvm::ParameterAttributes ParamAttrs; - llvm::FunctionNotes FunctionNotes; + llvm::ParameterAttributes FunctionNotes; llvm::APInt *APIntVal; int64_t SInt64Val; uint64_t UInt64Val; diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index a298dde..5cfc47d 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -995,7 +995,7 @@ Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) { llvm::GlobalValue::LinkageTypes Linkage; llvm::GlobalValue::VisibilityTypes Visibility; llvm::ParameterAttributes ParamAttrs; - llvm::FunctionNotes FunctionNotes; + llvm::ParameterAttributes FunctionNotes; llvm::APInt *APIntVal; int64_t SInt64Val; uint64_t UInt64Val; @@ -1091,8 +1091,8 @@ Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) { %type <UIntVal> OptCallingConv LocalNumber %type <ParamAttrs> OptParamAttrs ParamAttr %type <ParamAttrs> OptFuncAttrs FuncAttr -%type <FunctionNotes> OptFuncNotes FuncNote -%type <FunctionNotes> FuncNoteList +%type <ParamAttrs> OptFuncNotes FuncNote +%type <ParamAttrs> FuncNoteList // Basic Block Terminating Operators %token <TermOpVal> RET BR SWITCH INVOKE UNWIND UNREACHABLE @@ -1297,22 +1297,24 @@ OptFuncAttrs : /* empty */ { $$ = ParamAttr::None; } FuncNoteList : FuncNote { $$ = $1; } | FuncNoteList ',' FuncNote { - FunctionNotes tmp = $1 | $3; - if ($3 == FN_NOTE_NoInline && ($1 & FN_NOTE_AlwaysInline)) + unsigned tmp = $1 | $3; + if ($3 == ParamAttr::FN_NOTE_NoInline + && ($1 & ParamAttr::FN_NOTE_AlwaysInline)) GEN_ERROR("Function Notes may include only one inline notes!") - if ($3 == FN_NOTE_AlwaysInline && ($1 & FN_NOTE_NoInline)) + if ($3 == ParamAttr::FN_NOTE_AlwaysInline + && ($1 & ParamAttr::FN_NOTE_NoInline)) GEN_ERROR("Function Notes may include only one inline notes!") $$ = tmp; CHECK_FOR_ERROR } ; -FuncNote : INLINE '=' NEVER { $$ = FN_NOTE_NoInline; } - | INLINE '=' ALWAYS { $$ = FN_NOTE_AlwaysInline; } - | OPTIMIZEFORSIZE { $$ = FN_NOTE_OptimizeForSize; } +FuncNote : INLINE '=' NEVER { $$ = ParamAttr::FN_NOTE_NoInline; } + | INLINE '=' ALWAYS { $$ = ParamAttr::FN_NOTE_AlwaysInline; } + | OPTIMIZEFORSIZE { $$ = ParamAttr::FN_NOTE_OptimizeForSize; } ; -OptFuncNotes : /* empty */ { $$ = FN_NOTE_None; } +OptFuncNotes : /* empty */ { $$ = ParamAttr::FN_NOTE_None; } | FNNOTE '(' FuncNoteList ')' { $$ = $3; } diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs index a298dde..5cfc47d 100644 --- a/lib/AsmParser/llvmAsmParser.y.cvs +++ b/lib/AsmParser/llvmAsmParser.y.cvs @@ -995,7 +995,7 @@ Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) { llvm::GlobalValue::LinkageTypes Linkage; llvm::GlobalValue::VisibilityTypes Visibility; llvm::ParameterAttributes ParamAttrs; - llvm::FunctionNotes FunctionNotes; + llvm::ParameterAttributes FunctionNotes; llvm::APInt *APIntVal; int64_t SInt64Val; uint64_t UInt64Val; @@ -1091,8 +1091,8 @@ Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) { %type <UIntVal> OptCallingConv LocalNumber %type <ParamAttrs> OptParamAttrs ParamAttr %type <ParamAttrs> OptFuncAttrs FuncAttr -%type <FunctionNotes> OptFuncNotes FuncNote -%type <FunctionNotes> FuncNoteList +%type <ParamAttrs> OptFuncNotes FuncNote +%type <ParamAttrs> FuncNoteList // Basic Block Terminating Operators %token <TermOpVal> RET BR SWITCH INVOKE UNWIND UNREACHABLE @@ -1297,22 +1297,24 @@ OptFuncAttrs : /* empty */ { $$ = ParamAttr::None; } FuncNoteList : FuncNote { $$ = $1; } | FuncNoteList ',' FuncNote { - FunctionNotes tmp = $1 | $3; - if ($3 == FN_NOTE_NoInline && ($1 & FN_NOTE_AlwaysInline)) + unsigned tmp = $1 | $3; + if ($3 == ParamAttr::FN_NOTE_NoInline + && ($1 & ParamAttr::FN_NOTE_AlwaysInline)) GEN_ERROR("Function Notes may include only one inline notes!") - if ($3 == FN_NOTE_AlwaysInline && ($1 & FN_NOTE_NoInline)) + if ($3 == ParamAttr::FN_NOTE_AlwaysInline + && ($1 & ParamAttr::FN_NOTE_NoInline)) GEN_ERROR("Function Notes may include only one inline notes!") $$ = tmp; CHECK_FOR_ERROR } ; -FuncNote : INLINE '=' NEVER { $$ = FN_NOTE_NoInline; } - | INLINE '=' ALWAYS { $$ = FN_NOTE_AlwaysInline; } - | OPTIMIZEFORSIZE { $$ = FN_NOTE_OptimizeForSize; } +FuncNote : INLINE '=' NEVER { $$ = ParamAttr::FN_NOTE_NoInline; } + | INLINE '=' ALWAYS { $$ = ParamAttr::FN_NOTE_AlwaysInline; } + | OPTIMIZEFORSIZE { $$ = ParamAttr::FN_NOTE_OptimizeForSize; } ; -OptFuncNotes : /* empty */ { $$ = FN_NOTE_None; } +OptFuncNotes : /* empty */ { $$ = ParamAttr::FN_NOTE_None; } | FNNOTE '(' FuncNoteList ')' { $$ = $3; } diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 975075c..cfe2ba9 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1197,10 +1197,6 @@ bool BitcodeReader::ParseModule(const std::string &ModuleID) { return Error("Invalid GC ID"); Func->setGC(GCTable[Record[8]-1].c_str()); } - if (!isProto && Record.size() > 9 && Record[9]) { - Func->setNotes(Record[9]); - } - ValueList.push_back(Func); // If this is a function with a body, remember the prototype we are diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp index c647828..931e944 100644 --- a/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -412,7 +412,6 @@ static void WriteModuleInfo(const Module *M, const ValueEnumerator &VE, Vals.push_back(F->hasSection() ? SectionMap[F->getSection()] : 0); Vals.push_back(getEncodedVisibility(F)); Vals.push_back(F->hasGC() ? GCMap[F->getGC()] : 0); - Vals.push_back(F->getNotes()); unsigned AbbrevToUse = 0; Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse); diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index aae38a0..a783bd2 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -160,7 +160,7 @@ void X86ATTAsmPrinter::emitFunctionHeader(const MachineFunction &MF) { SwitchToTextSection(SectionName.c_str()); unsigned FnAlign = OptimizeForSize ? 1 : 4; - if (F->hasNote(FN_NOTE_OptimizeForSize)) + if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)) FnAlign = 1; switch (F->getLinkage()) { default: assert(0 && "Unknown linkage type!"); diff --git a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp index 12a083a..559e9eb 100644 --- a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp @@ -147,7 +147,7 @@ bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) { SwitchToTextSection(getSectionForFunction(*F).c_str(), F); unsigned FnAlign = OptimizeForSize ? 1 : 4; - if (F->hasNote(FN_NOTE_OptimizeForSize)) + if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)) FnAlign = 1; switch (F->getLinkage()) { default: assert(0 && "Unsupported linkage type!"); diff --git a/lib/Transforms/IPO/InlineAlways.cpp b/lib/Transforms/IPO/InlineAlways.cpp index ddcc79c..4793a17 100644 --- a/lib/Transforms/IPO/InlineAlways.cpp +++ b/lib/Transforms/IPO/InlineAlways.cpp @@ -63,7 +63,7 @@ bool AlwaysInliner::doInitialization(CallGraph &CG) { for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) - if (!I->isDeclaration() && !I->hasNote(FN_NOTE_AlwaysInline)) + if (!I->isDeclaration() && !I->hasNote(ParamAttr::FN_NOTE_AlwaysInline)) NeverInline.insert(I); return false; diff --git a/lib/Transforms/IPO/InlineSimple.cpp b/lib/Transforms/IPO/InlineSimple.cpp index 6fb695d..6db4c90 100644 --- a/lib/Transforms/IPO/InlineSimple.cpp +++ b/lib/Transforms/IPO/InlineSimple.cpp @@ -65,7 +65,7 @@ bool SimpleInliner::doInitialization(CallGraph &CG) { for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) - if (I->hasNote(FN_NOTE_NoInline)) + if (I->hasNote(ParamAttr::FN_NOTE_NoInline)) NeverInline.insert(I); // Get llvm.noinline diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 447bd6f..2af5a72 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -141,7 +141,7 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) { int CurrentThreshold = InlineThreshold; Function *Fn = CS.getCaller(); - if (Fn && Fn->hasNote(FN_NOTE_OptimizeForSize) + if (Fn && Fn->hasNote(ParamAttr::FN_NOTE_OptimizeForSize) && InlineThreshold != 50) { CurrentThreshold = 50; } diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp index aa9158e..178bf78 100644 --- a/lib/Transforms/Scalar/LoopUnswitch.cpp +++ b/lib/Transforms/Scalar/LoopUnswitch.cpp @@ -430,7 +430,7 @@ bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val){ Function *F = loopHeader->getParent(); // Do not unswitch if the function is optimized for size. - if (F->hasNote(FN_NOTE_OptimizeForSize)) + if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)) return false; // Check to see if it would be profitable to unswitch current loop. diff --git a/lib/Transforms/Utils/InlineCost.cpp b/lib/Transforms/Utils/InlineCost.cpp index 2a39158..eb82528 100644 --- a/lib/Transforms/Utils/InlineCost.cpp +++ b/lib/Transforms/Utils/InlineCost.cpp @@ -222,7 +222,7 @@ int InlineCostAnalyzer::getInlineCost(CallSite CS, if (CalleeFI.NeverInline) return 2000000000; - if (Callee->hasNote(FN_NOTE_AlwaysInline)) + if (Callee->hasNote(ParamAttr::FN_NOTE_AlwaysInline)) return -2000000000; // Add to the inline quality for properties that make the call valuable to diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index ab8b59b..32c468b 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -1412,12 +1412,12 @@ void AssemblyWriter::printFunction(const Function *F) { } else { bool insideNotes = false; - if (F->hasNote(FN_NOTE_AlwaysInline)) { + if (F->hasNote(ParamAttr::FN_NOTE_AlwaysInline)) { Out << "notes("; insideNotes = true; Out << "inline=always"; } - if (F->hasNote(FN_NOTE_NoInline)) { + if (F->hasNote(ParamAttr::FN_NOTE_NoInline)) { if (insideNotes) Out << ","; else { @@ -1426,7 +1426,7 @@ void AssemblyWriter::printFunction(const Function *F) { } Out << "inline=never"; } - if (F->hasNote(FN_NOTE_OptimizeForSize)) { + if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)) { if (insideNotes) Out << ","; else { diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index c1546a8..93e39df 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -174,7 +174,6 @@ Function::Function(const FunctionType *Ty, LinkageTypes Linkage, if (unsigned IID = getIntrinsicID(true)) setParamAttrs(Intrinsic::getParamAttrs(Intrinsic::ID(IID))); - Notes = 0; } Function::~Function() { diff --git a/lib/VMCore/ParameterAttributes.cpp b/lib/VMCore/ParameterAttributes.cpp index d16f54d..f1a38c4 100644 --- a/lib/VMCore/ParameterAttributes.cpp +++ b/lib/VMCore/ParameterAttributes.cpp @@ -186,6 +186,7 @@ const ParamAttrsWithIndex &PAListPtr::getSlot(unsigned Slot) const { /// getParamAttrs - The parameter attributes for the specified parameter are /// returned. Parameters for the result are denoted with Idx = 0. +/// Function notes are denoted with idx = ~0. ParameterAttributes PAListPtr::getParamAttrs(unsigned Idx) const { if (PAList == 0) return ParamAttr::None; diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index be053ab..f4a59c2 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -477,6 +477,19 @@ void Verifier::VerifyFunctionAttrs(const FunctionType *FT, } } +static bool VerifyAttributeCount(const PAListPtr &Attrs, unsigned Params) { + if (Attrs.isEmpty()) + return true; + + unsigned LastSlot = Attrs.getNumSlots() - 1; + unsigned LastIndex = Attrs.getSlot(LastSlot).Index; + if (LastIndex <= Params + || (LastIndex == (unsigned)~0 + && (LastSlot == 0 || Attrs.getSlot(LastSlot - 1).Index <= Params))) + return true; + + return false; +} // visitFunction - Verify that a function is ok. // void Verifier::visitFunction(Function &F) { @@ -497,8 +510,7 @@ void Verifier::visitFunction(Function &F) { const PAListPtr &Attrs = F.getParamAttrs(); - Assert1(Attrs.isEmpty() || - Attrs.getSlot(Attrs.getNumSlots()-1).Index <= FT->getNumParams(), + Assert1(VerifyAttributeCount(Attrs, FT->getNumParams()), "Attributes after last parameter!", &F); // Check function attributes. @@ -955,8 +967,7 @@ void Verifier::VerifyCallSite(CallSite CS) { const PAListPtr &Attrs = CS.getParamAttrs(); - Assert1(Attrs.isEmpty() || - Attrs.getSlot(Attrs.getNumSlots()-1).Index <= CS.arg_size(), + Assert1(VerifyAttributeCount(Attrs, CS.arg_size()), "Attributes after last parameter!", I); // Verify call attributes. |