Dear All, It would be great if anyone help me out in finding a use case similar to the following example. __attribute__((noinline)) int f (int p) { if (p == 10) { // if-1 return 0; } // Some statements here. return 2; } int g(int p) { return f(p); } Here, I would like to see if the compiler does a transformation, where the if statement (if-1) in the body of the function 'f' is removed from 'f' and pushed to the caller 'g' as follows. Please note that I have forced not to inline 'f'. int f (int p) { // Some statements here. return 2; } int g(int p) { if (p == 10) { // if-1 return 0; } return f(p); } This is a simple example that I used just to demonstrate the optimization (we may call it as function switching). If you know about any other use cases, where similar transformation happens, please let me know. When I generated the llvm IR (with -O3) such a transformation was not observed. Regards, -- Raghesh Aloor PhD Scholar PACE Lab, Dept. of CSE, IIT Madras http://www.cse.iitm.ac.in/~raghesh/ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190607/00cc3633/attachment.html>
Nema, Ashutosh via llvm-dev
2019-Jun-07 09:31 UTC
[llvm-dev] Use case for function unswitching.
Hi Raghesh, Partial inline has support for function unswitching, you can explore it. Note: It does not handle the functions marked with no-inline attribute. Regards, Ashutosh From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of raghesh via llvm-dev Sent: Friday, June 7, 2019 2:03 PM To: llvm-dev at lists.llvm.org Subject: [llvm-dev] Use case for function unswitching. [CAUTION: External Email] Dear All, It would be great if anyone help me out in finding a use case similar to the following example. __attribute__((noinline)) int f (int p) { if (p == 10) { // if-1 return 0; } // Some statements here. return 2; } int g(int p) { return f(p); } Here, I would like to see if the compiler does a transformation, where the if statement (if-1) in the body of the function 'f' is removed from 'f' and pushed to the caller 'g' as follows. Please note that I have forced not to inline 'f'. int f (int p) { // Some statements here. return 2; } int g(int p) { if (p == 10) { // if-1 return 0; } return f(p); } This is a simple example that I used just to demonstrate the optimization (we may call it as function switching). If you know about any other use cases, where similar transformation happens, please let me know. When I generated the llvm IR (with -O3) such a transformation was not observed. Regards, -- Raghesh Aloor PhD Scholar PACE Lab, Dept. of CSE, IIT Madras http://www.cse.iitm.ac.in/~raghesh/ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190607/810aded3/attachment.html>