[PATCH] Generate cold attribute for functions marked __atribute__((cold))

This removes a FIXME in CodeGenModule::SetLLVMFunctionAttributesForDefinition.
When a function is declared cold we can now generate the IR attribute in
addition to marking the function to be optimized for size.

I tried adding a separate CHECK in the existing test, but it was
failing.  I suppose CHECK matches one line exactly once?  This would be
a problem if the attributes are listed in a different order, though they
seem to be sorted.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182666 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Diego Novillo 2013-05-24 20:18:15 +00:00
Родитель 1e4112d1ba
Коммит d27e5cbff3
2 изменённых файлов: 4 добавлений и 3 удалений

Просмотреть файл

@ -620,9 +620,10 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
B.addAttribute(llvm::Attribute::AlwaysInline);
}
// FIXME: Communicate hot and cold attributes to LLVM more directly.
if (D->hasAttr<ColdAttr>())
if (D->hasAttr<ColdAttr>()) {
B.addAttribute(llvm::Attribute::OptimizeForSize);
B.addAttribute(llvm::Attribute::Cold);
}
if (D->hasAttr<MinSizeAttr>())
B.addAttribute(llvm::Attribute::MinSize);

Просмотреть файл

@ -8,4 +8,4 @@ int test1() __attribute__((__cold__)) {
// CHECK: ret
}
// CHECK: attributes [[ATTR]] = { {{.*}}optsize{{.*}} }
// CHECK: attributes [[ATTR]] = { {{.*}}cold{{.*}}optsize{{.*}} }