how to replace function call with actual code of function body?

Hello all,

int main()

{

auto n = 9;

auto x = cacul(n);

return 0;
}

int cacul(int x)

{

return x * x + 3;

}

Suppose I have function main(), in which cacul(int x) is called.

Now I want Clang help me do this:

int main()

{

auto n = 9;

auto x = n * n + 3;

return 0;
}

int cacul(int x)

{

return x * x + 3;

}

That’s to say, remove reference to cacul. Can Clang help me do that? If so, how to do it?

Best regards

Yonggang Chen

You are describing “function inlining” which is an optimization done by LLVM. This optimization is performed on the intermediate representation (IR), not at the source level, if that’s what you need to know.

–paulr

You are describing “function inlining” which is an optimization done by LLVM. This optimization is performed on the intermediate representation (IR), not at the source level, if that’s what you need to know.

I think Yonggang might be looking for a refactoring/source modification, rather than an optimization, but I’m not sure.

Hello paulr,

I think Yonggang might be looking for a refactoring/source modification, rather than an optimization, but I’m not sure.

Yes, you are right. That’s what I meant. I’m looking for a refactoring modification.

Put the method’s body into the body of its callers and remove the method.

int getRating() {

return (moreThanFiveLateDeliveries()) ? 2 : 1;

}

boolean moreThanFiveLateDeliveries() {

return _numberOfLateDeliveries > 5;

}

Then, the source code becomes the following:

int getRating() {

return (_numberOfLateDeliveries > 5) ? 2 : 1;

}

And it seems someone had achieved this, please check this link:

clang-expand

https://github.com/goldsborough/clang-expand

Best regards

Yonggang Chen