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

Unified Diff: src/hydrogen.h

Issue 700963002: Replace C++ bitfields with our own BitFields (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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/hydrogen.h
diff --git a/src/hydrogen.h b/src/hydrogen.h
index 0ff5a45e5911c73eff802404dc12bd33a84d1889..cf01ed0a542394445bb7c8de3b3a02d3772f0bad 100644
--- a/src/hydrogen.h
+++ b/src/hydrogen.h
@@ -76,8 +76,10 @@ class HBasicBlock FINAL : public ZoneObject {
void set_last_instruction_index(int index) {
last_instruction_index_ = index;
}
- bool is_osr_entry() { return is_osr_entry_; }
- void set_osr_entry() { is_osr_entry_ = true; }
+ bool is_osr_entry() const { return IsOsrEntryField::decode(bit_field_); }
+ void set_osr_entry() {
+ bit_field_ = IsOsrEntryField::update(bit_field_, true);
+ }
void AttachLoopInformation();
void DetachLoopInformation();
@@ -130,9 +132,11 @@ class HBasicBlock FINAL : public ZoneObject {
// LeaveInlined
// Simulate (caller's environment)
// Goto (target block)
- bool IsInlineReturnTarget() const { return is_inline_return_target_; }
+ bool IsInlineReturnTarget() const {
+ return IsInlineReturnTargetField::decode(bit_field_);
+ }
void MarkAsInlineReturnTarget(HBasicBlock* inlined_entry_block) {
- is_inline_return_target_ = true;
+ bit_field_ = IsInlineReturnTargetField::update(bit_field_, true);
inlined_entry_block_ = inlined_entry_block;
}
HBasicBlock* inlined_entry_block() { return inlined_entry_block_; }
@@ -142,18 +146,20 @@ class HBasicBlock FINAL : public ZoneObject {
}
void MarkUnreachable();
- bool IsUnreachable() const { return !is_reachable_; }
- bool IsReachable() const { return is_reachable_; }
+ bool IsUnreachable() const { return !IsReachable(); }
+ bool IsReachable() const { return IsReachableField::decode(bit_field_); }
bool IsLoopSuccessorDominator() const {
- return dominates_loop_successors_;
+ return DominatesLoopSuccessorsField::decode(bit_field_);
}
void MarkAsLoopSuccessorDominator() {
- dominates_loop_successors_ = true;
+ bit_field_ = DominatesLoopSuccessorsField::update(bit_field_, true);
}
- bool IsOrdered() const { return is_ordered_; }
- void MarkAsOrdered() { is_ordered_ = true; }
+ bool IsOrdered() const { return IsOrderedField::decode(bit_field_); }
+ void MarkAsOrdered() {
+ bit_field_ = IsOrderedField::update(bit_field_, true);
+ }
void MarkSuccEdgeUnreachable(int succ);
@@ -187,6 +193,12 @@ class HBasicBlock FINAL : public ZoneObject {
void RegisterPredecessor(HBasicBlock* pred);
void AddDominatedBlock(HBasicBlock* block);
+ class IsInlineReturnTargetField : public BitField<bool, 0, 1> {};
+ class IsReachableField : public BitField<bool, 1, 1> {};
+ class DominatesLoopSuccessorsField : public BitField<bool, 2, 1> {};
+ class IsOsrEntryField : public BitField<bool, 3, 1> {};
+ class IsOrderedField : public BitField<bool, 4, 1> {};
+
int block_id_;
HGraph* graph_;
ZoneList<HPhi*> phis_;
@@ -207,11 +219,7 @@ class HBasicBlock FINAL : public ZoneObject {
HBasicBlock* parent_loop_header_;
// For blocks marked as inline return target: the block with HEnterInlined.
HBasicBlock* inlined_entry_block_;
- bool is_inline_return_target_ : 1;
- bool is_reachable_ : 1;
- bool dominates_loop_successors_ : 1;
- bool is_osr_entry_ : 1;
- bool is_ordered_ : 1;
+ uint32_t bit_field_;
Sven Panne 2014/11/05 09:11:49 Can we leave this as it is? It's only a sequence o
Jakob Kummerow 2014/11/05 12:13:46 Done. (Though I don't agree with the term "obfusca
};
@@ -1482,7 +1490,7 @@ class HGraphBuilder {
HIfContinuation* continuation);
~IfBuilder() {
- if (!finished_) End();
+ if (!finished()) End();
}
void Initialize(HGraphBuilder* builder);
@@ -1657,16 +1665,55 @@ class HGraphBuilder {
MergeAtJoinBlock* next_;
};
+ class FinishedField : public BitField<bool, 0, 1> {};
+ class DidThenField : public BitField<bool, 1, 1> {};
+ class DidElseField : public BitField<bool, 2, 1> {};
+ class DidElseIfField : public BitField<bool, 3, 1> {};
+ class DidAndField : public BitField<bool, 4, 1> {};
+ class DidOrField : public BitField<bool, 5, 1> {};
+ class CapturedField : public BitField<bool, 6, 1> {};
+ class NeedsCompareField : public BitField<bool, 7, 1> {};
+ class PendingMergeBlockField : public BitField<bool, 8, 1> {};
+
+ bool finished() const { return FinishedField::decode(bit_field_); }
+ void set_finished() {
+ bit_field_ = FinishedField::update(bit_field_, true);
+ }
+ bool did_then() const { return DidThenField::decode(bit_field_); }
+ void set_did_then(bool b) {
+ bit_field_ = DidThenField::update(bit_field_, b);
+ }
+ bool did_else() const { return DidElseField::decode(bit_field_); }
+ void set_did_else(bool b) {
+ bit_field_ = DidElseField::update(bit_field_, b);
+ }
+ bool did_else_if() const { return DidElseIfField::decode(bit_field_); }
+ void set_did_else_if(bool b) {
+ bit_field_ = DidElseIfField::update(bit_field_, b);
+ }
+ bool did_and() const { return DidAndField::decode(bit_field_); }
+ void set_did_and(bool b) {
+ bit_field_ = DidAndField::update(bit_field_, b);
+ }
+ bool did_or() const { return DidOrField::decode(bit_field_); }
+ void set_did_or(bool b) { bit_field_ = DidOrField::update(bit_field_, b); }
+ bool captured() const { return CapturedField::decode(bit_field_); }
+ void set_captured() {
+ bit_field_ = CapturedField::update(bit_field_, true);
+ }
+ bool needs_compare() const { return NeedsCompareField::decode(bit_field_); }
+ void set_needs_compare(bool b) {
+ bit_field_ = NeedsCompareField::update(bit_field_, b);
+ }
+ bool pending_merge_block() const {
+ return PendingMergeBlockField::decode(bit_field_);
+ }
+ void set_pending_merge_block(bool b) {
+ bit_field_ = PendingMergeBlockField::update(bit_field_, b);
+ }
+
HGraphBuilder* builder_;
- bool finished_ : 1;
- bool did_then_ : 1;
- bool did_else_ : 1;
- bool did_else_if_ : 1;
- bool did_and_ : 1;
- bool did_or_ : 1;
- bool captured_ : 1;
- bool needs_compare_ : 1;
- bool pending_merge_block_ : 1;
+ uint32_t bit_field_;
Sven Panne 2014/11/05 09:11:49 Same here: This is obfuscating things, and IfBuild
Jakob Kummerow 2014/11/05 12:13:46 Done.
HBasicBlock* first_true_block_;
HBasicBlock* first_false_block_;
HBasicBlock* split_edge_merge_block_;

Powered by Google App Engine
This is Rietveld 408576698