mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 20:59:51 +00:00
Move FN_NOTE_AlwaysInline and other out of ParamAttrs namespace.
Do not check isDeclaration() in hasNote(). It is clients' responsibility. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56524 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06117b6598
commit
dd4924c564
@ -46,13 +46,6 @@ const Attributes ReadOnly = 1<<10; ///< Function only reads from memory
|
||||
const Attributes Alignment = 0xffff<<16; ///< Alignment of parameter (16 bits)
|
||||
// 0 = unknown, else in clear (not log)
|
||||
|
||||
/// Function notes are implemented as attributes stored at index ~0 in
|
||||
/// parameter attribute list.
|
||||
const Attributes FN_NOTE_None = 0;
|
||||
const Attributes FN_NOTE_NoInline = 1<<0; // inline=never
|
||||
const Attributes FN_NOTE_AlwaysInline = 1<<1; // inline=always
|
||||
const Attributes FN_NOTE_OptimizeForSize = 1<<2; // opt_size
|
||||
|
||||
/// @brief Attributes that only apply to function parameters.
|
||||
const Attributes ParameterOnly = ByVal | Nest | StructRet;
|
||||
|
||||
@ -85,6 +78,12 @@ inline Attributes constructAlignmentFromInt(unsigned i) {
|
||||
std::string getAsString(Attributes Attrs);
|
||||
} // end namespace ParamAttr
|
||||
|
||||
/// Function notes are implemented as attributes stored at index ~0 in
|
||||
/// parameter attribute list.
|
||||
const Attributes FN_NOTE_None = 0;
|
||||
const Attributes FN_NOTE_NoInline = 1<<0; // inline=never
|
||||
const Attributes FN_NOTE_AlwaysInline = 1<<1; // inline=always
|
||||
const Attributes FN_NOTE_OptimizeForSize = 1<<2; // opt_size
|
||||
|
||||
/// This is just a pair of values to associate a set of parameter attributes
|
||||
/// with a parameter index.
|
||||
|
@ -152,7 +152,7 @@ public:
|
||||
/// hasNote - Return true if this function has given note.
|
||||
bool hasNote(Attributes N) const {
|
||||
// Notes are stored at ~0 index in parameter attribute list
|
||||
return (!isDeclaration() && paramHasAttr(~0, N));
|
||||
return (paramHasAttr(~0, N));
|
||||
}
|
||||
|
||||
/// setNotes - Set notes for this function
|
||||
|
@ -4125,11 +4125,11 @@ yyreduce:
|
||||
#line 1298 "/Volumes/Nanpura/mainline/llvm/lib/AsmParser/llvmAsmParser.y"
|
||||
{
|
||||
unsigned tmp = (yyvsp[(1) - (3)].ParamAttrs) | (yyvsp[(3) - (3)].ParamAttrs);
|
||||
if ((yyvsp[(3) - (3)].ParamAttrs) == ParamAttr::FN_NOTE_NoInline
|
||||
&& ((yyvsp[(1) - (3)].ParamAttrs) & ParamAttr::FN_NOTE_AlwaysInline))
|
||||
if ((yyvsp[(3) - (3)].ParamAttrs) == FN_NOTE_NoInline
|
||||
&& ((yyvsp[(1) - (3)].ParamAttrs) & FN_NOTE_AlwaysInline))
|
||||
GEN_ERROR("Function Notes may include only one inline notes!")
|
||||
if ((yyvsp[(3) - (3)].ParamAttrs) == ParamAttr::FN_NOTE_AlwaysInline
|
||||
&& ((yyvsp[(1) - (3)].ParamAttrs) & ParamAttr::FN_NOTE_NoInline))
|
||||
if ((yyvsp[(3) - (3)].ParamAttrs) == FN_NOTE_AlwaysInline
|
||||
&& ((yyvsp[(1) - (3)].ParamAttrs) & FN_NOTE_NoInline))
|
||||
GEN_ERROR("Function Notes may include only one inline notes!")
|
||||
(yyval.ParamAttrs) = tmp;
|
||||
CHECK_FOR_ERROR
|
||||
@ -4138,22 +4138,22 @@ yyreduce:
|
||||
|
||||
case 131:
|
||||
#line 1311 "/Volumes/Nanpura/mainline/llvm/lib/AsmParser/llvmAsmParser.y"
|
||||
{ (yyval.ParamAttrs) = ParamAttr::FN_NOTE_NoInline; ;}
|
||||
{ (yyval.ParamAttrs) = FN_NOTE_NoInline; ;}
|
||||
break;
|
||||
|
||||
case 132:
|
||||
#line 1312 "/Volumes/Nanpura/mainline/llvm/lib/AsmParser/llvmAsmParser.y"
|
||||
{ (yyval.ParamAttrs) = ParamAttr::FN_NOTE_AlwaysInline; ;}
|
||||
{ (yyval.ParamAttrs) = FN_NOTE_AlwaysInline; ;}
|
||||
break;
|
||||
|
||||
case 133:
|
||||
#line 1313 "/Volumes/Nanpura/mainline/llvm/lib/AsmParser/llvmAsmParser.y"
|
||||
{ (yyval.ParamAttrs) = ParamAttr::FN_NOTE_OptimizeForSize; ;}
|
||||
{ (yyval.ParamAttrs) = FN_NOTE_OptimizeForSize; ;}
|
||||
break;
|
||||
|
||||
case 134:
|
||||
#line 1316 "/Volumes/Nanpura/mainline/llvm/lib/AsmParser/llvmAsmParser.y"
|
||||
{ (yyval.ParamAttrs) = ParamAttr::FN_NOTE_None; ;}
|
||||
{ (yyval.ParamAttrs) = FN_NOTE_None; ;}
|
||||
break;
|
||||
|
||||
case 135:
|
||||
|
@ -1297,23 +1297,23 @@ OptFuncAttrs : /* empty */ { $$ = ParamAttr::None; }
|
||||
FuncNoteList : FuncNote { $$ = $1; }
|
||||
| FuncNoteList ',' FuncNote {
|
||||
unsigned tmp = $1 | $3;
|
||||
if ($3 == ParamAttr::FN_NOTE_NoInline
|
||||
&& ($1 & ParamAttr::FN_NOTE_AlwaysInline))
|
||||
if ($3 == FN_NOTE_NoInline
|
||||
&& ($1 & FN_NOTE_AlwaysInline))
|
||||
GEN_ERROR("Function Notes may include only one inline notes!")
|
||||
if ($3 == ParamAttr::FN_NOTE_AlwaysInline
|
||||
&& ($1 & ParamAttr::FN_NOTE_NoInline))
|
||||
if ($3 == FN_NOTE_AlwaysInline
|
||||
&& ($1 & FN_NOTE_NoInline))
|
||||
GEN_ERROR("Function Notes may include only one inline notes!")
|
||||
$$ = tmp;
|
||||
CHECK_FOR_ERROR
|
||||
}
|
||||
;
|
||||
|
||||
FuncNote : INLINE '=' NEVER { $$ = ParamAttr::FN_NOTE_NoInline; }
|
||||
| INLINE '=' ALWAYS { $$ = ParamAttr::FN_NOTE_AlwaysInline; }
|
||||
| OPTIMIZEFORSIZE { $$ = ParamAttr::FN_NOTE_OptimizeForSize; }
|
||||
FuncNote : INLINE '=' NEVER { $$ = FN_NOTE_NoInline; }
|
||||
| INLINE '=' ALWAYS { $$ = FN_NOTE_AlwaysInline; }
|
||||
| OPTIMIZEFORSIZE { $$ = FN_NOTE_OptimizeForSize; }
|
||||
;
|
||||
|
||||
OptFuncNotes : /* empty */ { $$ = ParamAttr::FN_NOTE_None; }
|
||||
OptFuncNotes : /* empty */ { $$ = FN_NOTE_None; }
|
||||
| FNNOTE '(' FuncNoteList ')' {
|
||||
$$ = $3;
|
||||
}
|
||||
|
@ -1297,23 +1297,23 @@ OptFuncAttrs : /* empty */ { $$ = ParamAttr::None; }
|
||||
FuncNoteList : FuncNote { $$ = $1; }
|
||||
| FuncNoteList ',' FuncNote {
|
||||
unsigned tmp = $1 | $3;
|
||||
if ($3 == ParamAttr::FN_NOTE_NoInline
|
||||
&& ($1 & ParamAttr::FN_NOTE_AlwaysInline))
|
||||
if ($3 == FN_NOTE_NoInline
|
||||
&& ($1 & FN_NOTE_AlwaysInline))
|
||||
GEN_ERROR("Function Notes may include only one inline notes!")
|
||||
if ($3 == ParamAttr::FN_NOTE_AlwaysInline
|
||||
&& ($1 & ParamAttr::FN_NOTE_NoInline))
|
||||
if ($3 == FN_NOTE_AlwaysInline
|
||||
&& ($1 & FN_NOTE_NoInline))
|
||||
GEN_ERROR("Function Notes may include only one inline notes!")
|
||||
$$ = tmp;
|
||||
CHECK_FOR_ERROR
|
||||
}
|
||||
;
|
||||
|
||||
FuncNote : INLINE '=' NEVER { $$ = ParamAttr::FN_NOTE_NoInline; }
|
||||
| INLINE '=' ALWAYS { $$ = ParamAttr::FN_NOTE_AlwaysInline; }
|
||||
| OPTIMIZEFORSIZE { $$ = ParamAttr::FN_NOTE_OptimizeForSize; }
|
||||
FuncNote : INLINE '=' NEVER { $$ = FN_NOTE_NoInline; }
|
||||
| INLINE '=' ALWAYS { $$ = FN_NOTE_AlwaysInline; }
|
||||
| OPTIMIZEFORSIZE { $$ = FN_NOTE_OptimizeForSize; }
|
||||
;
|
||||
|
||||
OptFuncNotes : /* empty */ { $$ = ParamAttr::FN_NOTE_None; }
|
||||
OptFuncNotes : /* empty */ { $$ = FN_NOTE_None; }
|
||||
| FNNOTE '(' FuncNoteList ')' {
|
||||
$$ = $3;
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ void X86ATTAsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
|
||||
SwitchToTextSection(SectionName.c_str());
|
||||
|
||||
unsigned FnAlign = OptimizeForSize ? 1 : 4;
|
||||
if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize))
|
||||
if (!F->isDeclaration() && F->hasNote(FN_NOTE_OptimizeForSize))
|
||||
FnAlign = 1;
|
||||
switch (F->getLinkage()) {
|
||||
default: assert(0 && "Unknown linkage type!");
|
||||
|
@ -147,7 +147,7 @@ bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
||||
SwitchToTextSection(getSectionForFunction(*F).c_str(), F);
|
||||
|
||||
unsigned FnAlign = OptimizeForSize ? 1 : 4;
|
||||
if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize))
|
||||
if (!F->isDeclaration() && F->hasNote(FN_NOTE_OptimizeForSize))
|
||||
FnAlign = 1;
|
||||
switch (F->getLinkage()) {
|
||||
default: assert(0 && "Unsupported linkage type!");
|
||||
|
@ -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(ParamAttr::FN_NOTE_AlwaysInline))
|
||||
if (!I->isDeclaration() && !I->hasNote(FN_NOTE_AlwaysInline))
|
||||
NeverInline.insert(I);
|
||||
|
||||
return false;
|
||||
|
@ -65,7 +65,7 @@ bool SimpleInliner::doInitialization(CallGraph &CG) {
|
||||
|
||||
for (Module::iterator I = M.begin(), E = M.end();
|
||||
I != E; ++I)
|
||||
if (I->hasNote(ParamAttr::FN_NOTE_NoInline))
|
||||
if (!I->isDeclaration() && I->hasNote(FN_NOTE_NoInline))
|
||||
NeverInline.insert(I);
|
||||
|
||||
// Get llvm.noinline
|
||||
|
@ -141,7 +141,7 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
|
||||
|
||||
int CurrentThreshold = InlineThreshold;
|
||||
Function *Fn = CS.getCaller();
|
||||
if (Fn && Fn->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)
|
||||
if (Fn && !Fn->isDeclaration() && Fn->hasNote(FN_NOTE_OptimizeForSize)
|
||||
&& InlineThreshold != 50) {
|
||||
CurrentThreshold = 50;
|
||||
}
|
||||
|
@ -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(ParamAttr::FN_NOTE_OptimizeForSize))
|
||||
if (!F->isDeclaration() && F->hasNote(FN_NOTE_OptimizeForSize))
|
||||
return false;
|
||||
|
||||
// Check to see if it would be profitable to unswitch current loop.
|
||||
|
@ -222,7 +222,7 @@ int InlineCostAnalyzer::getInlineCost(CallSite CS,
|
||||
if (CalleeFI.NeverInline)
|
||||
return 2000000000;
|
||||
|
||||
if (Callee->hasNote(ParamAttr::FN_NOTE_AlwaysInline))
|
||||
if (!Callee->isDeclaration() && Callee->hasNote(FN_NOTE_AlwaysInline))
|
||||
return -2000000000;
|
||||
|
||||
// Add to the inline quality for properties that make the call valuable to
|
||||
|
@ -1412,12 +1412,12 @@ void AssemblyWriter::printFunction(const Function *F) {
|
||||
} else {
|
||||
|
||||
bool insideNotes = false;
|
||||
if (F->hasNote(ParamAttr::FN_NOTE_AlwaysInline)) {
|
||||
if (F->hasNote(FN_NOTE_AlwaysInline)) {
|
||||
Out << "notes(";
|
||||
insideNotes = true;
|
||||
Out << "inline=always";
|
||||
}
|
||||
if (F->hasNote(ParamAttr::FN_NOTE_NoInline)) {
|
||||
if (F->hasNote(FN_NOTE_NoInline)) {
|
||||
if (insideNotes)
|
||||
Out << ",";
|
||||
else {
|
||||
@ -1426,7 +1426,7 @@ void AssemblyWriter::printFunction(const Function *F) {
|
||||
}
|
||||
Out << "inline=never";
|
||||
}
|
||||
if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)) {
|
||||
if (F->hasNote(FN_NOTE_OptimizeForSize)) {
|
||||
if (insideNotes)
|
||||
Out << ",";
|
||||
else {
|
||||
|
Loading…
Reference in New Issue
Block a user