Index: src/IceInstX8632.h |
diff --git a/src/IceInstX8632.h b/src/IceInstX8632.h |
index f0558db34e35675c7396925388c3eccf1ce3c2a3..09615ce27f375f8b1ec0b21935c81752874e0299 100644 |
--- a/src/IceInstX8632.h |
+++ b/src/IceInstX8632.h |
@@ -225,7 +225,7 @@ public: |
}; |
enum BrCond { |
-#define X(tag, dump, emit) tag, |
+#define X(tag, opp, dump, emit) tag, |
ICEINSTX8632BR_TABLE |
#undef X |
Br_None |
@@ -309,53 +309,62 @@ public: |
// Create a conditional branch to a node. |
static InstX8632Br *create(Cfg *Func, CfgNode *TargetTrue, |
CfgNode *TargetFalse, BrCond Condition) { |
+ const InstX8632Label *NoLabel = NULL; |
return new (Func->allocate<InstX8632Br>()) |
- InstX8632Br(Func, TargetTrue, TargetFalse, NULL, Condition); |
+ InstX8632Br(Func, TargetTrue, TargetFalse, NoLabel, Condition); |
} |
// Create an unconditional branch to a node. |
static InstX8632Br *create(Cfg *Func, CfgNode *Target) { |
+ const CfgNode *NoCondTarget = NULL; |
+ const InstX8632Label *NoLabel = NULL; |
return new (Func->allocate<InstX8632Br>()) |
- InstX8632Br(Func, NULL, Target, NULL, Br_None); |
+ InstX8632Br(Func, NoCondTarget, Target, NoLabel, Br_None); |
} |
// Create a non-terminator conditional branch to a node, with a |
// fallthrough to the next instruction in the current node. This is |
// used for switch lowering. |
static InstX8632Br *create(Cfg *Func, CfgNode *Target, BrCond Condition) { |
+ const CfgNode *NoUncondTarget = NULL; |
+ const InstX8632Label *NoLabel = NULL; |
return new (Func->allocate<InstX8632Br>()) |
- InstX8632Br(Func, Target, NULL, NULL, Condition); |
+ InstX8632Br(Func, Target, NoUncondTarget, NoLabel, Condition); |
} |
// Create a conditional intra-block branch (or unconditional, if |
// Condition==Br_None) to a label in the current block. |
static InstX8632Br *create(Cfg *Func, InstX8632Label *Label, |
BrCond Condition) { |
+ const CfgNode *NoCondTarget = NULL; |
+ const CfgNode *NoUncondTarget = NULL; |
return new (Func->allocate<InstX8632Br>()) |
- InstX8632Br(Func, NULL, NULL, Label, Condition); |
+ InstX8632Br(Func, NoCondTarget, NoUncondTarget, Label, Condition); |
} |
- CfgNode *getTargetTrue() const { return TargetTrue; } |
- CfgNode *getTargetFalse() const { return TargetFalse; } |
+ const CfgNode *getTargetTrue() const { return TargetTrue; } |
+ const CfgNode *getTargetFalse() const { return TargetFalse; } |
+ bool optimizeBranch(const CfgNode *NextNode); |
virtual uint32_t getEmitInstCount() const { |
+ uint32_t Sum = 0; |
if (Label) |
- return 1; |
- if (Condition == Br_None) |
- return 1; |
+ ++Sum; |
+ if (getTargetTrue()) |
+ ++Sum; |
if (getTargetFalse()) |
- return 2; |
- return 1; |
+ ++Sum; |
+ return Sum; |
} |
virtual void emit(const Cfg *Func) const; |
virtual void dump(const Cfg *Func) const; |
static bool classof(const Inst *Inst) { return isClassof(Inst, Br); } |
private: |
- InstX8632Br(Cfg *Func, CfgNode *TargetTrue, CfgNode *TargetFalse, |
- InstX8632Label *Label, BrCond Condition); |
+ InstX8632Br(Cfg *Func, const CfgNode *TargetTrue, const CfgNode *TargetFalse, |
+ const InstX8632Label *Label, BrCond Condition); |
InstX8632Br(const InstX8632Br &) LLVM_DELETED_FUNCTION; |
InstX8632Br &operator=(const InstX8632Br &) LLVM_DELETED_FUNCTION; |
virtual ~InstX8632Br() {} |
BrCond Condition; |
- CfgNode *TargetTrue; |
- CfgNode *TargetFalse; |
- InstX8632Label *Label; // Intra-block branch target |
+ const CfgNode *TargetTrue; |
+ const CfgNode *TargetFalse; |
+ const InstX8632Label *Label; // Intra-block branch target |
}; |
// AdjustStack instruction - subtracts esp by the given amount and |