Hello Kai, On 28 May 2014, at 09:43, Kai Tietz wrote:
> Index: gcc/config/i386/i386.c > =================================================================== > --- gcc/config/i386/i386.c (revision 210985) > +++ gcc/config/i386/i386.c (working copy) > @@ -38893,7 +38893,16 @@ x86_output_mi_thunk (FILE *file, > For our purposes here, we can get away with (ab)using a jump pattern, > because we're going to do no optimization. */ > if (MEM_P (fnaddr)) > - emit_jump_insn (gen_indirect_jump (fnaddr)); > + { > + if (sibcall_insn_operand (fnaddr, word_mode)) > + { > + tmp = gen_rtx_CALL (VOIDmode, fnaddr, const0_rtx); > + tmp = emit_call_insn (tmp); > + SIBLING_CALL_P (tmp) = 1; > + } > + else > + emit_jump_insn (gen_indirect_jump (fnaddr)); > + } > else As discussed in PR61387 and on IRC, this patch (http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=211089), in particular the section above, causes massive regressions (~900 test fails) for x86_64-darwin*. I have some questions and observations and would request some progress in resolving this. FWIW, x86_64-darwin *passes* the test-cases you added with the patch series. ==== The section of code above will only fire (1) we are PIC (2) we are not PECOFF (3) the target returns binds_local_p () false for the function (see lines 38863-38871). Observations: A. AFAICT, the section of code above is _never_ exercised by x86_64-linux for a full bootstrap and regression test. -- so please could you identify how you tested it? -- whatever is done to resolve the current issue, it seems that an appropriate test-case is required. B. You have considerably altered the behaviour of that code block without any amendment to the preceding comment. -- please update the comment to refect the changed behaviour. the case is generated by: tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOTPCREL); tmp = gen_rtx_CONST (Pmode, tmp); fnaddr = gen_const_mem (Pmode, tmp); C. The code above seems pretty generic, grep doesn't reveal any different handling of UNSPEC_GOTPCREL for Darwin - what part of the Darwin implementation are you suggesting needs amendment? ==== Certainly, it is easy enough to make a patch to disable this operation on Darwin (and thus fix the regressions) -- however, I'd like to be sure that there is simply not some lurking issue, that has simply only manifested on Darwin so far. thanks, Iain