Oz optimization level sets ForceSizeOpt attribute for each function

llvm-svn: 166744
This commit is contained in:
Quentin Colombet 2012-10-26 00:29:48 +00:00
parent 5750c1c07e
commit 5ee5ca1dbc
2 changed files with 28 additions and 0 deletions

View File

@ -968,6 +968,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
if (CodeGenOpts.OptimizeSize)
FuncAttrs.addAttribute(llvm::Attributes::OptimizeForSize);
if (CodeGenOpts.OptimizeSize == 2)
FuncAttrs.addAttribute(llvm::Attributes::ForceSizeOpt);
if (CodeGenOpts.DisableRedZone)
FuncAttrs.addAttribute(llvm::Attributes::NoRedZone);
if (CodeGenOpts.NoImplicitFloat)

View File

@ -0,0 +1,26 @@
// RUN: %clang_cc1 -Oz -emit-llvm %s -o - | FileCheck %s -check-prefix=Oz
// RUN: %clang_cc1 -O0 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O1 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O2 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O3 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -Os -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// Check that we set the forcesizeopt attribute on each function
// when Oz optimization level is set.
int test1() {
return 42;
// Oz: @test1{{.*}}forcesizeopt
// Oz: ret
// OTHER: @test1
// OTHER-NOT: forcesizeopt
// OTHER: ret
}
int test2() {
return 42;
// Oz: @test2{{.*}}forcesizeopt
// Oz: ret
// OTHER: @test2
// OTHER-NOT: forcesizeopt
// OTHER: ret
}