Committed with ChangeLog and minor naming tweaking.

> But I'm not sure if the current checking of local symbol can be simplified
> a bit. Isn't the first line enough for GET_CODE == const case too ?

SYMBOL_REF_P not work for CONST, SYMBOL_REF_P is just checking
GET_CODE is SYMBOL_REF, and SYMBOL_REF_LOCAL_P will also ICE if you
feed something other than SYMBOL_REF when checking enabled...

On Sat, Sep 3, 2022 at 7:08 AM Vineet Gupta <vine...@rivosinc.com> wrote:
>
> The current macro has several && and || making it really hard to understand
> the first time.
>
> Signed-off-by: Vineet Gupta <vine...@rivosinc.com>
> ---
> Since we are on this topic, perhaps get this simplification too.
>
> But I'm not sure if the current checking of local symbol can be simplified
> a bit. Isn't the first line enough for GET_CODE == const case too ?
>
> ---
>  gcc/config/riscv/riscv.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h
> index eb1284e56d69..3e3f67ef8270 100644
> --- a/gcc/config/riscv/riscv.h
> +++ b/gcc/config/riscv/riscv.h
> @@ -749,18 +749,19 @@ typedef struct {
>  #define CASE_VECTOR_MODE SImode
>  #define CASE_VECTOR_PC_RELATIVE (riscv_cmodel != CM_MEDLOW)
>
> +#define LOCAL_SYM(sym)                                                 \
> +     ((SYMBOL_REF_P (sym) && SYMBOL_REF_LOCAL_P (sym))                 \
> +        || ((GET_CODE (sym) == CONST)                                  \
> +            && SYMBOL_REF_P (XEXP (XEXP (sym, 0),0))                   \
> +            && SYMBOL_REF_LOCAL_P (XEXP (XEXP (sym, 0),0))))
> +
>  /* The load-address macro is used for PC-relative addressing of symbols
>     that bind locally.  Don't use it for symbols that should be addressed
>     via the GOT.  Also, avoid it for CM_MEDLOW, where LUI addressing
>     currently results in more opportunities for linker relaxation.  */
>  #define USE_LOAD_ADDRESS_MACRO(sym)                                    \
>    (!TARGET_EXPLICIT_RELOCS &&                                          \
> -   ((flag_pic                                                          \
> -     && ((SYMBOL_REF_P (sym) && SYMBOL_REF_LOCAL_P (sym))              \
> -        || ((GET_CODE (sym) == CONST)                                  \
> -            && SYMBOL_REF_P (XEXP (XEXP (sym, 0),0))                   \
> -            && SYMBOL_REF_LOCAL_P (XEXP (XEXP (sym, 0),0)))))          \
> -     || riscv_cmodel == CM_MEDANY))
> +   ((flag_pic && LOCAL_SYM(sym)) || riscv_cmodel == CM_MEDANY))
>
>  /* Define this as 1 if `char' should by default be signed; else as 0.  */
>  #define DEFAULT_SIGNED_CHAR 0
> --
> 2.32.0
>

Reply via email to