mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
Make sure functions containing inline asm are never inlined to avoid
duplicated labels.
This commit is contained in:
@@ -63,3 +63,17 @@ void IrFunction::popLabelScope()
|
||||
labelScopes.pop_back();
|
||||
nextUnique.pop();
|
||||
}
|
||||
|
||||
void IrFunction::setNeverInline()
|
||||
{
|
||||
llvm::FunctionNotes cur = func->getNotes();
|
||||
assert(!(cur & llvm::FN_NOTE_AlwaysInline) && "function can't be never- and always-inline at the same time");
|
||||
func->setNotes(cur | llvm::FN_NOTE_NoInline);
|
||||
}
|
||||
|
||||
void IrFunction::setAlwaysInline()
|
||||
{
|
||||
llvm::FunctionNotes cur = func->getNotes();
|
||||
assert(!(cur & llvm::FN_NOTE_NoInline) && "function can't be never- and always-inline at the same time");
|
||||
func->setNotes(cur | llvm::FN_NOTE_AlwaysInline);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,10 @@ struct IrFunction : IrBase
|
||||
|
||||
IrFunction(FuncDeclaration* fd);
|
||||
|
||||
// annotations
|
||||
void setNeverInline();
|
||||
void setAlwaysInline();
|
||||
|
||||
private:
|
||||
// prefix for labels and gotos
|
||||
// used for allowing labels to be emitted twice
|
||||
|
||||
Reference in New Issue
Block a user