On Fri, Nov 17, 2017 at 11:08 AM Wilco Dijkstra <wilco.dijks...@arm.com> wrote: > > Remove SLOW_BYTE_ACCESS given it's confusing, badly named, > badly documented and used incorrectly. Although most targets > define it as 1, there are several targets which confuse it > (based on comments next to it) and set it to 0 since the name > obviously implies it should be 0 when byte accesses are not slow. > > It's hard to tell whether there are targets which actually have > slow *WORD* accesses, where it may be preferable to use narrow > accesses for bitfields. If this is the case (maybe an old 8-bit > target?) then we should consider improving the narrow_volatile_bitfield > callback. That way you could pass the size/alignment/volatile and > decide per bitfield access. > > What do people think?
Seems like this comes up every couple of years even. Looking back I found this older (much) patch https://gcc.gnu.org/legacy-ml/gcc-patches/2006-09/msg00555.html . Which renamed SLOW_BYTE_ACCESS to the correct name and even provided the reason why it still helps x86 but at -Os. I am going to go with HJL's older patch here and convert his target macro into a target hook and look through all of the (active) targets to figure out what is the correct value. I know arm still has it defined incorrectly. MIPS defines it based on MIPS16 which seems wrong too. This will be on my radar for GCC 14. Thanks, Andrew Pinski > > ChangeLog: > 2017-11-17 Wilco Dijkstra <wdijk...@arm.com> > > * config/aarch64/aarch64.h: Remove SLOW_BYTE_ACCESS. > * config/alpha/alpha.h: Likewise. > * config/arc/arc.h: Likewise. > * config/arm/arm.h: Likewise. > * config/avr/avr.h: Likewise. > * config/bfin/bfin.h: Likewise. > * config/c6x/c6x.h: Likewise. > * config/cr16/cr16.h: Likewise. > * config/cris/cris.h: Likewise. > * config/epiphany/epiphany.h: Likewise. > * config/fr30/fr30.h: Likewise. > * config/frv/frv.h: Likewise. > * config/ft32/ft32.h: Likewise. > * config/h8300/h8300.h: Likewise. > * config/i386/i386.h: Likewise. > * config/ia64/ia64.h: Likewise. > * config/iq2000/iq2000.h: Likewise. > * config/lm32/lm32.h: Likewise. > * config/m32c/m32c.h: Likewise. > * config/m32r/m32r.h: Likewise. > * config/m68k/m68k.h: Likewise. > * config/mcore/mcore.h: Likewise. > * config/microblaze/microblaze.h: Likewise. > * config/mips/mips.h: Likewise. > * config/mmix/mmix.h: Likewise. > * config/mn10300/mn10300.h: Likewise. > * config/moxie/moxie.h: Likewise. > * config/msp430/msp430.h: Likewise. > * config/nds32/nds32.h: Likewise. > * config/nios2/nios2.h: Likewise. > * config/nvptx/nvptx.h: Likewise. > * config/pa/pa.h: Likewise. > * config/pdp11/pdp11.h: Likewise. > * config/powerpcspe/powerpcspe.h: Likewise. > * config/riscv/riscv.h: Likewise. > * config/rl78/rl78.h: Likewise. > * config/rs6000/rs6000.h: Likewise. > * config/rx/rx.h: Likewise. > * config/s390/s390.h: Likewise. > * config/sh/sh.h: Likewise. > * config/sparc/sparc.h: Likewise. > * config/spu/spu.h: Likewise. > * config/stormy16/stormy16.h: Likewise. > * config/tilegx/tilegx.h: Likewise. > * config/tilepro/tilepro.h: Likewise. > * config/v850/v850.h: Likewise. > * config/vax/vax.h: Likewise. > * config/visium/visium.h: Likewise. > * config/xtensa/xtensa.h: Likewise. > * doc/tm.texi: Likewise. > * doc/tm.texi.in: Likewise. > * dojump.c: Likewise. > * stor-layout.c: Likewise. > -- > > diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h > index > d8f4d129a02fb89eb00d256aba8c4764d6026078..c509306852585e20e5ab1bd24648eabef39159b0 > 100644 > --- a/gcc/config/aarch64/aarch64.h > +++ b/gcc/config/aarch64/aarch64.h > @@ -769,10 +769,6 @@ typedef struct > if given data not on the nominal alignment. */ > #define STRICT_ALIGNMENT TARGET_STRICT_ALIGN > > -/* Contrary to all documentation, this enables wide bitfield accesses, > - which results in better code when accessing multiple bitfields. */ > -#define SLOW_BYTE_ACCESS 1 > - > #define NO_FUNCTION_CSE 1 > > /* Specify the machine mode that the hardware addresses have. > diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h > index > 257c1de2422b69a0fbb2810ebee455b4088a0a57..42529d7bcc16cb116961a16aeac5b8ca9881035f > 100644 > --- a/gcc/config/alpha/alpha.h > +++ b/gcc/config/alpha/alpha.h > @@ -770,15 +770,6 @@ do { > \ > On the Alpha we have plenty of registers, so use TImode. */ > #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode) > > -/* Nonzero if access to memory by bytes is no faster than for words. > - Also nonzero if doing byte operations (specifically shifts) in registers > - is undesirable. > - > - On the Alpha, we want to not use the byte operation and instead use > - masking operations to access fields; these will save instructions. */ > - > -#define SLOW_BYTE_ACCESS 1 > - > /* Define if operations between registers always perform the operation > on the full register even if a narrower mode is specified. */ > #define WORD_REGISTER_OPERATIONS 1 > diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h > index > ec28d619d7c9acaaf438826e2a56e0f64b9de17b..a28dc80ea27e24c7589cdc2b77729c056a2ccb77 > 100644 > --- a/gcc/config/arc/arc.h > +++ b/gcc/config/arc/arc.h > @@ -976,12 +976,6 @@ arc_select_cc_mode (OP, X, Y) > (BRANCH_COST (optimize_function_for_speed_p (cfun), \ > false) > 9) > > -/* Nonzero if access to memory by bytes is slow and undesirable. > - For RISC chips, it means that access to memory by bytes is no > - better than access by words when possible, so grab a whole word > - and maybe make use of that. */ > -#define SLOW_BYTE_ACCESS 0 > - > /* Define this macro if it is as good or better to call a constant > function address than to call an address kept in a register. */ > /* On the ARC, calling through registers is slow. */ > diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h > index > b189951c934e327c88cc5893e9629515c9c39013..80f8da69e0829279520ef6c272fee88a94debc56 > 100644 > --- a/gcc/config/arm/arm.h > +++ b/gcc/config/arm/arm.h > @@ -1874,9 +1874,6 @@ enum arm_auto_incmodes > ((arm_arch4 || (MODE) == QImode) ? ZERO_EXTEND \ > : ((BYTES_BIG_ENDIAN && (MODE) == HImode) ? SIGN_EXTEND : UNKNOWN))) > > -/* Nonzero if access to memory by bytes is slow and undesirable. */ > -#define SLOW_BYTE_ACCESS 0 > - > /* Immediate shift counts are truncated by the output routines (or was it > the assembler?). Shift counts in a register are truncated by ARM. Note > that the native compiler puts too large (> 32) immediate shift counts > diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h > index > 2272df4afcc1ae02883434767149ae7ac72c94b3..68124845adbc440f0e5a4e2f9e6b467c6e2be63d > 100644 > --- a/gcc/config/avr/avr.h > +++ b/gcc/config/avr/avr.h > @@ -355,8 +355,6 @@ typedef struct avr_args > #define BRANCH_COST(speed_p, predictable_p) \ > (avr_branch_cost + (reload_completed ? 4 : 0)) > > -#define SLOW_BYTE_ACCESS 0 > - > #define NO_FUNCTION_CSE 1 > > #define REGISTER_TARGET_PRAGMAS() \ > diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h > index > e15a05d8784e3e4c56a9055a6047599f8a0e2cea..701ebcd470d3c4e796e75ed81f9bdad80d1490ae > 100644 > --- a/gcc/config/bfin/bfin.h > +++ b/gcc/config/bfin/bfin.h > @@ -797,23 +797,6 @@ typedef struct { > > #define MOVE_RATIO(speed) 5 > > -/* STORAGE LAYOUT: target machine storage layout > - Define this macro as a C expression which is nonzero if accessing > - less than a word of memory (i.e. a `char' or a `short') is no > - faster than accessing a word of memory, i.e., if such access > - require more than one instruction or if there is no difference in > - cost between byte and (aligned) word loads. > - > - When this macro is not defined, the compiler will access a field by > - finding the smallest containing object; when it is defined, a > - fullword load will be used if alignment permits. Unless bytes > - accesses are faster than word accesses, using word accesses is > - preferable since it may eliminate subsequent memory access if > - subsequent accesses occur to other fields in the same word of the > - structure, but to different bytes. */ > -#define SLOW_BYTE_ACCESS 0 > -#define SLOW_SHORT_ACCESS 0 > - > /* Define this if most significant bit is lowest numbered > in instructions that operate on numbered bit-fields. */ > #define BITS_BIG_ENDIAN 0 > diff --git a/gcc/config/c6x/c6x.h b/gcc/config/c6x/c6x.h > index > 233ac13fc8c5eee3f46095a7d35862de7b912ffb..e38a690f8f4a113c76c926821af5ad334983ca69 > 100644 > --- a/gcc/config/c6x/c6x.h > +++ b/gcc/config/c6x/c6x.h > @@ -394,8 +394,6 @@ struct GTY(()) machine_function > /* Costs. */ > #define NO_FUNCTION_CSE 1 > > -#define SLOW_BYTE_ACCESS 0 > - > #define BRANCH_COST(speed_p, predictable_p) 6 > > > diff --git a/gcc/config/cr16/cr16.h b/gcc/config/cr16/cr16.h > index > b0ad34f70ce24fc7d34659af3656cc7fd51f6387..643f672346e79bac71572926ac544be40324928c > 100644 > --- a/gcc/config/cr16/cr16.h > +++ b/gcc/config/cr16/cr16.h > @@ -440,8 +440,6 @@ struct cumulative_args > /* Assume best case (branch predicted). */ > #define BRANCH_COST(speed_p, predictable_p) 2 > > -#define SLOW_BYTE_ACCESS 1 > - > /* It is as good or better to call a constant function address than to > call an address kept in a register. */ > #define NO_FUNCTION_CSE 1 > diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h > index > 892a3724393de372e37f919e8c56dc8df2861463..58d8327b06005f28ab2b94852f171879e506daca > 100644 > --- a/gcc/config/cris/cris.h > +++ b/gcc/config/cris/cris.h > @@ -770,8 +770,6 @@ struct cum_args {int regs;}; > BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2 > with testcases ipps and gcc, giving smallest and fastest code. */ > > -#define SLOW_BYTE_ACCESS 0 > - > /* This is the threshold *below* which inline move sequences of > word-length sizes will be emitted. The "9" will translate to > (9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions > diff --git a/gcc/config/epiphany/epiphany.h b/gcc/config/epiphany/epiphany.h > index > c0767b4642ad15b470e55f87b49db6148c8c2c1f..ddda3b741840312f802f384d8e1fe9dc5d3cade4 > 100644 > --- a/gcc/config/epiphany/epiphany.h > +++ b/gcc/config/epiphany/epiphany.h > @@ -650,12 +650,6 @@ typedef struct GTY (()) machine_function > #define BRANCH_COST(speed_p, predictable_p) \ > (speed_p ? epiphany_branch_cost : 1) > > -/* Nonzero if access to memory by bytes is slow and undesirable. > - For RISC chips, it means that access to memory by bytes is no > - better than access by words when possible, so grab a whole word > - and maybe make use of that. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Define this macro if it is as good or better to call a constant > function address than to call an address kept in a register. */ > /* On the EPIPHANY, calling through registers is slow. */ > diff --git a/gcc/config/fr30/fr30.h b/gcc/config/fr30/fr30.h > index > 8bcabf59299adc7e9f1b56d40498c39f3e21e255..4645c78457118a45b1ca4aac3b75ef4c1f50bb2d > 100644 > --- a/gcc/config/fr30/fr30.h > +++ b/gcc/config/fr30/fr30.h > @@ -622,19 +622,6 @@ enum reg_class > /*}}}*/ > /*{{{ Describing Relative Costs of Operations */ > > -/* Define this macro as a C expression which is nonzero if accessing less > than > - a word of memory (i.e. a `char' or a `short') is no faster than accessing > a > - word of memory, i.e., if such access require more than one instruction or > if > - there is no difference in cost between byte and (aligned) word loads. > - > - When this macro is not defined, the compiler will access a field by > finding > - the smallest containing object; when it is defined, a fullword load will > be > - used if alignment permits. Unless bytes accesses are faster than word > - accesses, using word accesses is preferable since it may eliminate > - subsequent memory access if subsequent accesses occur to other fields in > the > - same word of the structure, but to different bytes. */ > -#define SLOW_BYTE_ACCESS 1 > - > /*}}}*/ > /*{{{ Dividing the output into sections. */ > > diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h > index > 7403e1ae62103b7dd42d1a8da289d2db6a37df1f..13f0c23200d7292c3f8b58622208ee5f62dec1c0 > 100644 > --- a/gcc/config/frv/frv.h > +++ b/gcc/config/frv/frv.h > @@ -1410,19 +1410,6 @@ __asm__("\n" > \ > default; other values are interpreted relative to that. */ > #define BRANCH_COST(speed_p, predictable_p) frv_branch_cost_int > > -/* Define this macro as a C expression which is nonzero if accessing less > than > - a word of memory (i.e. a `char' or a `short') is no faster than accessing > a > - word of memory, i.e., if such access require more than one instruction or > if > - there is no difference in cost between byte and (aligned) word loads. > - > - When this macro is not defined, the compiler will access a field by > finding > - the smallest containing object; when it is defined, a fullword load will > be > - used if alignment permits. Unless bytes accesses are faster than word > - accesses, using word accesses is preferable since it may eliminate > - subsequent memory access if subsequent accesses occur to other fields in > the > - same word of the structure, but to different bytes. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Define this macro if it is as good or better to call a constant function > address than to call an address kept in a register. */ > #define NO_FUNCTION_CSE 1 > diff --git a/gcc/config/ft32/ft32.h b/gcc/config/ft32/ft32.h > index > 8bb0d399a0c2f08e2246120aa92a5f11b0731bfb..487b175e321e52961c25c8fbe286eb603e5156f3 > 100644 > --- a/gcc/config/ft32/ft32.h > +++ b/gcc/config/ft32/ft32.h > @@ -286,11 +286,6 @@ enum reg_class > > #define BRANCH_COST(speed_p, predictable_p) 2 > > -/* Define this macro as a C expression which is nonzero if accessing > - less than a word of memory (i.e. a `char' or a `short') is no > - faster than accessing a word of memory. */ > -#define SLOW_BYTE_ACCESS 1 > - > #define STORE_FLAG_VALUE 1 > > #define MOVE_RATIO(speed) ((speed) ? 6 : 2) > diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h > index > 9ba82a76ab9275e891f1eeadaa14551488108b21..e98ce5e0bb7a56483d9a9b2557bb1f416c28a37d > 100644 > --- a/gcc/config/h8300/h8300.h > +++ b/gcc/config/h8300/h8300.h > @@ -546,9 +546,6 @@ struct cum_arg > #define MOVE_MAX (TARGET_H8300H || TARGET_H8300S ? 4 : 2) > #define MAX_MOVE_MAX 4 > > -/* Nonzero if access to memory by bytes is slow and undesirable. */ > -#define SLOW_BYTE_ACCESS TARGET_SLOWBYTE > - > /* Define if shifts truncate the shift count > which implies one can omit a sign-extension or zero-extension > of a shift count. */ > diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h > index > bc601c8e6f8739d026292fee1a16c0718f55d852..6e761f37139eee1a02149130ce71918da311ee05 > 100644 > --- a/gcc/config/i386/i386.h > +++ b/gcc/config/i386/i386.h > @@ -1958,25 +1958,6 @@ do { > \ > mode that should actually be used. We allow pairs of registers. */ > #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_64BIT ? TImode : DImode) > > -/* Define this macro as a C expression which is nonzero if accessing > - less than a word of memory (i.e. a `char' or a `short') is no > - faster than accessing a word of memory, i.e., if such access > - require more than one instruction or if there is no difference in > - cost between byte and (aligned) word loads. > - > - When this macro is not defined, the compiler will access a field by > - finding the smallest containing object; when it is defined, a > - fullword load will be used if alignment permits. Unless bytes > - accesses are faster than word accesses, using word accesses is > - preferable since it may eliminate subsequent memory access if > - subsequent accesses occur to other fields in the same word of the > - structure, but to different bytes. */ > - > -#define SLOW_BYTE_ACCESS 0 > - > -/* Nonzero if access to memory by shorts is slow and undesirable. */ > -#define SLOW_SHORT_ACCESS 0 > - > /* Define this macro if it is as good or better to call a constant > function address than to call an address kept in a register. > > diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h > index > eceab5f23b661a2c3da46c1e649561e081e65f91..fddc35ebe324509a8617feff808deafa8effa6fb > 100644 > --- a/gcc/config/ia64/ia64.h > +++ b/gcc/config/ia64/ia64.h > @@ -1073,12 +1073,6 @@ do { > \ > > #define BRANCH_COST(speed_p, predictable_p) 6 > > -/* Define this macro as a C expression which is nonzero if accessing less > than > - a word of memory (i.e. a `char' or a `short') is no faster than accessing > a > - word of memory. */ > - > -#define SLOW_BYTE_ACCESS 1 > - > /* Define this macro if it is as good or better to call a constant function > address than to call an address kept in a register. > > diff --git a/gcc/config/iq2000/iq2000.h b/gcc/config/iq2000/iq2000.h > index > 72122e27577660e8e623418fea216c75f554ae0b..88380602fdf792735e46ba6949cc4c2079801636 > 100644 > --- a/gcc/config/iq2000/iq2000.h > +++ b/gcc/config/iq2000/iq2000.h > @@ -363,8 +363,6 @@ typedef struct iq2000_args > > #define BRANCH_COST(speed_p, predictable_p) 2 > > -#define SLOW_BYTE_ACCESS 1 > - > #define NO_FUNCTION_CSE 1 > > #define ADJUST_COST(INSN,LINK,DEP_INSN,COST) \ > diff --git a/gcc/config/lm32/lm32.h b/gcc/config/lm32/lm32.h > index > 8f2035455ae856f6923bd768e691dab56c71c01c..4f9f4739ef1a5b85b02faebdffb3e9546a645155 > 100644 > --- a/gcc/config/lm32/lm32.h > +++ b/gcc/config/lm32/lm32.h > @@ -332,8 +332,6 @@ enum reg_class > /* Costs. */ > /*---------*/ > > -#define SLOW_BYTE_ACCESS 1 > - > #define NO_FUNCTION_CSE 1 > > #define BRANCH_COST(speed_p, predictable_p) 4 > diff --git a/gcc/config/m32c/m32c.h b/gcc/config/m32c/m32c.h > index > 4bf67fb9c6726c7f2a6865431084b3eb235d6afa..512970d5936c279d4b246c98672952c5c5094883 > 100644 > --- a/gcc/config/m32c/m32c.h > +++ b/gcc/config/m32c/m32c.h > @@ -171,7 +171,6 @@ machine_function; > #define PCC_BITFIELD_TYPE_MATTERS 0 > > #define STRICT_ALIGNMENT 0 > -#define SLOW_BYTE_ACCESS 1 > > /* Layout of Source Language Data Types */ > > diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h > index > 0fa4c5f24e17ff2512c2dd13873261f71c4129b4..8bdc48fbf1e118e0535a44edd699360a2300cdfc > 100644 > --- a/gcc/config/m32r/m32r.h > +++ b/gcc/config/m32r/m32r.h > @@ -705,12 +705,6 @@ L2: .word STATIC > we define this as 1. Defining it as 2 had a heavy hit in fp-bit.c. */ > #define BRANCH_COST(speed_p, predictable_p) ((TARGET_BRANCH_COST) ? 2 : 1) > > -/* Nonzero if access to memory by bytes is slow and undesirable. > - For RISC chips, it means that access to memory by bytes is no > - better than access by words when possible, so grab a whole word > - and maybe make use of that. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Define this macro if it is as good or better to call a constant > function address than to call an address kept in a register. */ > #define NO_FUNCTION_CSE 1 > diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h > index > 97693cbf54984a53aa6c35061ca723dae6d1a7b3..25d3082489bcaebb903e58b50f92be66df18b5bb > 100644 > --- a/gcc/config/m68k/m68k.h > +++ b/gcc/config/m68k/m68k.h > @@ -662,7 +662,6 @@ __transfer_from_trampoline () > \ > > #define DEFAULT_SIGNED_CHAR 1 > #define MOVE_MAX 4 > -#define SLOW_BYTE_ACCESS 0 > > /* The 68020 BFFFO and ColdFire FF1 instructions return 32 for zero. */ > #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1) > diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h > index > 50d087c1cd5255ef4c3f19c3f73ac3958c8e92bc..b8164ebd6ec49e8298baf06355e17aad361ceb4a > 100644 > --- a/gcc/config/mcore/mcore.h > +++ b/gcc/config/mcore/mcore.h > @@ -529,9 +529,6 @@ extern const enum reg_class > regno_reg_class[FIRST_PSEUDO_REGISTER]; > done, UNKNOWN if none. */ > #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND > > -/* Nonzero if access to memory by bytes is slow and undesirable. */ > -#define SLOW_BYTE_ACCESS TARGET_SLOW_BYTES > - > /* Shift counts are truncated to 6-bits (0 to 63) instead of the expected > 5-bits, so we can not define SHIFT_COUNT_TRUNCATED to true for this > target. */ > diff --git a/gcc/config/microblaze/microblaze.h > b/gcc/config/microblaze/microblaze.h > index > 59cc1cc2e37b7b8c49a56def5f45db261469f579..72340068583bb0b143f506458ea3c82ad821c230 > 100644 > --- a/gcc/config/microblaze/microblaze.h > +++ b/gcc/config/microblaze/microblaze.h > @@ -537,8 +537,6 @@ typedef struct microblaze_args > #define MOVE_MAX 4 > #define MAX_MOVE_MAX 8 > > -#define SLOW_BYTE_ACCESS 1 > - > /* sCOND operations return 1. */ > #define STORE_FLAG_VALUE 1 > > diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h > index > bea2ce844ce9ebc2ab2ea5d1e12616897d5ff65b..9ccf17200f755127b41bf66db7637a67470c34c8 > 100644 > --- a/gcc/config/mips/mips.h > +++ b/gcc/config/mips/mips.h > @@ -2617,19 +2617,6 @@ typedef struct mips_args { > /* We don't modify it for MSA as it is only used by the classic reload. */ > #define MAX_MOVE_MAX 8 > > -/* Define this macro as a C expression which is nonzero if > - accessing less than a word of memory (i.e. a `char' or a > - `short') is no faster than accessing a word of memory, i.e., if > - such access require more than one instruction or if there is no > - difference in cost between byte and (aligned) word loads. > - > - On RISC machines, it tends to generate better code to define > - this as 1, since it avoids making a QI or HI mode register. > - > - But, generating word accesses for -mips16 is generally bad as shifts > - (often extended) would be needed for byte accesses. */ > -#define SLOW_BYTE_ACCESS (!TARGET_MIPS16) > - > /* Standard MIPS integer shifts truncate the shift amount to the > width of the shifted operand. However, Loongson vector shifts > do not truncate the shift amount at all. */ > diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h > index > 2ee3592f3c8d1f0d737f3bb30d10834737374db8..86984cc383e33d27880ece3f0a079852bab4af28 > 100644 > --- a/gcc/config/mmix/mmix.h > +++ b/gcc/config/mmix/mmix.h > @@ -575,9 +575,6 @@ typedef struct { int regs; int lib; } CUMULATIVE_ARGS; > > /* Node: Costs */ > > -#define SLOW_BYTE_ACCESS 0 > - > - > /* Node: Sections */ > > /* This must be a constant string, since it's used in crtstuff.c. */ > diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h > index > b074540f7b1902aa258174a72fcb11b99049056c..8aa1861f9b5f6a240904e980a393f3338381330a > 100644 > --- a/gcc/config/mn10300/mn10300.h > +++ b/gcc/config/mn10300/mn10300.h > @@ -547,10 +547,6 @@ do { > \ > #define SELECT_CC_MODE(OP, X, Y) mn10300_select_cc_mode (OP, X, Y) > #define REVERSIBLE_CC_MODE(MODE) 0 > > -/* Nonzero if access to memory by bytes or half words is no faster > - than accessing full words. */ > -#define SLOW_BYTE_ACCESS 1 > - > #define NO_FUNCTION_CSE 1 > > /* According expr.c, a value of around 6 should minimize code size, and > diff --git a/gcc/config/moxie/moxie.h b/gcc/config/moxie/moxie.h > index > 3742967d01c67b03483799c64b2906f1197ed17f..836f9e89586bb9ba2b37c16f08cf54625084ba02 > 100644 > --- a/gcc/config/moxie/moxie.h > +++ b/gcc/config/moxie/moxie.h > @@ -273,11 +273,6 @@ enum reg_class > /* Alignment required for a function entry point, in bits. */ > #define FUNCTION_BOUNDARY 16 > > -/* Define this macro as a C expression which is nonzero if accessing > - less than a word of memory (i.e. a `char' or a `short') is no > - faster than accessing a word of memory. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Number of storage units in a word; normally the size of a > general-purpose register, a power of two from 1 or 8. */ > #define UNITS_PER_WORD 4 > diff --git a/gcc/config/msp430/msp430.h b/gcc/config/msp430/msp430.h > index > d422725914822425c35e2ac91b920f39416143d8..e25b168802bf077559ba6e5ad214d5e94b8f4947 > 100644 > --- a/gcc/config/msp430/msp430.h > +++ b/gcc/config/msp430/msp430.h > @@ -202,8 +202,6 @@ extern const char * msp430_select_hwmult_lib (int, const > char **); > > #define RETURN_ADDR_RTX(COUNT, FA) \ > msp430_return_addr_rtx (COUNT) > - > -#define SLOW_BYTE_ACCESS 0 > > > /* Register Usage */ > diff --git a/gcc/config/nds32/nds32.h b/gcc/config/nds32/nds32.h > index > 6954eec17076799e87cee84289b8992b3876eb79..fc9628ca84a7ad15d6d4432c76fa6070fb4a28a1 > 100644 > --- a/gcc/config/nds32/nds32.h > +++ b/gcc/config/nds32/nds32.h > @@ -821,8 +821,6 @@ enum reg_class > other values are interpreted relative to that. */ > #define BRANCH_COST(speed_p, predictable_p) ((speed_p) ? 2 : 0) > > -#define SLOW_BYTE_ACCESS 1 > - > #define NO_FUNCTION_CSE 1 > > > diff --git a/gcc/config/nios2/nios2.h b/gcc/config/nios2/nios2.h > index > 9fdff024cd859495160b3aa31cc80c08dd3f9258..3f0ec97693b25618ad2953e639ac39bd71dbf3de > 100644 > --- a/gcc/config/nios2/nios2.h > +++ b/gcc/config/nios2/nios2.h > @@ -323,7 +323,6 @@ typedef struct nios2_args > > /* Describing Relative Costs of Operations. */ > #define MOVE_MAX 4 > -#define SLOW_BYTE_ACCESS 1 > > /* It is as good to call a constant function address as to call an address > kept in a register. */ > diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h > index > f81b9e2ae697753bf599ca523d4fc3b89ff0ca53..6cfdbc275e5ae07bc3ab44db9e5133f890b78606 > 100644 > --- a/gcc/config/nvptx/nvptx.h > +++ b/gcc/config/nvptx/nvptx.h > @@ -223,7 +223,6 @@ struct GTY(()) machine_function > /* Costs. */ > > #define NO_FUNCTION_CSE 1 > -#define SLOW_BYTE_ACCESS 0 > #define BRANCH_COST(speed_p, predictable_p) 6 > > /* Assembler Format. */ > diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h > index > 7bd1f112471ce4268b8a4229cdcdd3cf36c5a37a..3413da7c700439b1637afc996b17ec7460d2c565 > 100644 > --- a/gcc/config/pa/pa.h > +++ b/gcc/config/pa/pa.h > @@ -1000,9 +1000,6 @@ do { > \ > done, UNKNOWN if none. */ > #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND > > -/* Nonzero if access to memory by bytes is slow and undesirable. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Specify the machine mode that pointers have. > After generation of rtl, the compiler makes no further distinction > between pointers and any other objects of this machine mode. */ > diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h > index > 115bb5b83a020cbfad42a449989d85ea7aaef680..835caf0333454723e6637e2491dae7e722b5bb87 > 100644 > --- a/gcc/config/pdp11/pdp11.h > +++ b/gcc/config/pdp11/pdp11.h > @@ -419,10 +419,6 @@ extern int may_call_alloca; > > #define MOVE_MAX 2 > > -/* Nonzero if access to memory by byte is slow and undesirable. - > -*/ > -#define SLOW_BYTE_ACCESS 0 > - > /* Do not break .stabs pseudos into continuations. */ > #define DBX_CONTIN_LENGTH 0 > > diff --git a/gcc/config/powerpcspe/powerpcspe.h > b/gcc/config/powerpcspe/powerpcspe.h > index > bc37c6f17e588aaa0b50271c0f0bdd06b0dc6002..18c8507c7d071e5011a3cc79c4501e59366bd58a > 100644 > --- a/gcc/config/powerpcspe/powerpcspe.h > +++ b/gcc/config/powerpcspe/powerpcspe.h > @@ -2084,11 +2084,6 @@ do { > \ > #define MOVE_MAX (! TARGET_POWERPC64 ? 4 : 8) > #define MAX_MOVE_MAX 8 > > -/* Nonzero if access to memory by bytes is no faster than for words. > - Also nonzero if doing byte operations (specifically shifts) in registers > - is undesirable. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD > will either zero-extend or sign-extend. The value of this macro should > be the code that says which one of the two operations is implicitly > diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h > index > fe09e84e8953d24ba4d34217041cd798a0aa3057..19916e34eb4816713c41f15cd3794826a6416ee8 > 100644 > --- a/gcc/config/riscv/riscv.h > +++ b/gcc/config/riscv/riscv.h > @@ -618,13 +618,6 @@ typedef struct { > #define MOVE_MAX UNITS_PER_WORD > #define MAX_MOVE_MAX 8 > > -/* The SPARC port says: > - Nonzero if access to memory by bytes is slow and undesirable. > - For RISC chips, it means that access to memory by bytes is no > - better than access by words when possible, so grab a whole word > - and maybe make use of that. */ > -#define SLOW_BYTE_ACCESS 1 > - > #define SHIFT_COUNT_TRUNCATED 1 > > /* Specify the machine mode that pointers have. > diff --git a/gcc/config/rl78/rl78.h b/gcc/config/rl78/rl78.h > index > e6b640986533251cbee504698794af1f2b89ed6d..237919d88ea9ba8fbcf10c3eee9b6fad2d3ff4cc > 100644 > --- a/gcc/config/rl78/rl78.h > +++ b/gcc/config/rl78/rl78.h > @@ -157,7 +157,6 @@ > #define HAVE_POST_INCREMENT 0 > > #define MOVE_RATIO(SPEED) ((SPEED) ? 24 : 16) > -#define SLOW_BYTE_ACCESS 0 > > #define STORE_FLAG_VALUE 1 > #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND > diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h > index > 198110485c893251d90b33b1f780e6eff347dd60..ae6b38b16e26a53daef990b3399a3dc6cfb3fff2 > 100644 > --- a/gcc/config/rs6000/rs6000.h > +++ b/gcc/config/rs6000/rs6000.h > @@ -1980,11 +1980,6 @@ do { > \ > #define MOVE_MAX (! TARGET_POWERPC64 ? 4 : 8) > #define MAX_MOVE_MAX 8 > > -/* Nonzero if access to memory by bytes is no faster than for words. > - Also nonzero if doing byte operations (specifically shifts) in registers > - is undesirable. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD > will either zero-extend or sign-extend. The value of this macro should > be the code that says which one of the two operations is implicitly > diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h > index > 850033c1ee75e557d50788b4ce3cbc1efe82b2bc..e756fed56ba74908587cba5e66fd082f17eee5c7 > 100644 > --- a/gcc/config/rx/rx.h > +++ b/gcc/config/rx/rx.h > @@ -174,7 +174,6 @@ > #define HAVE_POST_INCREMENT 1 > > #define MOVE_RATIO(SPEED) ((SPEED) ? 4 : 2) > -#define SLOW_BYTE_ACCESS 1 > > #define STORE_FLAG_VALUE 1 > #define LOAD_EXTEND_OP(MODE) SIGN_EXTEND > diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h > index > 15d33906023603e1a4d30a5e9697aa78a167534a..5836637e394e7c7a944003039d998e1c0babce9a > 100644 > --- a/gcc/config/s390/s390.h > +++ b/gcc/config/s390/s390.h > @@ -802,9 +802,6 @@ CUMULATIVE_ARGS; > is the default; other values are interpreted relative to that. */ > #define BRANCH_COST(speed_p, predictable_p) s390_branch_cost > > -/* Nonzero if access to memory by bytes is slow and undesirable. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* An integer expression for the size in bits of the largest integer machine > mode that should actually be used. We allow pairs of registers. */ > #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_64BIT ? TImode : DImode) > diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h > index > f5d80da1451745e990461f5794c360878df62db2..91dd79f6e9c6187dec76819c2f5bf8e97e5f05d1 > 100644 > --- a/gcc/config/sh/sh.h > +++ b/gcc/config/sh/sh.h > @@ -1514,9 +1514,6 @@ extern bool current_function_interrupt; > /* Define if loading short immediate values into registers sign extends. */ > #define SHORT_IMMEDIATES_SIGN_EXTEND 1 > > -/* Nonzero if access to memory by bytes is no faster than for words. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Nonzero if the target supports dynamic shift instructions > like shad and shld. */ > #define TARGET_DYNSHIFT (TARGET_SH3 || TARGET_SH2A) > diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h > index > a0b56126fd51fe4eedd6677cbac744fb0d443340..1022131705e9badbdaea13a3e366ca9ad2b1bf3d > 100644 > --- a/gcc/config/sparc/sparc.h > +++ b/gcc/config/sparc/sparc.h > @@ -1425,12 +1425,6 @@ do { > \ > done, UNKNOWN if none. */ > #define LOAD_EXTEND_OP(MODE) ZERO_EXTEND > > -/* Nonzero if access to memory by bytes is slow and undesirable. > - For RISC chips, it means that access to memory by bytes is no > - better than access by words when possible, so grab a whole word > - and maybe make use of that. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Define this to be nonzero if shift instructions ignore all but the > low-order > few bits. */ > #define SHIFT_COUNT_TRUNCATED 1 > diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h > index > cf99b88b6acf29c438311db4e412aa7b35090e88..af38f618ac47dc1cee4dc1dc8521cfa3ef56b8da > 100644 > --- a/gcc/config/spu/spu.h > +++ b/gcc/config/spu/spu.h > @@ -373,8 +373,6 @@ do { > \ > > #define BRANCH_COST(speed_p, predictable_p) spu_branch_cost > > -#define SLOW_BYTE_ACCESS 0 > - > #define MOVE_RATIO(speed) ((speed)? 32 : 4) > > #define NO_FUNCTION_CSE 1 > diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h > index > 1d7045759c526ca8ee57a0b050769e73faa227db..bc1f23ea737779ecb6361354ae03e9176c698008 > 100644 > --- a/gcc/config/stormy16/stormy16.h > +++ b/gcc/config/stormy16/stormy16.h > @@ -320,8 +320,6 @@ enum reg_class > > #define BRANCH_COST(speed_p, predictable_p) 5 > > -#define SLOW_BYTE_ACCESS 0 > - > #define NO_FUNCTION_CSE 1 > > > diff --git a/gcc/config/tilegx/tilegx.h b/gcc/config/tilegx/tilegx.h > index > ea3c1b308c723b2ce0ebeb669c2aee12c65f7829..cd5a13535f358092d4ce43917f41a607d271b15e > 100644 > --- a/gcc/config/tilegx/tilegx.h > +++ b/gcc/config/tilegx/tilegx.h > @@ -362,10 +362,6 @@ enum reg_class > (MODE) = DImode; \ > } > > -/* Define SLOW_BYTE_ACCESS to avoid making a QI or HI mode > - register. */ > -#define SLOW_BYTE_ACCESS 1 > - > #define SHIFT_COUNT_TRUNCATED 0 > > #define SHORT_IMMEDIATES_SIGN_EXTEND 1 > diff --git a/gcc/config/tilepro/tilepro.h b/gcc/config/tilepro/tilepro.h > index > 3aa6dc8cd677fba2ba677a64c2b97358562a1fc2..a980972609ff50418415bf3fcdb271a7d6ff2701 > 100644 > --- a/gcc/config/tilepro/tilepro.h > +++ b/gcc/config/tilepro/tilepro.h > @@ -321,10 +321,6 @@ enum reg_class > && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \ > (MODE) = SImode; > > -/* Define SLOW_BYTE_ACCESS to avoid making a QI or HI mode > - register. */ > -#define SLOW_BYTE_ACCESS 1 > - > #define SHIFT_COUNT_TRUNCATED 1 > > #define SHORT_IMMEDIATES_SIGN_EXTEND 1 > diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h > index > 54dcc097bc485ada41991874d960c6665d20ca79..1c518415432c5065f096f8a977c7eb5af8bc950e > 100644 > --- a/gcc/config/v850/v850.h > +++ b/gcc/config/v850/v850.h > @@ -581,10 +581,6 @@ struct cum_arg { int nbytes; }; > #define CC_NO_CARRY CC_NO_OVERFLOW > #define NOTICE_UPDATE_CC(EXP, INSN) notice_update_cc(EXP, INSN) > > -/* Nonzero if access to memory by bytes or half words is no faster > - than accessing full words. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* According expr.c, a value of around 6 should minimize code size, and > for the V850 series, that's our primary concern. */ > #define MOVE_RATIO(speed) 6 > diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h > index > 990140df869337c8e1e3f905c774fbf78a43ca1c..04da7a36172c9db15d7ab5d15fd7775b1afb3541 > 100644 > --- a/gcc/config/vax/vax.h > +++ b/gcc/config/vax/vax.h > @@ -434,9 +434,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; > #define MOVE_RATIO(speed) ((speed) ? 6 : 3) > #define CLEAR_RATIO(speed) ((speed) ? 6 : 2) > > -/* Nonzero if access to memory by bytes is slow and undesirable. */ > -#define SLOW_BYTE_ACCESS 0 > - > /* Define if shifts truncate the shift count > which implies one can omit a sign-extension or zero-extension > of a shift count. */ > diff --git a/gcc/config/visium/visium.h b/gcc/config/visium/visium.h > index > 85735953968d558a3d934bda0ef57cfab4f2f226..1525754cae341d48ec67465a64775c5f7516922f > 100644 > --- a/gcc/config/visium/visium.h > +++ b/gcc/config/visium/visium.h > @@ -1109,23 +1109,6 @@ do > \ > /* Override BRANCH_COST heuristics for complex logical ops. */ > #define LOGICAL_OP_NON_SHORT_CIRCUIT 0 > > -/* `SLOW_BYTE_ACCESS' > - > - Define this macro as a C expression which is nonzero if accessing > - less than a word of memory (i.e. a `char' or a `short') is no > - faster than accessing a word of memory, i.e., if such access > - require more than one instruction or if there is no difference in > - cost between byte and (aligned) word loads. > - > - When this macro is not defined, the compiler will access a field by > - finding the smallest containing object; when it is defined, a > - fullword load will be used if alignment permits. Unless bytes > - accesses are faster than word accesses, using word accesses is > - preferable since it may eliminate subsequent memory access if > - subsequent accesses occur to other fields in the same word of the > - structure, but to different bytes. */ > -#define SLOW_BYTE_ACCESS 0 > - > /* `MOVE_RATIO (SPEED)` > > The threshold of number of scalar memory-to-memory move insns, > diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h > index > b4cf53708b3eb4a60846cf24003ae7b82f9aee99..3d2163e032e3ee0f73ca40e0f24e9b4dc424c137 > 100644 > --- a/gcc/config/xtensa/xtensa.h > +++ b/gcc/config/xtensa/xtensa.h > @@ -648,9 +648,6 @@ typedef struct xtensa_args > #define MOVE_MAX 4 > #define MAX_MOVE_MAX 4 > > -/* Prefer word-sized loads. */ > -#define SLOW_BYTE_ACCESS 1 > - > /* Shift instructions ignore all but the low-order few bits. */ > #define SHIFT_COUNT_TRUNCATED 1 > > diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi > index > 72606f53f1c991e0bfadcd5f23aaedaac5f0a8df..65f8425ccc1225a87bb2b1ac7e0acea33f48cda0 > 100644 > --- a/gcc/doc/tm.texi > +++ b/gcc/doc/tm.texi > @@ -6392,21 +6392,6 @@ Here are additional macros which do not specify > precise relative costs, > but only that certain actions are more expensive than GCC would > ordinarily expect. > > -@defmac SLOW_BYTE_ACCESS > -Define this macro as a C expression which is nonzero if accessing less > -than a word of memory (i.e.@: a @code{char} or a @code{short}) is no > -faster than accessing a word of memory, i.e., if such access > -require more than one instruction or if there is no difference in cost > -between byte and (aligned) word loads. > - > -When this macro is not defined, the compiler will access a field by > -finding the smallest containing object; when it is defined, a fullword > -load will be used if alignment permits. Unless bytes accesses are > -faster than word accesses, using word accesses is preferable since it > -may eliminate subsequent memory access if subsequent accesses occur to > -other fields in the same word of the structure, but to different bytes. > -@end defmac > - > @deftypefn {Target Hook} bool TARGET_SLOW_UNALIGNED_ACCESS (machine_mode > @var{mode}, unsigned int @var{align}) > This hook returns true if memory accesses described by the > @var{mode} and @var{alignment} parameters have a cost many times greater > diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in > index > e7d4ada290f49c5980eede3c6481fe04610f5d2c..92616339243563931176cf2fd5e09f748e024986 > 100644 > --- a/gcc/doc/tm.texi.in > +++ b/gcc/doc/tm.texi.in > @@ -4451,21 +4451,6 @@ Here are additional macros which do not specify > precise relative costs, > but only that certain actions are more expensive than GCC would > ordinarily expect. > > -@defmac SLOW_BYTE_ACCESS > -Define this macro as a C expression which is nonzero if accessing less > -than a word of memory (i.e.@: a @code{char} or a @code{short}) is no > -faster than accessing a word of memory, i.e., if such access > -require more than one instruction or if there is no difference in cost > -between byte and (aligned) word loads. > - > -When this macro is not defined, the compiler will access a field by > -finding the smallest containing object; when it is defined, a fullword > -load will be used if alignment permits. Unless bytes accesses are > -faster than word accesses, using word accesses is preferable since it > -may eliminate subsequent memory access if subsequent accesses occur to > -other fields in the same word of the structure, but to different bytes. > -@end defmac > - > @hook TARGET_SLOW_UNALIGNED_ACCESS > > @defmac MOVE_RATIO (@var{speed}) > diff --git a/gcc/dojump.c b/gcc/dojump.c > index > db8b278b982b6208196c8673b5571d91ee3d1658..5b1b5f747e236540a986317891810e24519aa4b7 > 100644 > --- a/gcc/dojump.c > +++ b/gcc/dojump.c > @@ -585,27 +585,6 @@ do_jump (tree exp, rtx_code_label *if_false_label, > } > } > > - /* If we are AND'ing with a small constant, do this comparison in the > - smallest type that fits. If the machine doesn't have comparisons > - that small, it will be converted back to the wider comparison. > - This helps if we are testing the sign bit of a narrower object. > - combine can't do this for us because it can't know whether a > - ZERO_EXTRACT or a compare in a smaller mode exists, but we do. */ > - > - if (! SLOW_BYTE_ACCESS > - && TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST > - && TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT > - && (i = tree_floor_log2 (TREE_OPERAND (exp, 1))) >= 0 > - && int_mode_for_size (i + 1, 0).exists (&mode) > - && (type = lang_hooks.types.type_for_mode (mode, 1)) != 0 > - && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp)) > - && have_insn_for (COMPARE, TYPE_MODE (type))) > - { > - do_jump (fold_convert (type, exp), if_false_label, if_true_label, > - prob); > - break; > - } > - > if (TYPE_PRECISION (TREE_TYPE (exp)) > 1 > || TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST) > goto normal; > diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c > index > 7730ac33e4f62673f021ee95610c2e5e2e2843cb..c2116136fbfb61ea6eb5b10b774d99ac4179ce17 > 100644 > --- a/gcc/stor-layout.c > +++ b/gcc/stor-layout.c > @@ -2811,7 +2811,7 @@ bit_field_mode_iterator::prefer_smaller_modes () > { > return (m_volatilep > ? targetm.narrow_volatile_bitfield () > - : !SLOW_BYTE_ACCESS); > + : false); > } > > /* Find the best machine mode to use when referencing a bit field of length > @@ -2831,12 +2831,8 @@ bit_field_mode_iterator::prefer_smaller_modes () > > The underlying object is known to be aligned to a boundary of ALIGN bits. > > - If VOLATILEP is false and SLOW_BYTE_ACCESS is false, we return the > - smallest mode meeting these conditions. > - > - If VOLATILEP is false and SLOW_BYTE_ACCESS is true, we return the > - largest mode (but a mode no wider than UNITS_PER_WORD) that meets > - all the conditions. > + If VOLATILEP is false we return the largest mode (but a mode no wider > + than UNITS_PER_WORD) that meets all the conditions. > > If VOLATILEP is true the narrow_volatile_bitfields target hook is used to > decide which of the above modes should be used. */