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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits