ART: Introduce predicated vector instructions.

This CL introduces a minimal changes to the IR to support
autovectorization with use of predicated execution of SIMD
instructions (e.g. Arm SVE).

Test: test-art-target, test-art-host.
Change-Id: Ibb7c5520fec6b858fb29f0dde19ec65501831a3a
diff --git a/compiler/optimizing/graph_checker.h b/compiler/optimizing/graph_checker.h
index 564b137..04c8d21 100644
--- a/compiler/optimizing/graph_checker.h
+++ b/compiler/optimizing/graph_checker.h
@@ -26,15 +26,20 @@
 
 namespace art {
 
+class CodeGenerator;
+
 // A control-flow graph visitor performing various checks.
 class GraphChecker : public HGraphDelegateVisitor {
  public:
-  explicit GraphChecker(HGraph* graph, const char* dump_prefix = "art::GraphChecker: ")
+  explicit GraphChecker(HGraph* graph,
+                        CodeGenerator* codegen = nullptr,
+                        const char* dump_prefix = "art::GraphChecker: ")
     : HGraphDelegateVisitor(graph),
       errors_(graph->GetAllocator()->Adapter(kArenaAllocGraphChecker)),
       dump_prefix_(dump_prefix),
       allocator_(graph->GetArenaStack()),
-      seen_ids_(&allocator_, graph->GetCurrentInstructionId(), false, kArenaAllocGraphChecker) {
+      seen_ids_(&allocator_, graph->GetCurrentInstructionId(), false, kArenaAllocGraphChecker),
+      codegen_(codegen) {
     seen_ids_.ClearAllBits();
   }
 
@@ -69,6 +74,8 @@
   void VisitTryBoundary(HTryBoundary* try_boundary) override;
   void VisitTypeConversion(HTypeConversion* instruction) override;
 
+  void VisitVecOperation(HVecOperation* instruction) override;
+
   void CheckTypeCheckBitstringInput(HTypeCheckInstruction* check,
                                     size_t input_pos,
                                     bool check_value,
@@ -125,6 +132,9 @@
   // The default value is true.
   bool check_reference_type_info_ = true;
 
+  // Used to access target information.
+  CodeGenerator* codegen_;
+
   DISALLOW_COPY_AND_ASSIGN(GraphChecker);
 };