intel/mi_builder: allow half GP registers for dereferencing
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Mon, 21 Feb 2022 12:15:14 +0000 (14:15 +0200)
committerMarge Bot <emma+marge@anholt.net>
Wed, 28 Sep 2022 05:38:36 +0000 (05:38 +0000)
Some of the GRL metakernels will generate 64bit value in a register,
then use only half of that as the last operation on that value.

v2: Add comment (Caio)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16970>

src/intel/common/mi_builder.h

index b9a245c..43b54e8 100644 (file)
@@ -208,7 +208,11 @@ static inline uint32_t
 _mi_value_as_gpr(struct mi_value val)
 {
    assert(mi_value_is_gpr(val));
-   assert(val.reg % 8 == 0);
+   /* Some of the GRL metakernels will generate 64bit value in a GP register,
+    * then use only half of that as the last operation on that value. So allow
+    * unref on part of a GP register.
+    */
+   assert(val.reg % 4 == 0);
    return (val.reg - _MI_BUILDER_GPR_BASE) / 8;
 }