[PATCH] D79916: Map -O to -O1 instead of -O2

Jessica Clarke via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 17 12:14:32 PDT 2020


jrtc27 added a comment.

In D79916#2279987 <https://reviews.llvm.org/D79916#2279987>, @MaskRay wrote:

> Several previous comments are FreeBSD specific. To we clang developers, the concrete request is
>
>> Given that GCC will inline at -O, at least these days, ...
>
> right? I think this makes sense, especially when `inline` is explicitly specified... This appears to be related to some -O1 work @echristo is working on.
>
>   // gcc -O1 and g++ -O1 inline `foo`. Note that in C99 mode, `extern int foo` is needed to ask the compiler to provide an external definition.
>   // clang -O1 and clang++ -O1 do not inline `foo`
>   inline int foo(int a) {
>     return a + a;
>   }
>   
>   int bar(int a, int b) {
>     return foo(a + b);
>   }

Yes, `inline` should certainly be inlined, but also non-`inline` things should too. Perhaps not so aggressively, but there's no good reason not to, really, it can be a big win with a simple transformation. GCC seems to inline even those:

  # echo 'static void foo(void) { __asm__ __volatile__ ("#asdf"); } void bar(void) { foo(); } void baz(void) { foo(); foo(); }' | gcc -x c - -o - -S -O1
  	.file	""
  	.text
  	.globl	bar
  	.type	bar, @function
  bar:
  .LFB1:
  	.cfi_startproc
  #APP
  # 1 "<stdin>" 1
  	#asdf
  # 0 "" 2
  #NO_APP
  	ret
  	.cfi_endproc
  .LFE1:
  	.size	bar, .-bar
  	.globl	baz
  	.type	baz, @function
  baz:
  .LFB2:
  	.cfi_startproc
  #APP
  # 1 "<stdin>" 1
  	#asdf
  # 0 "" 2
  # 1 "<stdin>" 1
  	#asdf
  # 0 "" 2
  #NO_APP
  	ret
  	.cfi_endproc
  .LFE2:
  	.size	baz, .-baz
  	.ident	"GCC: (Debian 10.2.0-8) 10.2.0"
  	.section	.note.GNU-stack,"", at progbits


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79916/new/

https://reviews.llvm.org/D79916



More information about the cfe-commits mailing list