spirv-fuzz: Fix bug related to transformation applicability (#3990)

This PR fixes a bug related to the transformation applicability.
When the OpNot case was implemented, its opcode was not
added to the list of supported bit instructions in IsApplicable.
So, the changes made are the following.

- Add OpNot to the list of supported bit instructions.
- Update the tests.
diff --git a/source/fuzz/transformation_add_bit_instruction_synonym.cpp b/source/fuzz/transformation_add_bit_instruction_synonym.cpp
index 9fdc37e..6cdfdfb 100644
--- a/source/fuzz/transformation_add_bit_instruction_synonym.cpp
+++ b/source/fuzz/transformation_add_bit_instruction_synonym.cpp
@@ -46,7 +46,8 @@
   // |instruction| must be defined and must be a supported bit instruction.
   if (!instruction || (instruction->opcode() != SpvOpBitwiseOr &&
                        instruction->opcode() != SpvOpBitwiseXor &&
-                       instruction->opcode() != SpvOpBitwiseAnd)) {
+                       instruction->opcode() != SpvOpBitwiseAnd &&
+                       instruction->opcode() != SpvOpNot)) {
     return false;
   }
 
diff --git a/test/fuzz/transformation_add_bit_instruction_synonym_test.cpp b/test/fuzz/transformation_add_bit_instruction_synonym_test.cpp
index 9760ed3..fa8f7bf 100644
--- a/test/fuzz/transformation_add_bit_instruction_synonym_test.cpp
+++ b/test/fuzz/transformation_add_bit_instruction_synonym_test.cpp
@@ -30,12 +30,12 @@
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %37 "main"
 
-; Types
+          ; Types
           %2 = OpTypeInt 32 0
           %3 = OpTypeVoid
           %4 = OpTypeFunction %3
 
-; Constants
+          ; Constants
           %5 = OpConstant %2 0
           %6 = OpConstant %2 1
           %7 = OpConstant %2 2
@@ -69,10 +69,22 @@
          %35 = OpConstant %2 30
          %36 = OpConstant %2 31
 
-; main function
+         ; main function
          %37 = OpFunction %3 None %4
          %38 = OpLabel
+
+         ; Supported bit instructions
          %39 = OpBitwiseOr %2 %5 %6
+         %40 = OpBitwiseXor %2 %7 %8
+         %41 = OpBitwiseAnd %2 %9 %10
+         %42 = OpNot %2 %11
+
+         ; Not yet supported bit instructions
+         %43 = OpShiftRightLogical %2 %12 %13
+         %44 = OpShiftRightArithmetic %2 %14 %15
+         %45 = OpShiftLeftLogical %2 %16 %17
+         %46 = OpBitReverse %2 %18
+         %47 = OpBitCount %2 %19
                OpReturn
                OpFunctionEnd
   )";
@@ -86,78 +98,94 @@
                                                kConsoleMessageConsumer));
   TransformationContext transformation_context(
       MakeUnique<FactManager>(context.get()), validator_options);
+
   // Tests undefined bit instruction.
   auto transformation = TransformationAddBitInstructionSynonym(
-      40, {41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,
-           54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,
-           67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
-           80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,
-           93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104, 105,
-           106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
-           119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
-           132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
-           145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
-           158, 159, 160, 161, 162, 163, 164, 165, 166, 167});
+      48, {49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
+           62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
+           75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,
+           88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100,
+           101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+           114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
+           127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+           140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+           153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+           166, 167, 168, 169, 170, 171, 172, 173, 174, 175});
   ASSERT_FALSE(
       transformation.IsApplicable(context.get(), transformation_context));
 
   // Tests false bit instruction.
   transformation = TransformationAddBitInstructionSynonym(
-      38, {40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,
-           53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
-           66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,
-           79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
-           92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104,
-           105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
-           118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
-           131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
-           144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
-           157, 158, 159, 160, 161, 162, 163, 164, 165, 166});
+      38, {48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
+           61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,
+           74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
+           87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
+           100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+           113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+           126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+           139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+           152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+           165, 166, 167, 168, 169, 170, 171, 172, 173, 174});
   ASSERT_FALSE(
       transformation.IsApplicable(context.get(), transformation_context));
 
   // Tests the number of fresh ids being different than the necessary.
   transformation = TransformationAddBitInstructionSynonym(
       39,
-      {40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,
-       54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,
-       68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,
-       82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,
-       96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
-       110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
-       124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
-       138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
-       152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165});
+      {48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
+       62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,
+       76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
+       90,  91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103,
+       104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+       118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+       132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+       146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+       160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173});
   ASSERT_FALSE(
       transformation.IsApplicable(context.get(), transformation_context));
 
   // Tests non-fresh ids.
   transformation = TransformationAddBitInstructionSynonym(
-      39, {38,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
-           52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,
-           65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,
-           78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
-           91,  92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103,
-           104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
-           117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
-           130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
-           143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
-           156, 157, 158, 159, 160, 161, 162, 163, 164, 165});
+      40, {47,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
+           61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,
+           74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
+           87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
+           100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+           113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+           126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+           139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+           152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+           165, 166, 167, 168, 169, 170, 171, 172, 173, 174});
   ASSERT_FALSE(
       transformation.IsApplicable(context.get(), transformation_context));
 
-  // Tests applicable transformation.
+  // Tests unsupported transformation.
   transformation = TransformationAddBitInstructionSynonym(
-      39, {40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,
-           53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,
-           66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,
-           79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
-           92,  93,  94,  95,  96,  97,  98,  99,  100, 101, 102, 103, 104,
-           105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
-           118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
-           131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
-           144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
-           157, 158, 159, 160, 161, 162, 163, 164, 165, 166});
+      43, {48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
+           61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,
+           74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
+           87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
+           100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+           113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+           126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+           139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+           152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+           165, 166, 167, 168, 169, 170, 171, 172, 173, 174});
+  ASSERT_FALSE(
+      transformation.IsApplicable(context.get(), transformation_context));
+
+  // Tests supported transformation.
+  transformation = TransformationAddBitInstructionSynonym(
+      41, {48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,
+           61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,
+           74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,
+           87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
+           100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+           113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+           126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+           139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+           152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+           165, 166, 167, 168, 169, 170, 171, 172, 173, 174});
   ASSERT_TRUE(
       transformation.IsApplicable(context.get(), transformation_context));
 }
@@ -238,6 +266,8 @@
            131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
            144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
            157, 158, 159, 160, 161, 162, 163, 164, 165, 166});
+  ASSERT_TRUE(
+      transformation.IsApplicable(context.get(), transformation_context));
   ApplyAndCheckFreshIds(transformation, context.get(), &transformation_context);
   ASSERT_TRUE(transformation_context.GetFactManager()->IsSynonymous(
       MakeDataDescriptor(166, {}), MakeDataDescriptor(39, {})));
@@ -534,6 +564,8 @@
            96,  97,  98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
            110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
            124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134});
+  ASSERT_TRUE(
+      transformation.IsApplicable(context.get(), transformation_context));
   ApplyAndCheckFreshIds(transformation, context.get(), &transformation_context);
   ASSERT_TRUE(transformation_context.GetFactManager()->IsSynonymous(
       MakeDataDescriptor(134, {}), MakeDataDescriptor(39, {})));