nir: Recognize open-coded extract_u16.

No shader-db changes, but does recognize some extract_u16 which enables
the next patch to optimize some code.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
Matt Turner
2016-02-03 14:28:31 -08:00
parent 76289fbfa8
commit 905ff86198

View File

@@ -163,6 +163,7 @@ optimizations = [
(('ushr', 0, a), 0), (('ushr', 0, a), 0),
(('ushr', a, 0), a), (('ushr', a, 0), a),
(('iand', 0xff, ('ushr', a, 24)), ('ushr', a, 24)), (('iand', 0xff, ('ushr', a, 24)), ('ushr', a, 24)),
(('iand', 0xffff, ('ushr', a, 16)), ('ushr', a, 16)),
# Exponential/logarithmic identities # Exponential/logarithmic identities
(('fexp2', ('flog2', a)), a), # 2^lg2(a) = a (('fexp2', ('flog2', a)), a), # 2^lg2(a) = a
(('flog2', ('fexp2', a)), a), # lg2(2^a) = a (('flog2', ('fexp2', a)), a), # lg2(2^a) = a
@@ -220,6 +221,10 @@ optimizations = [
(('iand', 0xff, ('ushr', a, 8)), ('extract_u8', a, 1), '!options->lower_extract_byte'), (('iand', 0xff, ('ushr', a, 8)), ('extract_u8', a, 1), '!options->lower_extract_byte'),
(('iand', 0xff, a), ('extract_u8', a, 0), '!options->lower_extract_byte'), (('iand', 0xff, a), ('extract_u8', a, 0), '!options->lower_extract_byte'),
# Word extraction
(('ushr', a, 16), ('extract_u16', a, 1), '!options->lower_extract_word'),
(('iand', 0xffff, a), ('extract_u16', a, 0), '!options->lower_extract_word'),
# Subtracts # Subtracts
(('fsub', a, ('fsub', 0.0, b)), ('fadd', a, b)), (('fsub', a, ('fsub', 0.0, b)), ('fadd', a, b)),
(('isub', a, ('isub', 0, b)), ('iadd', a, b)), (('isub', a, ('isub', 0, b)), ('iadd', a, b)),