On Thu, Jan 29, 2015 at 9:13 AM, Uros Bizjak <ubiz...@gmail.com> wrote:

>>> Currently ix86_conditional_register_usage code may mark EBX as a fixed 
>>> register if it is called
>>> when pic_offset_table_rtx is NULL even if we are going to use pseudo PIC 
>>> register.  It already
>>> caused some problem in combination with another issue (PR jit/64722).  This 
>>> patch will probably
>>> help to avoid problems in the future.
>>>
>>> BTW if we don't want to support possibility to switch to the fixed PIC 
>>> register in i386 target then
>>> this code may be removed at all.
>>
>> No, we don't want to switch to fixed PIC register. cpuid asm in
>> cpuid.h and cmpxchg8b pattern will break. Please do not bring back the
>> dead and remove this code.
>
> Also, if possible, please simplify PIC_OFFSET_TABLE_REGNUM to use
> TARGET_USE_PSEUDO_PIC_REG, like:

Ops, better use the attached patch that exports ix86_use_pseudo_pic_reg.

Uros.
Index: config/i386/i386.h
===================================================================
--- config/i386/i386.h  (revision 220230)
+++ config/i386/i386.h  (working copy)
@@ -1256,13 +1256,11 @@
 #define REAL_PIC_OFFSET_TABLE_REGNUM  (TARGET_64BIT ? R15_REG : BX_REG)
 
 #define PIC_OFFSET_TABLE_REGNUM                                                
\
-  ((TARGET_64BIT && (ix86_cmodel == CM_SMALL_PIC                       \
-                     || TARGET_PECOFF))                                        
\
-   || !flag_pic                                                                
\
-   ? INVALID_REGNUM                                                    \
-   : pic_offset_table_rtx                                              \
-     ? INVALID_REGNUM                                                  \
-     : REAL_PIC_OFFSET_TABLE_REGNUM)
+  (ix86_use_pseudo_pic_reg ()                                          \
+   ? (pic_offset_table_rtx                                             \
+      ? INVALID_REGNUM                                                 \
+      : REAL_PIC_OFFSET_TABLE_REGNUM)                                  \
+   : INVALID_REGNUM)
 
 #define GOT_SYMBOL_NAME "_GLOBAL_OFFSET_TABLE_"
 
Index: config/i386/i386-protos.h
===================================================================
--- config/i386/i386-protos.h   (revision 220230)
+++ config/i386/i386-protos.h   (working copy)
@@ -40,6 +40,8 @@
 extern enum calling_abi ix86_cfun_abi (void);
 extern enum calling_abi ix86_function_type_abi (const_tree);
 
+extern bool ix86_use_pseudo_pic_reg (void);
+
 extern void ix86_reset_previous_fndecl (void);
 
 #ifdef RTX_CODE

Reply via email to