rsmith added inline comments.

================
Comment at: lib/CodeGen/CodeGenModule.cpp:447-448
@@ +446,4 @@
+      C->handleOperandChange(GV, IndirectReplacement, &U);
+    } else if (!isa<llvm::InvokeInst>(U.getUser()) &&
+               !isa<llvm::CallInst>(U.getUser())) {
+      U.set(IndirectReplacement);
----------------
Do you need to check which operand of the call or invoke you found? For 
instance:

  void f(void (*)());
  extern inline __attribute__((always_inline, gnu_inline)) void g() {}
  void h() { f(g); } // should not use alwaysinline symbol

================
Comment at: lib/CodeGen/CodeGenModule.cpp:505-506
@@ +504,4 @@
+void CodeGenModule::RewriteAlwaysInlineFunctions() {
+  for (llvm::Function &Fn : TheModule.functions()) {
+    if (Fn.hasFnAttribute(llvm::Attribute::AlwaysInline)) {
+      RewriteAlwaysInlineFunction(&Fn);
----------------
I think it would be better to make a list of `always_inline` functions rather 
than actually marking them as `always_inline` in the IR; that way, you don't 
need to walk all the functions here, and you don't need to temporarily violate 
the invariant that only `internal`/`private` functions are ever `always_inline`.


Repository:
  rL LLVM

http://reviews.llvm.org/D12087



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

Reply via email to