On Jul 26, 2017, at 5:33 PM, Andreas Schwab <sch...@suse.de> wrote: > > On Jul 26 2017, Torsten Duwe <d...@suse.de> wrote: > >> On Wed, Jul 26, 2017 at 04:16:25PM +0200, Andreas Schwab wrote: >>> On Jul 07 2017, Torsten Duwe <d...@suse.de> wrote: >>> >>>> diff --git a/gcc/testsuite/c-c++-common/patchable_function_entry-decl.c >>>> b/gcc/testsuite/c-c++-common/patchable_function_entry-decl.c >>>> new file mode 100644 >>>> index 00000000000..8514b10e820 >>>> --- /dev/null >>>> +++ b/gcc/testsuite/c-c++-common/patchable_function_entry-decl.c >>>> @@ -0,0 +1,16 @@ >>>> +/* { dg-do compile } */ >>>> +/* { dg-options "-O2 -fpatchable-function-entry=3,1" } */ >>>> +/* { dg-final { scan-assembler-times "nop" 2 } } */ >>> >>> This fails on ia64. >> >> The solution is fairly obvious: on architectures where the nop is not called >> "nop" provide a custom, cpu-specific test, or document the failure. > > But on ia64, a nop _is_ called nop.
The problem here is that ia64 backend emits "nop" instructions to pad IA64 bundles. The 2 nops at the beginning are [as expected] from the patchable attribute, but [unexpected] nops after ld8.mov and before "add r8" are generated by ia64 bundle packing. nop 0 nop 0 .prologue .body .mmi addl r14 = @ltoffx(a#), r1 ;; ld8.mov r14 = [r14], a# nop 0 ;; .mmi ld4 r14 = [r14] ;; shladd r8 = r14, 2, r0 nop 0 ;; .mib nop 0 add r8 = r8, r14 br.ret.sptk.many b0 I don't see an easy way to correctly differentiate between "attribute" nops and "bundle" nops, so XFAILing these tests on ia64 seems like a valid approach. I speculate that other tests fail on ia64 for the same reason, but I didn't check. -- Maxim Kuvyrkov www.linaro.org