steplong added inline comments.

================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:4841-4850
+  StringRef Level;
+  // Check if argument is prefixed with "-O" or "O"
+  if (Arg.str().rfind("-O", 0) == 0)
+    Level = Arg.substr(2);
+  else if (Arg.str().rfind("O", 0) == 0)
+    Level = Arg.substr(1);
+  else
----------------
aaron.ballman wrote:
> Then, in here, you can parse the `-O<whatever>` the user passed as a string, 
> and convert it to an `OptimizeAttr::OptLevelKind` enumerator and store that 
> in the semantic attribute.
> 
> This allows you to map things like `-Og` to whatever -O level that actually 
> represents, or do any other kind of mapping that works for you.
> 
> One question we should probably figure out is whether we also want to support 
> clang-cl optimization strings or not. e.g., 
> `__attribute__((optimize("/O0")))` with a slash instead of a dash. Since 
> we're already going to be doing parsing from here anyway, I feel like it 
> might not be a bad idea to also support those. FWIW, here's the list from the 
> user's manual:
> ```
>   /O0                     Disable optimization
>   /O1                     Optimize for size  (same as /Og     /Os /Oy /Ob2 
> /GF /Gy)
>   /O2                     Optimize for speed (same as /Og /Oi /Ot /Oy /Ob2 
> /GF /Gy)
>   /Ob0                    Disable function inlining
>   /Ob1                    Only inline functions which are (explicitly or 
> implicitly) marked inline
>   /Ob2                    Inline functions as deemed beneficial by the 
> compiler
>   /Od                     Disable optimization
>   /Og                     No effect
>   /Oi-                    Disable use of builtin functions
>   /Oi                     Enable use of builtin functions
>   /Os                     Optimize for size
>   /Ot                     Optimize for speed
>   /Ox                     Deprecated (same as /Og /Oi /Ot /Oy /Ob2); use /O2 
> instead
>   /Oy-                    Disable frame pointer omission (x86 only, default)
>   /Oy                     Enable frame pointer omission (x86 only)
>   /O<flags>               Set multiple /O flags at once; e.g. '/O2y-' for 
> '/O2 /Oy-'
> ```
> (Not all of these would be supported, like enable use of builtin functions, 
> etc.) WDYT?
Hmm I don't think it's necessary to get pragma optimize to work, but it 
shouldn't be hard to add the parsing logic for some of these strings


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D126984

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to