Skip to content

Commit da249ca

Browse files
authored
[clang-cl] Map /Ot to -O3 instead of -O2 (#95406)
/Ot (which is also implied by /O2) is supposed to optimize for maximum speed, so -O3 seems like a better match.
1 parent ebb5385 commit da249ca

File tree

5 files changed

+15
-11
lines changed

5 files changed

+15
-11
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,10 @@ Android Support
921921
Windows Support
922922
^^^^^^^^^^^^^^^
923923

924+
- The clang-cl ``/Ot`` compiler option ("optimize for speed", also implied by
925+
``/O2``) now maps to clang's ``-O3`` optimizataztion level instead of ``-O2``.
926+
Users who prefer the old behavior can use ``clang-cl /Ot /clang:-O2 ...``.
927+
924928
- Clang-cl now supports function targets with intrinsic headers. This allows
925929
for runtime feature detection of intrinsics. Previously under clang-cl
926930
``immintrin.h`` and similar intrinsic headers would only include the intrinsics

clang/docs/UsersManual.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4636,8 +4636,8 @@ Execute ``clang-cl /?`` to see a list of supported options:
46364636
/Og No effect
46374637
/Oi- Disable use of builtin functions
46384638
/Oi Enable use of builtin functions
4639-
/Os Optimize for size
4640-
/Ot Optimize for speed
4639+
/Os Optimize for size (like clang -Os)
4640+
/Ot Optimize for speed (like clang -O3)
46414641
/Ox Deprecated (same as /Og /Oi /Ot /Oy /Ob2); use /O2 instead
46424642
/Oy- Disable frame pointer omission (x86 only, default)
46434643
/Oy Enable frame pointer omission (x86 only)

clang/include/clang/Driver/Options.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8279,9 +8279,9 @@ def : CLFlag<"Oi">, Alias<_SLASH_O>, AliasArgs<["i"]>,
82798279
def : CLFlag<"Oi-">, Alias<_SLASH_O>, AliasArgs<["i-"]>,
82808280
HelpText<"Disable use of builtin functions">;
82818281
def : CLFlag<"Os">, Alias<_SLASH_O>, AliasArgs<["s"]>,
8282-
HelpText<"Optimize for size">;
8282+
HelpText<"Optimize for size (like clang -Os)">;
82838283
def : CLFlag<"Ot">, Alias<_SLASH_O>, AliasArgs<["t"]>,
8284-
HelpText<"Optimize for speed">;
8284+
HelpText<"Optimize for speed (like clang -O3)">;
82858285
def : CLFlag<"Ox">, Alias<_SLASH_O>, AliasArgs<["x"]>,
82868286
HelpText<"Deprecated (like /Og /Oi /Ot /Oy /Ob2); use /O2">;
82878287
def : CLFlag<"Oy">, Alias<_SLASH_O>, AliasArgs<["y"]>,

clang/lib/Driver/ToolChains/MSVC.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ static void TranslateOptArg(Arg *A, llvm::opt::DerivedArgList &DAL,
861861
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "s");
862862
} else if (OptChar == '2' || OptChar == 'x') {
863863
DAL.AddFlagArg(A, Opts.getOption(options::OPT_fbuiltin));
864-
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "2");
864+
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "3");
865865
}
866866
if (SupportsForcingFramePointer &&
867867
!DAL.hasArgNoClaim(options::OPT_fno_omit_frame_pointer))
@@ -901,7 +901,7 @@ static void TranslateOptArg(Arg *A, llvm::opt::DerivedArgList &DAL,
901901
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "s");
902902
break;
903903
case 't':
904-
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "2");
904+
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "3");
905905
break;
906906
case 'y': {
907907
bool OmitFramePointer = true;

clang/test/Driver/cl-options.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,27 +189,27 @@
189189
// RUN: %clang_cl /Ot --target=i686-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ot %s
190190
// RUN: %clang_cl /Ot --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ot %s
191191
// Ot: -mframe-pointer=none
192-
// Ot: -O2
192+
// Ot: -O3
193193

194194
// RUN: %clang_cl /Ox --target=i686-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ox %s
195195
// RUN: %clang_cl /Ox --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ox %s
196196
// Ox: -mframe-pointer=none
197-
// Ox: -O2
197+
// Ox: -O3
198198

199199
// RUN: %clang_cl --target=i686-pc-win32 /O2sy- -### -- %s 2>&1 | FileCheck -check-prefix=PR24003 %s
200200
// PR24003: -mframe-pointer=all
201201
// PR24003: -Os
202202

203203
// RUN: %clang_cl --target=i686-pc-win32 -Werror -Wno-msvc-not-found /Oy- /O2 -### -- %s 2>&1 | FileCheck -check-prefix=Oy_2 %s
204204
// Oy_2: -mframe-pointer=all
205-
// Oy_2: -O2
205+
// Oy_2: -O3
206206

207207
// RUN: %clang_cl --target=aarch64-pc-windows-msvc -Werror -Wno-msvc-not-found /Oy- /O2 -### -- %s 2>&1 | FileCheck -check-prefix=Oy_aarch64 %s
208208
// Oy_aarch64: -mframe-pointer=non-leaf
209-
// Oy_aarch64: -O2
209+
// Oy_aarch64: -O3
210210

211211
// RUN: %clang_cl --target=i686-pc-win32 -Werror -Wno-msvc-not-found /O2 /O2 -### -- %s 2>&1 | FileCheck -check-prefix=O2O2 %s
212-
// O2O2: "-O2"
212+
// O2O2: "-O3"
213213

214214
// RUN: %clang_cl /Zs -Werror /Oy -- %s 2>&1
215215

0 commit comments

Comments
 (0)