Subzero. Adds a pass for target-specific helper call generation.

This pass gives Targets the ability to pre-lower high-level
instructions that will later be lowered to a target-specific helper,
e.g., 64-bit division on targets that can't natively handle them.

This is a pre-requirement for correct outargs pre-allocation during
function prolog.

R=sehr@chromium.org

Review URL: https://codereview.chromium.org/1455033005 .
diff --git a/src/IceTargetLowering.h b/src/IceTargetLowering.h
index c613d99..5489b8b 100644
--- a/src/IceTargetLowering.h
+++ b/src/IceTargetLowering.h
@@ -170,6 +170,8 @@
     Func->setError("Target doesn't specify O2 lowering steps.");
   }
 
+  /// Generates calls to intrinsics for operations the Target can't handle.
+  void genTargetHelperCalls();
   /// Tries to do address mode optimization on a single instruction.
   void doAddressOpt();
   /// Randomly insert NOPs.
@@ -308,6 +310,8 @@
   virtual void lowerUnreachable(const InstUnreachable *Inst) = 0;
   virtual void lowerOther(const Inst *Instr);
 
+  virtual void genTargetHelperCallFor(Inst *Instr) = 0;
+
   virtual void doAddressOptLoad() {}
   virtual void doAddressOptStore() {}
   virtual void doMockBoundsCheck(Operand *) {}