Clean up signed/unsigned in vectorizer.

Rationale:
Currently we have some remaining ugliness around signed and unsigned
SIMD operations due to lack of kUint32 and kUint64 in the HIR. By
"softly" introducing these types, ABS/MIN/MAX/HALVING_ADD/SAD_ACCUMULATE
operations can solely rely on the packed data types to distinguish
between signed and unsigned operations. Cleaner, and also allows for
some code removal in the current loop optimizer.

Bug: 72709770

Test: test-art-host test-art-target
Change-Id: I68e4cdfba325f622a7256adbe649735569cab2a3
diff --git a/compiler/optimizing/nodes_vector_test.cc b/compiler/optimizing/nodes_vector_test.cc
index ab9d759..af13449 100644
--- a/compiler/optimizing/nodes_vector_test.cc
+++ b/compiler/optimizing/nodes_vector_test.cc
@@ -282,143 +282,53 @@
   EXPECT_FALSE(v0->Equals(v1));  // no longer equal
 }
 
-TEST_F(NodesVectorTest, VectorSignMattersOnMin) {
-  HVecOperation* p0 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int32_parameter_, DataType::Type::kInt32, 4, kNoDexPc);
-  HVecOperation* p1 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int8_parameter_, DataType::Type::kInt8, 4, kNoDexPc);
-  HVecOperation* p2 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int16_parameter_, DataType::Type::kInt16, 4, kNoDexPc);
-
-  HVecMin* v0 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4, /*is_unsigned*/ true, kNoDexPc);
-  HVecMin* v1 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4, /*is_unsigned*/ false, kNoDexPc);
-  HVecMin* v2 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 2, /*is_unsigned*/ true, kNoDexPc);
-  HVecMin* v3 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p1, p1, DataType::Type::kUint8, 16, /*is_unsigned*/ false, kNoDexPc);
-  HVecMin* v4 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p1, p1, DataType::Type::kInt8, 16, /*is_unsigned*/ false, kNoDexPc);
-  HVecMin* v5 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p2, p2, DataType::Type::kUint16, 8, /*is_unsigned*/ false, kNoDexPc);
-  HVecMin* v6 = new (GetAllocator()) HVecMin(
-      GetAllocator(), p2, p2, DataType::Type::kInt16, 8, /*is_unsigned*/ false, kNoDexPc);
-  HVecMin* min_insns[] = { v0, v1, v2, v3, v4, v5, v6 };
-
-  EXPECT_FALSE(p0->CanBeMoved());
-  EXPECT_FALSE(p1->CanBeMoved());
-  EXPECT_FALSE(p2->CanBeMoved());
-
-  for (HVecMin* min_insn : min_insns) {
-    EXPECT_TRUE(min_insn->CanBeMoved());
-  }
-
-  // Deprecated; IsUnsigned() should be removed with the introduction of Uint32 and Uint64.
-  EXPECT_TRUE(v0->IsUnsigned());
-  EXPECT_FALSE(v1->IsUnsigned());
-  EXPECT_TRUE(v2->IsUnsigned());
-
-  for (HVecMin* min_insn1 : min_insns) {
-    for (HVecMin* min_insn2 : min_insns) {
-      EXPECT_EQ(min_insn1 == min_insn2, min_insn1->Equals(min_insn2));
-    }
-  }
-}
-
-TEST_F(NodesVectorTest, VectorSignMattersOnMax) {
-  HVecOperation* p0 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int32_parameter_, DataType::Type::kInt32, 4, kNoDexPc);
-  HVecOperation* p1 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int8_parameter_, DataType::Type::kInt8, 4, kNoDexPc);
-  HVecOperation* p2 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int16_parameter_, DataType::Type::kInt16, 4, kNoDexPc);
-
-  HVecMax* v0 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4, /*is_unsigned*/ true, kNoDexPc);
-  HVecMax* v1 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4, /*is_unsigned*/ false, kNoDexPc);
-  HVecMax* v2 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 2, /*is_unsigned*/ true, kNoDexPc);
-  HVecMax* v3 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p1, p1, DataType::Type::kUint8, 16, /*is_unsigned*/ false, kNoDexPc);
-  HVecMax* v4 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p1, p1, DataType::Type::kInt8, 16, /*is_unsigned*/ false, kNoDexPc);
-  HVecMax* v5 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p2, p2, DataType::Type::kUint16, 8, /*is_unsigned*/ false, kNoDexPc);
-  HVecMax* v6 = new (GetAllocator()) HVecMax(
-      GetAllocator(), p2, p2, DataType::Type::kInt16, 8, /*is_unsigned*/ false, kNoDexPc);
-  HVecMax* max_insns[] = { v0, v1, v2, v3, v4, v5, v6 };
-
-  EXPECT_FALSE(p0->CanBeMoved());
-  EXPECT_FALSE(p1->CanBeMoved());
-  EXPECT_FALSE(p2->CanBeMoved());
-
-  for (HVecMax* max_insn : max_insns) {
-    EXPECT_TRUE(max_insn->CanBeMoved());
-  }
-
-  // Deprecated; IsUnsigned() should be removed with the introduction of Uint32 and Uint64.
-  EXPECT_TRUE(v0->IsUnsigned());
-  EXPECT_FALSE(v1->IsUnsigned());
-  EXPECT_TRUE(v2->IsUnsigned());
-
-  for (HVecMax* max_insn1 : max_insns) {
-    for (HVecMax* max_insn2 : max_insns) {
-      EXPECT_EQ(max_insn1 == max_insn2, max_insn1->Equals(max_insn2));
-    }
-  }
-}
-
 TEST_F(NodesVectorTest, VectorAttributesMatterOnHalvingAdd) {
+  HVecOperation* u0 = new (GetAllocator())
+      HVecReplicateScalar(GetAllocator(), int32_parameter_, DataType::Type::kUint32, 4, kNoDexPc);
+  HVecOperation* u1 = new (GetAllocator())
+      HVecReplicateScalar(GetAllocator(), int16_parameter_, DataType::Type::kUint16, 8, kNoDexPc);
+  HVecOperation* u2 = new (GetAllocator())
+      HVecReplicateScalar(GetAllocator(), int8_parameter_, DataType::Type::kUint8, 16, kNoDexPc);
+
   HVecOperation* p0 = new (GetAllocator())
       HVecReplicateScalar(GetAllocator(), int32_parameter_, DataType::Type::kInt32, 4, kNoDexPc);
   HVecOperation* p1 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int8_parameter_, DataType::Type::kInt8, 4, kNoDexPc);
+      HVecReplicateScalar(GetAllocator(), int16_parameter_, DataType::Type::kInt16, 8, kNoDexPc);
   HVecOperation* p2 = new (GetAllocator())
-      HVecReplicateScalar(GetAllocator(), int16_parameter_, DataType::Type::kInt16, 4, kNoDexPc);
+      HVecReplicateScalar(GetAllocator(), int8_parameter_, DataType::Type::kInt8, 16, kNoDexPc);
 
   HVecHalvingAdd* v0 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4,
-      /*is_rounded*/ true, /*is_unsigned*/ true, kNoDexPc);
+      GetAllocator(), u0, u0, DataType::Type::kUint32, 4, /*is_rounded*/ true, kNoDexPc);
   HVecHalvingAdd* v1 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4,
-      /*is_rounded*/ false, /*is_unsigned*/ true, kNoDexPc);
+      GetAllocator(), u0, u0, DataType::Type::kUint32, 4, /*is_rounded*/ false, kNoDexPc);
   HVecHalvingAdd* v2 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4,
-      /*is_rounded*/ true, /*is_unsigned*/ false, kNoDexPc);
+      GetAllocator(), p0, p0, DataType::Type::kInt32, 4, /*is_rounded*/ true, kNoDexPc);
   HVecHalvingAdd* v3 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 4,
-      /*is_rounded*/ false, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v4 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p0, p0, DataType::Type::kInt32, 2,
-      /*is_rounded*/ true, /*is_unsigned*/ true, kNoDexPc);
-  HVecHalvingAdd* v5 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p1, p1, DataType::Type::kUint8, 16,
-      /*is_rounded*/ true, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v6 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p1, p1, DataType::Type::kUint8, 16,
-      /*is_rounded*/ false, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v7 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p1, p1, DataType::Type::kInt8, 16,
-      /*is_rounded*/ true, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v8 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p1, p1, DataType::Type::kInt8, 16,
-      /*is_rounded*/ false, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v9 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p2, p2, DataType::Type::kUint16, 8,
-      /*is_rounded*/ true, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v10 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p2, p2, DataType::Type::kUint16, 8,
-      /*is_rounded*/ false, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v11 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p2, p2, DataType::Type::kInt16, 2,
-      /*is_rounded*/ true, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* v12 = new (GetAllocator()) HVecHalvingAdd(
-      GetAllocator(), p2, p2, DataType::Type::kInt16, 2,
-      /*is_rounded*/ false, /*is_unsigned*/ false, kNoDexPc);
-  HVecHalvingAdd* hadd_insns[] = { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 };
+      GetAllocator(), p0, p0, DataType::Type::kInt32, 4, /*is_rounded*/ false, kNoDexPc);
 
+  HVecHalvingAdd* v4 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), u1, u1, DataType::Type::kUint16, 8, /*is_rounded*/ true, kNoDexPc);
+  HVecHalvingAdd* v5 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), u1, u1, DataType::Type::kUint16, 8, /*is_rounded*/ false, kNoDexPc);
+  HVecHalvingAdd* v6 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), p1, p1, DataType::Type::kInt16, 8, /*is_rounded*/ true, kNoDexPc);
+  HVecHalvingAdd* v7 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), p1, p1, DataType::Type::kInt16, 8, /*is_rounded*/ false, kNoDexPc);
+
+  HVecHalvingAdd* v8 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), u2, u2, DataType::Type::kUint8, 16, /*is_rounded*/ true, kNoDexPc);
+  HVecHalvingAdd* v9 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), u2, u2, DataType::Type::kUint8, 16, /*is_rounded*/ false, kNoDexPc);
+  HVecHalvingAdd* v10 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), p2, p2, DataType::Type::kInt8, 16, /*is_rounded*/ true, kNoDexPc);
+  HVecHalvingAdd* v11 = new (GetAllocator()) HVecHalvingAdd(
+      GetAllocator(), p2, p2, DataType::Type::kInt8, 16, /*is_rounded*/ false, kNoDexPc);
+
+  HVecHalvingAdd* hadd_insns[] = { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 };
+
+  EXPECT_FALSE(u0->CanBeMoved());
+  EXPECT_FALSE(u1->CanBeMoved());
+  EXPECT_FALSE(u2->CanBeMoved());
   EXPECT_FALSE(p0->CanBeMoved());
   EXPECT_FALSE(p1->CanBeMoved());
   EXPECT_FALSE(p2->CanBeMoved());
@@ -427,26 +337,18 @@
     EXPECT_TRUE(hadd_insn->CanBeMoved());
   }
 
-  // Deprecated; IsUnsigned() should be removed with the introduction of Uint32 and Uint64.
-  EXPECT_TRUE(v0->IsUnsigned());
-  EXPECT_TRUE(v1->IsUnsigned());
-  EXPECT_TRUE(!v2->IsUnsigned());
-  EXPECT_TRUE(!v3->IsUnsigned());
-  EXPECT_TRUE(v4->IsUnsigned());
-
   EXPECT_TRUE(v0->IsRounded());
   EXPECT_TRUE(!v1->IsRounded());
   EXPECT_TRUE(v2->IsRounded());
   EXPECT_TRUE(!v3->IsRounded());
   EXPECT_TRUE(v4->IsRounded());
-  EXPECT_TRUE(v5->IsRounded());
-  EXPECT_TRUE(!v6->IsRounded());
-  EXPECT_TRUE(v7->IsRounded());
-  EXPECT_TRUE(!v8->IsRounded());
-  EXPECT_TRUE(v9->IsRounded());
-  EXPECT_TRUE(!v10->IsRounded());
-  EXPECT_TRUE(v11->IsRounded());
-  EXPECT_TRUE(!v12->IsRounded());
+  EXPECT_TRUE(!v5->IsRounded());
+  EXPECT_TRUE(v6->IsRounded());
+  EXPECT_TRUE(!v7->IsRounded());
+  EXPECT_TRUE(v8->IsRounded());
+  EXPECT_TRUE(!v9->IsRounded());
+  EXPECT_TRUE(v10->IsRounded());
+  EXPECT_TRUE(!v11->IsRounded());
 
   for (HVecHalvingAdd* hadd_insn1 : hadd_insns) {
     for (HVecHalvingAdd* hadd_insn2 : hadd_insns) {