forked from OSchip/llvm-project
When optimizing for size, enable loop rerolling by default
We have a loop-rerolling optimization which can be enabled by using -freroll-loops. While sometimes loops are hand-unrolled for performance reasons, when optimizing for size, we should always undo this manual optimization to produce smaller code (our optimizer's unroller will still unroll the rerolled loops if it thinks that is a good idea). llvm-svn: 283685
This commit is contained in:
parent
5b5f4f0c74
commit
60ebf61274
|
@ -5227,9 +5227,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
}
|
||||
|
||||
if (Arg *A = Args.getLastArg(options::OPT_freroll_loops,
|
||||
options::OPT_fno_reroll_loops))
|
||||
options::OPT_fno_reroll_loops)) {
|
||||
if (A->getOption().matches(options::OPT_freroll_loops))
|
||||
CmdArgs.push_back("-freroll-loops");
|
||||
} else if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
|
||||
// If rerolling is not explicitly enabled or disabled, then enable when
|
||||
// optimizing for size.
|
||||
if (A->getOption().matches(options::OPT_O)) {
|
||||
StringRef S(A->getValue());
|
||||
if (S == "s" || S == "z")
|
||||
CmdArgs.push_back("-freroll-loops");
|
||||
}
|
||||
}
|
||||
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fwritable_strings);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_funroll_loops,
|
||||
|
|
|
@ -47,7 +47,12 @@
|
|||
// CHECK-NO-UNROLL-LOOPS: "-fno-unroll-loops"
|
||||
|
||||
// RUN: %clang -### -S -freroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECK-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -Oz %s 2>&1 | FileCheck -check-prefix=CHECK-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -fno-reroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-NO-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -Os -fno-reroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-NO-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -Oz -fno-reroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-NO-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -O1 %s 2>&1 | FileCheck -check-prefix=CHECK-NO-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -fno-reroll-loops -freroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-REROLL-LOOPS %s
|
||||
// RUN: %clang -### -S -freroll-loops -fno-reroll-loops %s 2>&1 | FileCheck -check-prefix=CHECK-NO-REROLL-LOOPS %s
|
||||
// CHECK-REROLL-LOOPS: "-freroll-loops"
|
||||
|
|
Loading…
Reference in New Issue