diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-11-17 16:03:29 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-11-17 16:03:29 +0000 |
commit | ce0697f4759ce369bd28d31a6ed5813d776663de (patch) | |
tree | b96cedb984121de7278a29fe711f8fc9d49e84b9 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 29aeb2051826e235a39545db3c891dc00f347730 (diff) | |
download | llvm-ce0697f4759ce369bd28d31a6ed5813d776663de.zip llvm-ce0697f4759ce369bd28d31a6ed5813d776663de.tar.gz llvm-ce0697f4759ce369bd28d31a6ed5813d776663de.tar.bz2 |
Add -freroll-loops to enable loop rerolling
This adds -freroll-loops (and -fno-reroll-loops in the usual way) to enable
loop rerolling as part of the optimization pass manager. This transformation
can enable vectorization, reduce code size (or both).
Briefly, loop rerolling can transform a loop like this:
for (int i = 0; i < 3200; i += 5) {
a[i] += alpha * b[i];
a[i + 1] += alpha * b[i + 1];
a[i + 2] += alpha * b[i + 2];
a[i + 3] += alpha * b[i + 3];
a[i + 4] += alpha * b[i + 4];
}
into this:
for (int i = 0; i < 3200; ++i) {
a[i] += alpha * b[i];
}
Loop rerolling is currently disabled by default at all optimization levels.
llvm-svn: 194967
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 581d56d..94a3a33 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -355,6 +355,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, Opts.UnrollLoops = Args.hasFlag(OPT_funroll_loops, OPT_fno_unroll_loops, (Opts.OptimizationLevel > 1 && !Opts.OptimizeSize)); + Opts.RerollLoops = Args.hasArg(OPT_freroll_loops); Opts.Autolink = !Args.hasArg(OPT_fno_autolink); Opts.SampleProfileFile = Args.getLastArgValue(OPT_fprofile_sample_use_EQ); |