nir: Add lowering from ibitfield_extract/ubitfield_extract to shifts.
V3D doesn't have opcodes for ibfe/ubfe, so we need to lower similarly to glsl/lower_instructions.cpp. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -1903,7 +1903,10 @@ typedef struct nir_shader_compiler_options {
|
|||||||
bool lower_fsqrt;
|
bool lower_fsqrt;
|
||||||
bool lower_fmod32;
|
bool lower_fmod32;
|
||||||
bool lower_fmod64;
|
bool lower_fmod64;
|
||||||
|
/** Lowers ibitfield_extract/ubitfield_extract to ibfe/ubfe. */
|
||||||
bool lower_bitfield_extract;
|
bool lower_bitfield_extract;
|
||||||
|
/** Lowers ibitfield_extract/ubitfield_extract to bfm, compares, shifts. */
|
||||||
|
bool lower_bitfield_extract_to_shifts;
|
||||||
/** Lowers bitfield_insert to bfi/bfm */
|
/** Lowers bitfield_insert to bfi/bfm */
|
||||||
bool lower_bitfield_insert;
|
bool lower_bitfield_insert;
|
||||||
/** Lowers bitfield_insert to bfm, compares, and shifts. */
|
/** Lowers bitfield_insert to bfm, compares, and shifts. */
|
||||||
|
@@ -539,6 +539,22 @@ optimizations = [
|
|||||||
('ubfe', 'value', 'offset', 'bits')),
|
('ubfe', 'value', 'offset', 'bits')),
|
||||||
'options->lower_bitfield_extract'),
|
'options->lower_bitfield_extract'),
|
||||||
|
|
||||||
|
(('ibitfield_extract', 'value', 'offset', 'bits'),
|
||||||
|
('bcsel', ('ieq', 0, 'bits'),
|
||||||
|
0,
|
||||||
|
('ishr',
|
||||||
|
('ishl', 'value', ('isub', ('isub', 32, 'bits'), 'offset')),
|
||||||
|
('isub', 32, 'bits'))),
|
||||||
|
'options->lower_bitfield_extract_to_shifts'),
|
||||||
|
|
||||||
|
(('ubitfield_extract', 'value', 'offset', 'bits'),
|
||||||
|
('iand',
|
||||||
|
('ushr', 'value', 'offset'),
|
||||||
|
('bcsel', ('ieq', 'bits', 32),
|
||||||
|
0xffffffff,
|
||||||
|
('bfm', 'bits', 0))),
|
||||||
|
'options->lower_bitfield_extract_to_shifts'),
|
||||||
|
|
||||||
(('extract_i8', a, 'b@32'),
|
(('extract_i8', a, 'b@32'),
|
||||||
('ishr', ('ishl', a, ('imul', ('isub', 3, b), 8)), 24),
|
('ishr', ('ishl', a, ('imul', ('isub', 3, b), 8)), 24),
|
||||||
'options->lower_extract_byte'),
|
'options->lower_extract_byte'),
|
||||||
|
Reference in New Issue
Block a user