From 5ee5ca1dbc75c1b23d97f0aeb3b654a5e5a42377 Mon Sep 17 00:00:00 2001 From: Quentin Colombet Date: Fri, 26 Oct 2012 00:29:48 +0000 Subject: [PATCH] Oz optimization level sets ForceSizeOpt attribute for each function llvm-svn: 166744 --- clang/lib/CodeGen/CGCall.cpp | 2 ++ clang/test/CodeGen/attr-forcesizeopt.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 clang/test/CodeGen/attr-forcesizeopt.c diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index b356e64..f09332e 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -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) diff --git a/clang/test/CodeGen/attr-forcesizeopt.c b/clang/test/CodeGen/attr-forcesizeopt.c new file mode 100644 index 0000000..c4e6c4a --- /dev/null +++ b/clang/test/CodeGen/attr-forcesizeopt.c @@ -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 +} -- 2.7.4