From 5aa800aba4939a4e7d80181bfe57397a5e4cbc5e Mon Sep 17 00:00:00 2001 From: amodra Date: Tue, 13 Nov 2018 13:01:36 +0000 Subject: [PATCH] [RS6000] Don't put large integer constants in TOC for -mcmodel=medium For -mcmodel=medium we can use toc-relative addressing to access constants placed in read-only data, which is better since they can be merged when in .rodata.cst8. * config/rs6000/linux64.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Exclude integer constants when -mcmodel=medium. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266069 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/linux64.h | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3f94aeb8080a..369ef54fb0d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-11-13 Alan Modra + + * config/rs6000/linux64.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): Exclude + integer constants when -mcmodel=medium. + 2018-11-13 Claudiu Zissulescu * config/arc/arc.h (FUNCTION_PROFILER): Redefine to empty. diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index e6b4fd22d738..0d8e164a598a 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -582,8 +582,10 @@ extern int dot_symbols; we also do this for floating-point constants. We actually can only do this if the FP formats of the target and host machines are the same, but we can't check that since not every file that uses - the macros includes real.h. We also do this when we can write the - entry into the TOC and the entry is not larger than a TOC entry. */ + the macros includes real.h. We also do this when we can write an + integer into the TOC and the entry is not larger than a TOC entry, + but not for -mcmodel=medium where we'll use a toc-relative load for + constants outside the TOC. */ #undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P #define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \ @@ -593,6 +595,7 @@ extern int dot_symbols; && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \ || GET_CODE (X) == LABEL_REF \ || (GET_CODE (X) == CONST_INT \ + && TARGET_CMODEL != CMODEL_MEDIUM \ && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \ || (GET_CODE (X) == CONST_DOUBLE \ && ((TARGET_64BIT \ -- 2.47.2