aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/crypto/x509/x509.go
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-09-29 21:52:32 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2024-09-29 21:52:32 +0200
commit73726725ae03995ef8b61622c954f7ca70416f79 (patch)
tree37fae245c2511e5c84bc74dc23be8222bde66cd3 /libgo/go/crypto/x509/x509.go
parentf4d0c6acc0ef43d7971f2d53afaa64ca05fb4718 (diff)
downloadgcc-master.zip
gcc-master.tar.gz
gcc-master.tar.bz2
cselib: Discard useless locs of preserved VALUEs [PR116627]HEADtrunkmaster
remove_useless_values iteratively discards useless locs (locs of cselib_val which refer to non-preserved VALUEs with no locations), which in turn can make further values useless until no further VALUEs are made useless and then discards the useless VALUEs. Preserved VALUEs (something done during var-tracking only I think) live in a different hash table, cselib_preserved_hash_table rather than cselib_hash_table. cselib_find_slot first looks up slot in cselib_preserved_hash_table and only if not found looks it up in cselib_hash_table (and INSERTs only into the latter), whereas preservation of a VALUE results in move of a cselib_val from the latter to the former hash table. The testcase in the PR (apparently too fragile, it only reproduces on 14 branch with various flags on a single arch, not on trunk) ICEs, because we have a preserved VALUE (QImode with (const_int 0) as one of the locs). In a different BB SImode r2 is looked up, a non-preserved VALUE is created for it, and the r13-2916 added code attempts to lookup also SUBREGs of that in narrower modes, among those QImode, so adds to that SImode r2 non-preserve VALUE a new loc of (subreg:QI (value:SI) 0). That SImode value is considered useless, so remove_useless_value discards it, but nothing discarded it from the preserved VALUE's loc_list, so when looking something up in the hash table we ICE trying to derevence CSELIB_VAL of the discarded VALUE. I think we need to discuard useless locs even from the preserved VALUEs. That IMHO shouldn't create any further useless VALUEs, the preserved VALUEs are never useless, so we don't need to iterate with it, can do it just once, but IMHO it needs to be done because actually discard_useless_values. The following patch does that. 2024-09-29 Jakub Jelinek <jakub@redhat.com> PR target/116627 * cselib.cc (remove_useless_values): Discard useless locs even from preserved cselib_vals in cselib_preserved_hash_table hash table.
Diffstat (limited to 'libgo/go/crypto/x509/x509.go')
0 files changed, 0 insertions, 0 deletions