re PR target/53811 (ICE: in insn_default_length, at config/i386/i386.md:529 (unrecogn...
authorUros Bizjak <ubizjak@gmail.com>
Fri, 6 Jul 2012 10:00:11 +0000 (12:00 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 6 Jul 2012 10:00:11 +0000 (12:00 +0200)
PR target/53811
* config/i386/i386.c (x86_output_mi_thunk): For CM_LARGE_PIC model,
emit PIC sequence for fnaddr symbol reference in advance.

From-SVN: r189315

gcc/ChangeLog
gcc/config/i386/i386.c

index 40c165306389c0961d2221083669aeb2d7716cf9..d6d932b4799c1c38bdcc870570badae9bc2a42d1 100644 (file)
@@ -1,3 +1,9 @@
+2012-07-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/53811
+       * config/i386/i386.c (x86_output_mi_thunk): For CM_LARGE_PIC model,
+       emit PIC sequence for fnaddr symbol reference in advance.
+
 2012-07-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        Revert
index 59e2bbc69dd9c0423f7461bb9f189c74a5392ae7..857cd0396290bcc3493dfe70a7fcab31218ab0c0 100644 (file)
@@ -33057,6 +33057,10 @@ x86_output_mi_thunk (FILE *file,
     emit_jump_insn (gen_indirect_jump (fnaddr));
   else
     {
+      if (ix86_cmodel == CM_LARGE_PIC && SYMBOLIC_CONST (fnaddr))
+       fnaddr = legitimize_pic_address (fnaddr,
+                                        gen_rtx_REG (Pmode, tmp_regno));
+
       if (!sibcall_insn_operand (fnaddr, word_mode))
        {
          tmp = gen_rtx_REG (word_mode, tmp_regno);