diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp index 818ca3781fc..80c64d126c6 100644 --- a/lib/Analysis/DataStructure/DataStructure.cpp +++ b/lib/Analysis/DataStructure/DataStructure.cpp @@ -599,10 +599,15 @@ DSNodeHandle DSGraph::cloneInto(const DSGraph &G, // Duplicate all of the nodes, populating the node map... Nodes.reserve(FN+G.Nodes.size()); + + // Remove alloca or mod/ref bits as specified... + unsigned clearBits = (CloneFlags & StripAllocaBit ? DSNode::AllocaNode : 0) + | (CloneFlags & StripModRefBits ? (DSNode::Modified | DSNode::Read) : 0); + clearBits |= DSNode::DEAD; // Clear dead flag... for (unsigned i = 0, e = G.Nodes.size(); i != e; ++i) { DSNode *Old = G.Nodes[i]; DSNode *New = new DSNode(*Old); - New->NodeType &= ~DSNode::DEAD; // Clear dead flag... + New->NodeType &= ~clearBits; Nodes.push_back(New); OldNodeMap[Old] = New; } @@ -615,13 +620,6 @@ DSNodeHandle DSGraph::cloneInto(const DSGraph &G, for (unsigned i = FN, e = Nodes.size(); i != e; ++i) Nodes[i]->remapLinks(OldNodeMap); - // Remove alloca markers as specified - if (CloneFlags & (StripAllocaBit | StripModRefBits)) { - unsigned clearBits = (CloneFlags & StripAllocaBit ? DSNode::AllocaNode : 0) - | (CloneFlags & StripModRefBits ? (DSNode::Modified | DSNode::Read) : 0); - maskNodeTypes(~clearBits); - } - // Copy the scalar map... merging all of the global nodes... for (hash_map::const_iterator I = G.ScalarMap.begin(), E = G.ScalarMap.end(); I != E; ++I) {