This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Honza, I have isolated the ipa-inline.c part into a separate patch with a test and attached it here. The patch is simple. Could you please take a look? * ipa-inline.c (can_early_inline_edge_p): Flag an error when the function that cannot be inlined is target specific. * gcc.target/i386/inline_error.c: New test. Thanks Sri On Mon, Jun 10, 2013 at 4:10 PM, Sriraman Tallam <tmsriram@google.com> wrote: > Ping. > > On Tue, Jun 4, 2013 at 2:41 PM, Sriraman Tallam <tmsriram@google.com> wrote: >> Ping. >> >> On Thu, May 23, 2013 at 2:41 PM, Sriraman Tallam <tmsriram@google.com> wrote: >>> Ping, for review of ipa-inline.c change. >>> >>> Sri >>> >>> On Mon, May 20, 2013 at 11:04 AM, Sriraman Tallam <tmsriram@google.com> wrote: >>>> On Fri, May 17, 2013 at 11:21 PM, Jakub Jelinek <jakub@redhat.com> wrote: >>>>> On Fri, May 17, 2013 at 09:00:21PM -0700, Sriraman Tallam wrote: >>>>>> --- ipa-inline.c (revision 198950) >>>>>> +++ ipa-inline.c (working copy) >>>>>> @@ -374,7 +374,33 @@ can_early_inline_edge_p (struct cgraph_edge *e) >>>>>> return false; >>>>>> } >>>>>> if (!can_inline_edge_p (e, true)) >>>>>> - return false; >>>>>> + { >>>>>> + enum availability avail; >>>>>> + struct cgraph_node *callee >>>>>> + = cgraph_function_or_thunk_node (e->callee, &avail); >>>>>> + /* Flag an error when the inlining cannot happen because of target option >>>>>> + mismatch but the callee is marked as "always_inline". In -O0 mode >>>>>> + this will go undetected because the error flagged in >>>>>> + "expand_call_inline" in tree-inline.c might not execute and the >>>>>> + inlining will not happen. Then, the linker could complain about a >>>>>> + missing body for the callee if it turned out that the callee was >>>>>> + also marked "gnu_inline" with extern inline keyword as bodies of such >>>>>> + functions are not generated. */ >>>>>> + if ((!optimize >>>>>> + || flag_no_inline) >>>>> >>>>> This should be if ((!optimize || flag_no_inline) on one line. >>>>> >>>>> I'd prefer also the testcase for the ICEs, something like: >>>>> >>>>> /* Test case to check if AVX intrinsics and function specific target >>>>> optimizations work together. Check by including x86intrin.h */ >>>>> >>>>> /* { dg-do compile } */ >>>>> /* { dg-options "-O2 -mno-sse -mno-avx" } */ >>>>> >>>>> #include <x86intrin.h> >>>>> >>>>> __m256 a, b, c; >>>>> void __attribute__((target ("avx"))) >>>>> foo (void) >>>>> { >>>>> a = _mm256_and_ps (b, c); >>>>> } >>>>> >>>>> and another testcase that does: >>>>> >>>>> /* { dg-do compile } */ >>>>> #pragma GCC target ("mavx") /* { dg-error "whatever" } */ >>>>> >>>>> Otherwise it looks good to me, but I'd prefer the i?86 maintainers to review >>>>> it too (and Honza for ipa-inline.c?). >>>> >>>> Honza, could you please take a look at the ipa-inline.c fix? I will >>>> split the patches and submit after Honza's review. I will also make >>>> the changes mentioned. >>>> >>>> Thanks >>>> Sri >>>> >>>> >>>>> >>>>> Jakub
Attachment:
inline_fix_for_mmintrin_patch.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |