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