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 *) {}