mikejsavage.co.uk • About • Archive • RSS • Thanks for blocking ads! Blocking ads owns: AdGuard for Safari / uBlock Origin for everything else
This is pretty simple so here you go:
#if COMPILER_MSVC
# define DISABLE_OPTIMISATIONS() __pragma( optimize( "", off ) )
# define ENABLE_OPTIMISATIONS() __pragma( optimize( "", on ) )
#elif COMPILER_GCC
# define DISABLE_OPTIMISATIONS() \
_Pragma( "GCC push_options" ) \
_Pragma( "GCC optimize (\"O0\")" )
# define ENABLE_OPTIMISATIONS() _Pragma( "GCC pop_options" )
#elif COMPILER_CLANG
# define DISABLE_OPTIMISATIONS() _Pragma( "clang optimize off" )
# define ENABLE_OPTIMISATIONS() _Pragma( "clang optimize on" )
#else
# error new compiler
#endif
I use it in ggformat to disable optimisations on the bits that use variadic templates. For some reason variadic templates generate completely ridiculous amounts of object code and making the compiler slog through that takes a while. Not a big deal though, printing is slow anyway so disabling optimisations isn't a huge issue.
It's also handy for debugging code that's too slow in debug mode. You
put DISABLE_OPTIMISATIONS
around the code you want to step through,
and leave everything else optimised.
BTW if you don't have COMPILER_MSVC
etc macros, they look like this:
#if defined( _MSC_VER )
# define COMPILER_MSVC 1
#elif defined( __clang__ )
# define COMPILER_CLANG 1
#elif defined( __GNUC__ )
# define COMPILER_GCC 1
#else
# error new compiler
#endif