erratum: - extern unsigned int value; + extern unsigned short value;
On 2022/06/17 22:47, Takayuki 'January June' Suwa via Gcc-patches wrote: > Storing integer constants into litpool in the early stage of compilation > hinders some integer optimizations. In fact, such integer constants are > not subject to the constant folding process. > > For example: > > extern unsigned int value; > extern void foo(void); > void test(void) { > if (value == 30001) > foo(); > } > > .literal_position > .literal .LC0, value > .literal .LC1, 30001 > test: > l32r a3, .LC0 > l32r a2, .LC1 > l16ui a3, a3, 0 > extui a2, a2, 0, 16 // runtime zero-extension despite constant > bne a3, a2, .L1 > j.l foo, a9 > .L1: > ret.n > > This patch defers the placement of integer constants into litpool until > the start of reload: > > .literal_position > .literal .LC0, value > .literal .LC1, 30001 > test: > l32r a3, .LC0 > l32r a2, .LC1 > l16ui a3, a3, 0 > bne a3, a2, .L1 > j.l foo, a9 > .L1: > ret.n > > gcc/ChangeLog: > > * config/xtensa/constraints.md (Y): > Change to include integer constants until reload begins. > * config/xtensa/predicates.md (move_operand): Ditto. > * config/xtensa/xtensa.cc (xtensa_emit_move_sequence): > Change to allow storing integer constants into litpool only after > reload begins.