Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: src/IceInstX86Base.h

Issue 1257283004: Iasm and obj lowering for advanced switch lowering. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/IceInstX86Base.h
diff --git a/src/IceInstX86Base.h b/src/IceInstX86Base.h
index a4830eff673f5b2255e65af9a3d27d89e4eb172f..e1d89f40e5a86a68dc593b5f3a2ca98287e728af 100644
--- a/src/IceInstX86Base.h
+++ b/src/IceInstX86Base.h
@@ -294,47 +294,53 @@ template <class Machine> class InstX86Br final : public InstX86Base<Machine> {
InstX86Br &operator=(const InstX86Br &) = delete;
public:
+ enum BrKind { Near, Far };
+
/// Create a conditional branch to a node.
static InstX86Br *
create(Cfg *Func, CfgNode *TargetTrue, CfgNode *TargetFalse,
- typename InstX86Base<Machine>::Traits::Cond::BrCond Condition) {
+ typename InstX86Base<Machine>::Traits::Cond::BrCond Condition,
+ BrKind Kind) {
assert(Condition != InstX86Base<Machine>::Traits::Cond::Br_None);
const InstX86Label<Machine> *NoLabel = nullptr;
return new (Func->allocate<InstX86Br>())
- InstX86Br(Func, TargetTrue, TargetFalse, NoLabel, Condition);
+ InstX86Br(Func, TargetTrue, TargetFalse, NoLabel, Condition, Kind);
}
/// Create an unconditional branch to a node.
- static InstX86Br *create(Cfg *Func, CfgNode *Target) {
+ static InstX86Br *create(Cfg *Func, CfgNode *Target, BrKind Kind) {
const CfgNode *NoCondTarget = nullptr;
const InstX86Label<Machine> *NoLabel = nullptr;
return new (Func->allocate<InstX86Br>())
InstX86Br(Func, NoCondTarget, Target, NoLabel,
- InstX86Base<Machine>::Traits::Cond::Br_None);
+ InstX86Base<Machine>::Traits::Cond::Br_None, Kind);
}
/// 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 InstX86Br *
create(Cfg *Func, CfgNode *Target,
- typename InstX86Base<Machine>::Traits::Cond::BrCond Condition) {
+ typename InstX86Base<Machine>::Traits::Cond::BrCond Condition,
+ BrKind Kind) {
assert(Condition != InstX86Base<Machine>::Traits::Cond::Br_None);
const CfgNode *NoUncondTarget = nullptr;
const InstX86Label<Machine> *NoLabel = nullptr;
return new (Func->allocate<InstX86Br>())
- InstX86Br(Func, Target, NoUncondTarget, NoLabel, Condition);
+ InstX86Br(Func, Target, NoUncondTarget, NoLabel, Condition, Kind);
}
/// Create a conditional intra-block branch (or unconditional, if
/// Condition==Br_None) to a label in the current block.
static InstX86Br *
create(Cfg *Func, InstX86Label<Machine> *Label,
- typename InstX86Base<Machine>::Traits::Cond::BrCond Condition) {
+ typename InstX86Base<Machine>::Traits::Cond::BrCond Condition,
+ BrKind Kind) {
const CfgNode *NoCondTarget = nullptr;
const CfgNode *NoUncondTarget = nullptr;
return new (Func->allocate<InstX86Br>())
- InstX86Br(Func, NoCondTarget, NoUncondTarget, Label, Condition);
+ InstX86Br(Func, NoCondTarget, NoUncondTarget, Label, Condition, Kind);
}
const CfgNode *getTargetTrue() const { return TargetTrue; }
const CfgNode *getTargetFalse() const { return TargetFalse; }
+ bool isNear() const { return Kind == Near; }
bool optimizeBranch(const CfgNode *NextNode);
uint32_t getEmitInstCount() const override {
uint32_t Sum = 0;
@@ -360,12 +366,14 @@ public:
private:
InstX86Br(Cfg *Func, const CfgNode *TargetTrue, const CfgNode *TargetFalse,
const InstX86Label<Machine> *Label,
- typename InstX86Base<Machine>::Traits::Cond::BrCond Condition);
+ typename InstX86Base<Machine>::Traits::Cond::BrCond Condition,
+ BrKind Kind);
typename InstX86Base<Machine>::Traits::Cond::BrCond Condition;
const CfgNode *TargetTrue;
const CfgNode *TargetFalse;
const InstX86Label<Machine> *Label; // Intra-block branch target
+ const BrKind Kind;
Jim Stichnoth 2015/07/30 15:20:23 Consider changing the field name to something more
ascull 2015/07/30 17:29:59 Done.
};
/// Jump to a target outside this function, such as tailcall, nacljump,

Powered by Google App Engine
This is Rietveld 408576698