Mesa (master): intel/fs: Properly lower 64-bit MUL on 64-bit-incapable platforms
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jan 22 19:12:48 UTC 2021
Module: Mesa
Branch: master
Commit: 44571c6a68a4dd6b4c13f70b1d30e0e87ec2f2e4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=44571c6a68a4dd6b4c13f70b1d30e0e87ec2f2e4
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Tue Oct 27 02:24:30 2020 -0500
intel/fs: Properly lower 64-bit MUL on 64-bit-incapable platforms
There are two problems this commit solves: First, is that the 64x64 MUL
lowering generates a Q MOV which, because of how late it runs in the
compile pipeline, it never gets removed. Second, it generates 32x32
MULs and we have to run it a second time to lower those.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7329>
---
src/intel/compiler/brw_fs.cpp | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp
index fd466252f41..f9f24d27884 100644
--- a/src/intel/compiler/brw_fs.cpp
+++ b/src/intel/compiler/brw_fs.cpp
@@ -4122,7 +4122,14 @@ fs_visitor::lower_mul_qword_inst(fs_inst *inst, bblock_t *block)
ibld.ADD(subscript(bd, BRW_REGISTER_TYPE_UD, 1),
subscript(bd, BRW_REGISTER_TYPE_UD, 1), ad);
- ibld.MOV(inst->dst, bd);
+ if (devinfo->has_64bit_int) {
+ ibld.MOV(inst->dst, bd);
+ } else {
+ ibld.MOV(subscript(inst->dst, BRW_REGISTER_TYPE_UD, 0),
+ subscript(bd, BRW_REGISTER_TYPE_UD, 0));
+ ibld.MOV(subscript(inst->dst, BRW_REGISTER_TYPE_UD, 1),
+ subscript(bd, BRW_REGISTER_TYPE_UD, 1));
+ }
}
void
@@ -7924,7 +7931,13 @@ fs_visitor::optimize()
}
OPT(opt_combine_constants);
- OPT(lower_integer_multiplication);
+ if (OPT(lower_integer_multiplication)) {
+ /* If lower_integer_multiplication made progress, it may have produced
+ * some 32x32-bit MULs in the process of lowering 64-bit MULs. Run it
+ * one more time to clean those up if they exist.
+ */
+ OPT(lower_integer_multiplication);
+ }
OPT(lower_sub_sat);
if (devinfo->gen <= 5 && OPT(lower_minmax)) {
More information about the mesa-commit
mailing list