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
|
@ -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…
Reference in New Issue