|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static bool |
|
|
static bool |
|
|
try_constant_propagate(fs_inst *inst, acp_entry *entry) |
|
|
|
|
|
|
|
|
try_constant_propagate(struct brw_context *brw, fs_inst *inst, |
|
|
|
|
|
acp_entry *entry) |
|
|
{ |
|
|
{ |
|
|
bool progress = false; |
|
|
bool progress = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
progress = true; |
|
|
progress = true; |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case SHADER_OPCODE_POW: |
|
|
|
|
|
case SHADER_OPCODE_INT_QUOTIENT: |
|
|
|
|
|
case SHADER_OPCODE_INT_REMAINDER: |
|
|
|
|
|
if (brw->gen < 8) |
|
|
|
|
|
break; |
|
|
|
|
|
/* fallthrough */ |
|
|
case BRW_OPCODE_BFI1: |
|
|
case BRW_OPCODE_BFI1: |
|
|
case BRW_OPCODE_ASR: |
|
|
case BRW_OPCODE_ASR: |
|
|
case BRW_OPCODE_SHL: |
|
|
case BRW_OPCODE_SHL: |
|
|
|
|
|
|
|
|
foreach_list(entry_node, &acp[inst->src[i].reg % ACP_HASH_SIZE]) { |
|
|
foreach_list(entry_node, &acp[inst->src[i].reg % ACP_HASH_SIZE]) { |
|
|
acp_entry *entry = (acp_entry *)entry_node; |
|
|
acp_entry *entry = (acp_entry *)entry_node; |
|
|
|
|
|
|
|
|
if (try_constant_propagate(inst, entry)) |
|
|
|
|
|
|
|
|
if (try_constant_propagate(brw, inst, entry)) |
|
|
progress = true; |
|
|
progress = true; |
|
|
|
|
|
|
|
|
if (try_copy_propagate(inst, i, entry)) |
|
|
if (try_copy_propagate(inst, i, entry)) |