[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Evan Cheng
evan.cheng at apple.com
Tue Nov 29 18:49:34 PST 2005
Changes in directory llvm/lib/CodeGen/SelectionDAG:
SelectionDAG.cpp updated: 1.217 -> 1.218
---
Log message:
Fixed a bug introduced by my last commit: TargetGlobalValues should key on
GlobalValue * and index pair. Update getGlobalAddress() for symmetry.
---
Diffs of the changes: (+13 -7)
SelectionDAG.cpp | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.217 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.218
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.217 Tue Nov 29 20:04:11 2005
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Nov 29 20:49:21 2005
@@ -283,12 +283,18 @@
Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != 0;
CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = 0;
break;
- case ISD::GlobalAddress:
- Erased = GlobalValues.erase(cast<GlobalAddressSDNode>(N)->getGlobal());
+ case ISD::GlobalAddress: {
+ GlobalAddressSDNode *GN = cast<GlobalAddressSDNode>(N);
+ Erased = GlobalValues.erase(std::make_pair(GN->getGlobal(),
+ GN->getOffset()));
break;
- case ISD::TargetGlobalAddress:
- Erased =TargetGlobalValues.erase(cast<GlobalAddressSDNode>(N)->getGlobal());
+ }
+ case ISD::TargetGlobalAddress: {
+ GlobalAddressSDNode *GN = cast<GlobalAddressSDNode>(N);
+ Erased =TargetGlobalValues.erase(std::make_pair(GN->getGlobal(),
+ GN->getOffset()));
break;
+ }
case ISD::FrameIndex:
Erased = FrameIndices.erase(cast<FrameIndexSDNode>(N)->getIndex());
break;
@@ -491,8 +497,8 @@
SDOperand SelectionDAG::getGlobalAddress(const GlobalValue *GV,
- MVT::ValueType VT) {
- SDNode *&N = GlobalValues[GV];
+ MVT::ValueType VT, int offset) {
+ SDNode *&N = GlobalValues[std::make_pair(GV, offset)];
if (N) return SDOperand(N, 0);
N = new GlobalAddressSDNode(false, GV, VT);
AllNodes.push_back(N);
@@ -501,7 +507,7 @@
SDOperand SelectionDAG::getTargetGlobalAddress(const GlobalValue *GV,
MVT::ValueType VT, int offset) {
- SDNode *&N = TargetGlobalValues[GV];
+ SDNode *&N = TargetGlobalValues[std::make_pair(GV, offset)];
if (N) return SDOperand(N, 0);
N = new GlobalAddressSDNode(true, GV, VT, offset);
AllNodes.push_back(N);
More information about the llvm-commits
mailing list