3

It seems like llvm -inline pass only inlines small functions. Is there a way to inline all functions, no matter how big they are?

piXel_pRo
  • 159
  • 2
  • 14
  • 1
    Inlining was created to inline small functions. Why do you want to inline big ones? – ForceBru Apr 23 '15 at 17:24
  • i need to do some experiments on programs, but i cannot work with function calls. – piXel_pRo Apr 23 '15 at 17:29
  • Can i force inline every function?? – piXel_pRo Apr 23 '15 at 17:33
  • to my mind, it's useless as some functions simply cannot be inlined (for example, `main` LOL). Moreover, clang's smart enough to inline every function possible when you request it. I think it does its best when you ask it to do it. – ForceBru Apr 23 '15 at 17:36
  • 1
    You can use the `always_inline` attribute and then the run the `-always-inline` pass (as in [this question](http://stackoverflow.com/questions/25602813/force-a-function-to-be-inline-in-clang-llvm)). That requires you to annotate every function though... – Ismail Badawi Apr 27 '15 at 03:18

1 Answers1

3

You can use the -inline-threshold flag to change the "cost" up to which LLVM will inline a function. A higher value means more functions will be inlined.

opt -inline -inline-threshold=10000 ...

Obviously functions can not always be inlined, particularly when the call graph contains cycles (recursive calls).

cib
  • 2,124
  • 2
  • 21
  • 23