Index: src/IceOperand.cpp |
diff --git a/src/IceOperand.cpp b/src/IceOperand.cpp |
index 540252b64785faa14f8ffecdbc8ef4689f75cea0..870e7fbaada65f76fe596165d919036b732cc571 100644 |
--- a/src/IceOperand.cpp |
+++ b/src/IceOperand.cpp |
@@ -101,15 +101,21 @@ bool operator==(const RegWeight &A, const RegWeight &B) { |
return !(B < A) && !(A < B); |
} |
-void LiveRange::addSegment(InstNumberT Start, InstNumberT End) { |
- if (!Range.empty()) { |
- // Check for merge opportunity. |
- InstNumberT CurrentEnd = Range.back().second; |
- assert(Start >= CurrentEnd); |
- if (Start == CurrentEnd) { |
- Range.back().second = End; |
- return; |
+void LiveRange::addSegment(InstNumberT Start, InstNumberT End, CfgNode *Node) { |
+ if (!getFlags().getGlobalSplitting()) { |
Jim Stichnoth
2016/07/29 17:04:06
Remove the '!' and reverse the if/then/else branch
manasijm
2016/08/01 22:20:03
Done.
|
+ if (!Range.empty()) { |
+ // Check for merge opportunity. |
+ InstNumberT CurrentEnd = Range.back().second; |
+ assert(Start >= CurrentEnd); |
+ if (Start == CurrentEnd) { |
+ Range.back().second = End; |
+ return; |
+ } |
} |
+ } else { |
+ // Disable merging to make sure a live range 'segment' has a single node. |
Jim Stichnoth
2016/07/29 17:04:06
I think you could still merge if the node is the s
manasijm
2016/08/01 22:20:03
Done.
|
+ assert(NodeMap.find(Start) == NodeMap.end()); |
+ NodeMap[Start] = Node; |
} |
Range.push_back(RangeElementType(Start, End)); |
} |