M68K: avoid quadratic slowdlow in label alignment check
authorSergei Trofimovich <siarheit@google.com>
Thu, 14 Apr 2022 07:47:00 +0000 (08:47 +0100)
committerSergei Trofimovich <siarheit@google.com>
Thu, 14 Apr 2022 10:26:38 +0000 (11:26 +0100)
commitc641fe0dcb886dc1b8a235ab2b236275ee46510a
treec528e3ca895d127b9930d5c716cc8405e702e5c7
parente6f601b74d12c84729ebe627725477b5a47e44e5
M68K: avoid quadratic slowdlow in label alignment check

Before the change tc-m68k maintained a list of seen labels.
Alignment check traversed label list to resolve symbol to label.
This caused quadratic slowdown as each symbol was checked against
each label. Worst affected files are the ones built with debugging
enabled as DWARF generates many labels.

The change embeds auxiliary label information right into symbol using
TC_SYMFIELD_TYPE.

Before the change test from PR 29058 did not finish in 10 minutes. After
the change it finishes in 2 seconds.

gas/ChangeLog:

PR 29058
* config/tc-m68k.h (TC_SYMFIELD_TYPE): define as m68k_tc_sy.
* config/tc-m68k.c (m68k_frob_label): Use TC_SYMFIELD_TYPE to
store label information.
gas/config/tc-m68k.c
gas/config/tc-m68k.h