Index: src/IceOperand.cpp |
diff --git a/src/IceOperand.cpp b/src/IceOperand.cpp |
index 540252b64785faa14f8ffecdbc8ef4689f75cea0..e34415e134aa94c04131f30fe5c3c5bbc491408a 100644 |
--- a/src/IceOperand.cpp |
+++ b/src/IceOperand.cpp |
@@ -101,14 +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().getSplitGlobalVars()) { |
+ // Disable merging to make sure a live range 'segment' has a single node. |
+ // Might be possible to enable when the target segment has the same node. |
+ assert(NodeMap.find(Start) == NodeMap.end()); |
+ NodeMap[Start] = Node; |
+ } else { |
+ if (!Range.empty()) { |
+ // Check for merge opportunity. |
+ InstNumberT CurrentEnd = Range.back().second; |
+ assert(Start >= CurrentEnd); |
+ if (Start == CurrentEnd) { |
+ Range.back().second = End; |
+ return; |
+ } |
} |
} |
Range.push_back(RangeElementType(Start, End)); |