diff options
author | Timothy Arceri <[email protected]> | 2019-02-13 15:17:44 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2019-02-14 09:35:32 +1100 |
commit | 0a89c9779a835331dab33dfb852e4b0ab4269de1 (patch) | |
tree | d2914f93e4e87144628bdae63d0e3952bbee9bba /src/compiler/nir | |
parent | 279060cd32dd673c6a5bf302ceac852f51a6c17c (diff) |
nir: prehash instruction in nir_instr_set_add_or_rewrite()
There is no need to hash the instruction twice, especially as we
end up adding it in the majority of cases.
Reviewed-by: Connor Abbott <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler/nir')
-rw-r--r-- | src/compiler/nir/nir_instr_set.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/compiler/nir/nir_instr_set.c b/src/compiler/nir/nir_instr_set.c index 060bd9eee0b..61476c0b03f 100644 --- a/src/compiler/nir/nir_instr_set.c +++ b/src/compiler/nir/nir_instr_set.c @@ -588,10 +588,11 @@ nir_instr_set_add_or_rewrite(struct set *instr_set, nir_instr *instr) if (!instr_can_rewrite(instr)) return false; - struct set_entry *entry = _mesa_set_search(instr_set, instr); - if (entry) { + uint32_t hash = hash_instr(instr); + struct set_entry *e = _mesa_set_search_pre_hashed(instr_set, hash, instr); + if (e) { nir_ssa_def *def = nir_instr_get_dest_ssa_def(instr); - nir_instr *match = (nir_instr *) entry->key; + nir_instr *match = (nir_instr *) e->key; nir_ssa_def *new_def = nir_instr_get_dest_ssa_def(match); /* It's safe to replace an exact instruction with an inexact one as @@ -606,7 +607,7 @@ nir_instr_set_add_or_rewrite(struct set *instr_set, nir_instr *instr) return true; } - _mesa_set_add(instr_set, instr); + _mesa_set_add_pre_hashed(instr_set, hash, instr); return false; } |