[llvm-dev] inlining in exception handing region

via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 14 12:37:00 PDT 2015


I agree that this could be seen as a special case of inlining in cold
region. However, I doubt if we need to see this only in the context of
PGO. I guess, in general, considering exception handing code as cold is
not unreasonable even without relying on profiling.

Regarding detecting exception handing region, I'm relying  on getting
hints from standard function name such as “__cxa_allocate_exception".
Please let me know if anyone has any better idea about it.

Thanks,
Jun


> I'm interested in this idea, but I want to point out that this is simply
> one special case of a static heuristics for estimating call frequency.
> This is essentially applying profile guided optimization style logic
> based on a static heuristic about hotness of code.  I'm not saying this
> to dismiss it, merely to help frame it in context of things already
> being discussed and considered for the inliner.
>
> How is your patch structured w.r.t. exception handling region detection
> in the caller during inlining?  That seems like it will be the critical
> design point.
>
> Philip
>
> On 09/14/2015 11:01 AM, via llvm-dev wrote:
>> I observed about +6% performance improvement in one of c++ tests in
>> spec2006 in AArch64 by avoiding inlining functions in exception handling
>> region. I guess this is not really rare because programers often make
>> small methods with throw statement like fCallee() in below sample c++
>> code.
>>
>> Thanks,
>> Jun
>>
>>
>>> Hi Jun,
>>>
>>> It's a very common that C++ exception handling code blow up the
>>> inlining
>>> cost of the a function.
>>>
>>> It became more when compiler inlines calls in exception handling code.
>>>
>>> As exception handling code executes very rarely, you can apply some
>>> heuristic in inliner to avoid inlining
>>> for calls in exception region. By this it will open up more inlining
>>> opportunities.
>>>
>>> I'm not sure how much this will help, as these cases are very rare.
>>>
>>> How do you justify gains of this, do you have any data ?
>>>
>>> Regards,
>>> Ashutosh
>>>
>>> -----Original Message-----
>>> From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of
>>> via
>>> llvm-dev
>>> Sent: Saturday, September 12, 2015 12:54 AM
>>> To: llvm-dev at lists.llvm.org
>>> Subject: [llvm-dev] inlining in exception handing region
>>>
>>> Hello,
>>>
>>> While I was investigating C++ benchmarks, I was aware of that some
>>> small
>>> functions with the throw statement were not inlined because the
>>> exception
>>> handling code increased the inline cost. In the c++ example below, the
>>> inline cost of fCallee is high mainly because of instructions for the
>>> throw statement, and note that the constructor of MyException is even
>>> inlined in fCallee.
>>>
>>> Assuming that the exception handling code is rarely executed, would it
>>> make sense to prevent CallSites in exception handling region (e.g., the
>>> constructor of MyException) from being inlined so that we can avoid
>>> code
>>> size blow-up in exception handling region and indirectly give more
>>> inlining opportunity to the small unwinding functions containing
>>> exception
>>> handling code?
>>>
>>> class MyBaseException {
>>>    int idx;
>>>    int limit;
>>>    const char* msg;
>>>    public :
>>>      MyBaseException(int i, int l, const char* m);
>>>      ~MyBaseException();
>>>      void handle(const char*m, int i, int l);
>>> };
>>>
>>> class MyException : MyBaseException
>>> {
>>>    public:
>>>      MyException(int i, int l, const char* m): MyBaseException(i, l, m)
>>> {
>>>        handle(m, i, l);
>>>      }
>>> };
>>>
>>> int *Agg;
>>>
>>> int fCallee(int idx, int limit) {
>>>    if (idx >= limit)
>>>      throw MyException(idx, limit, "error");
>>>    return Agg[idx];
>>> }
>>>
>>> int fCaller(int i, int l) {
>>>    return fCallee(i, l);
>>> }
>>>
>>> Thanks,
>>> Jun
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>



More information about the llvm-dev mailing list