Index: src/IceInst.h |
diff --git a/src/IceInst.h b/src/IceInst.h |
index 7505924dca1de712549122576cd62eb8d2cb4a35..a04584e2a6f5862bc2adc1842c28884a1a5160e4 100644 |
--- a/src/IceInst.h |
+++ b/src/IceInst.h |
@@ -378,34 +378,40 @@ class InstCall : public InstHighLevel { |
public: |
static InstCall *create(Cfg *Func, SizeT NumArgs, Variable *Dest, |
- Operand *CallTarget, bool HasTailCall) { |
+ Operand *CallTarget, bool HasTailCall, |
+ bool IsTargetHelperCall = false) { |
/// Set HasSideEffects to true so that the call instruction can't be |
/// dead-code eliminated. IntrinsicCalls can override this if the particular |
/// intrinsic is deletable and has no side-effects. |
constexpr bool HasSideEffects = true; |
constexpr InstKind Kind = Inst::Call; |
- return new (Func->allocate<InstCall>()) InstCall( |
- Func, NumArgs, Dest, CallTarget, HasTailCall, HasSideEffects, Kind); |
+ return new (Func->allocate<InstCall>()) |
+ InstCall(Func, NumArgs, Dest, CallTarget, HasTailCall, |
+ IsTargetHelperCall, HasSideEffects, Kind); |
} |
void addArg(Operand *Arg) { addSource(Arg); } |
Operand *getCallTarget() const { return getSrc(0); } |
Operand *getArg(SizeT I) const { return getSrc(I + 1); } |
SizeT getNumArgs() const { return getSrcSize() - 1; } |
bool isTailcall() const { return HasTailCall; } |
+ bool isTargetHelperCall() const { return IsTargetHelperCall; } |
void dump(const Cfg *Func) const override; |
static bool classof(const Inst *Inst) { return Inst->getKind() == Call; } |
Type getReturnType() const; |
protected: |
InstCall(Cfg *Func, SizeT NumArgs, Variable *Dest, Operand *CallTarget, |
- bool HasTailCall, bool HasSideEff, InstKind Kind) |
- : InstHighLevel(Func, Kind, NumArgs + 1, Dest), HasTailCall(HasTailCall) { |
+ bool HasTailCall, bool IsTargetHelperCall, bool HasSideEff, |
+ InstKind Kind) |
+ : InstHighLevel(Func, Kind, NumArgs + 1, Dest), HasTailCall(HasTailCall), |
+ IsTargetHelperCall(IsTargetHelperCall) { |
HasSideEffects = HasSideEff; |
addSource(CallTarget); |
} |
private: |
- bool HasTailCall; |
+ const bool HasTailCall; |
+ const bool IsTargetHelperCall; |
}; |
/// Cast instruction (a.k.a. conversion operation). |
@@ -570,8 +576,8 @@ public: |
private: |
InstIntrinsicCall(Cfg *Func, SizeT NumArgs, Variable *Dest, |
Operand *CallTarget, const Intrinsics::IntrinsicInfo &Info) |
- : InstCall(Func, NumArgs, Dest, CallTarget, false, Info.HasSideEffects, |
- Inst::IntrinsicCall), |
+ : InstCall(Func, NumArgs, Dest, CallTarget, false, false, |
+ Info.HasSideEffects, Inst::IntrinsicCall), |
Info(Info) {} |
const Intrinsics::IntrinsicInfo Info; |