mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 15:20:10 +01:00
i965: Don't make instructions with a null dest a barrier to scheduling.
Now that we properly track accumulator dependencies, the scheduler is able to schedule instructions between the mach and mov in the common the integer multiplication pattern: mul acc0, x, y mach null, x, y mov dest, acc0 Since a null destination implies no dependency on the destination, we can also safely schedule instructions (that don't write the accumulator) between the mul and mach. GAINED: 103 LOST: 43 Causes one program to spill (643 -> 1076 instructions). I committed this patch last year (commit42a26cb5) but reverted it (commit0d3f83f4) after inexplicable artifacts in Kerbal Space Program (bug 78648). Tapani reapplied this patch and could not reproduce the bug with current Mesa. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
f02f1af9f7
commit
c638ea3d19
1 changed files with 8 additions and 4 deletions
|
|
@ -879,7 +879,8 @@ fs_instruction_scheduler::calculate_deps()
|
|||
} else if (inst->dst.is_accumulator()) {
|
||||
add_dep(last_accumulator_write, n);
|
||||
last_accumulator_write = n;
|
||||
} else if (inst->dst.file != BAD_FILE) {
|
||||
} else if (inst->dst.file != BAD_FILE &&
|
||||
!inst->dst.is_null()) {
|
||||
add_barrier_deps(n);
|
||||
}
|
||||
|
||||
|
|
@ -1005,7 +1006,8 @@ fs_instruction_scheduler::calculate_deps()
|
|||
}
|
||||
} else if (inst->dst.is_accumulator()) {
|
||||
last_accumulator_write = n;
|
||||
} else if (inst->dst.file != BAD_FILE) {
|
||||
} else if (inst->dst.file != BAD_FILE &&
|
||||
!inst->dst.is_null()) {
|
||||
add_barrier_deps(n);
|
||||
}
|
||||
|
||||
|
|
@ -1112,7 +1114,8 @@ vec4_instruction_scheduler::calculate_deps()
|
|||
} else if (inst->dst.is_accumulator()) {
|
||||
add_dep(last_accumulator_write, n);
|
||||
last_accumulator_write = n;
|
||||
} else if (inst->dst.file != BAD_FILE) {
|
||||
} else if (inst->dst.file != BAD_FILE &&
|
||||
!inst->dst.is_null()) {
|
||||
add_barrier_deps(n);
|
||||
}
|
||||
|
||||
|
|
@ -1199,7 +1202,8 @@ vec4_instruction_scheduler::calculate_deps()
|
|||
last_fixed_grf_write = n;
|
||||
} else if (inst->dst.is_accumulator()) {
|
||||
last_accumulator_write = n;
|
||||
} else if (inst->dst.file != BAD_FILE) {
|
||||
} else if (inst->dst.file != BAD_FILE &&
|
||||
!inst->dst.is_null()) {
|
||||
add_barrier_deps(n);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue