aco: consider SDWA during value numbering
authorRhys Perry <pendingchaos02@gmail.com>
Fri, 22 May 2020 14:42:39 +0000 (15:42 +0100)
committerMarge Bot <eric+marge@anholt.net>
Thu, 28 May 2020 09:55:58 +0000 (09:55 +0000)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Fixes: 23ac24f5b1fdde73cf8ec1ef6cbe08d73d6776f5
   ('aco: add missing conversion operations for small bitsizes')

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5164>

src/amd/compiler/aco_opt_value_numbering.cpp

index 4ab3d6d56e5540c681d872b3fe4207af3e8e5153..487d158812817d579dc263d5291953942a3d24ba 100644 (file)
@@ -86,6 +86,9 @@ struct InstrHash {
       if (instr->isDPP())
          return hash_murmur_32<DPP_instruction>(instr);
 
+      if (instr->isSDWA())
+         return hash_murmur_32<SDWA_instruction>(instr);
+
       switch (instr->format) {
       case Format::SMEM:
          return hash_murmur_32<SMEM_instruction>(instr);
@@ -199,6 +202,20 @@ struct InstrPred {
                 aDPP->neg[0] == bDPP->neg[0] &&
                 aDPP->neg[1] == bDPP->neg[1];
       }
+      if (a->isSDWA()) {
+         SDWA_instruction* aSDWA = static_cast<SDWA_instruction*>(a);
+         SDWA_instruction* bSDWA = static_cast<SDWA_instruction*>(b);
+         return aSDWA->sel[0] == bSDWA->sel[0] &&
+                aSDWA->sel[1] == bSDWA->sel[1] &&
+                aSDWA->dst_sel == bSDWA->dst_sel &&
+                aSDWA->abs[0] == bSDWA->abs[0] &&
+                aSDWA->abs[1] == bSDWA->abs[1] &&
+                aSDWA->neg[0] == bSDWA->neg[0] &&
+                aSDWA->neg[1] == bSDWA->neg[1] &&
+                aSDWA->dst_preserve == bSDWA->dst_preserve &&
+                aSDWA->clamp == bSDWA->clamp &&
+                aSDWA->omod == bSDWA->omod;
+      }
 
       switch (a->format) {
          case Format::SOPK: {