projects/aports·blob master · refs

607 lines · 37.9 KiB

1On 32-bit platforms:
2
3FAIL: LLVM :: Transforms/MemProfContextDisambiguation/dot.ll (49330 of 58877)
4******************** TEST 'LLVM :: Transforms/MemProfContextDisambiguation/dot.ll' FAILED ********************
5Exit Code: 1
6Command Output (stderr):
7--
8not --crash /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. -memprof-dot-scope=alloc /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S 2>&1 | /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=ERRMISSINGALLOCID # RUN: at line 6
9+ not --crash /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. -memprof-dot-scope=alloc /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S
10+ /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=ERRMISSINGALLOCID
11not --crash /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. -memprof-dot-scope=context /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S 2>&1 | /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=ERRMISSINGCONTEXTID # RUN: at line 13
12+ not --crash /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. -memprof-dot-scope=context /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S
13+ /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=ERRMISSINGCONTEXTID
14not --crash /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. -memprof-dot-alloc-id=0 -memprof-dot-context-id=2 /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S 2>&1 | /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=ERRBOTH # RUN: at line 21
15+ not + /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=ERRBOTH
16--crash /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. -memprof-dot-alloc-id=0 -memprof-dot-context-id=2 /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S
17/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S 2>&1 | /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=IR # RUN: at line 28
18+ /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/opt -passes=memprof-context-disambiguation -supports-hot-cold-new -memprof-export-to-dot -memprof-dot-file-path-prefix=/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp. /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -S
19+ /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll --check-prefix=IR
20cat /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp.ccg.postbuild.dot | /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALL --check-prefix=DOTALLNONE # RUN: at line 31
21+ cat /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/test/Transforms/MemProfContextDisambiguation/Output/dot.ll.tmp.ccg.postbuild.dot
22+ /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/build/bin/FileCheck /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll -check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALL --check-prefix=DOTALLNONE
23/builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll:166:14: error: DOTCOMMON: expected string not found in input
24; DOTCOMMON: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1 2",
25 ^
26<stdin>:1:1: note: scanning from here
27digraph "postbuild" {
28^
29<stdin>:10:2: note: possible intended match here
30 Node0xf0dcdb10 [shape=record,tooltip="N0xfffffffff0dcdb10 ContextIds: 1 3",fillcolor="brown1",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
31 ^
32Input file: <stdin>
33Check file: /builds/alpine/aports/testing/llvm21/src/llvm-project-21.1.0-rc1.src/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll
34-dump-input=help explains the following input dump.
35Input was:
36<<<<<<
37 1: digraph "postbuild" {
38check:166'0 X~~~~~~~~~~~~~~~~~~~~~ error: no match found
39 2: label="postbuild";
40check:166'0 ~~~~~~~~~~~~~~~~~~~~
41 3:
42check:166'0 ~
43 4: Node0xf0dcda20 [shape=record,tooltip="N0xfffffffff0dcda20 ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
44check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 5: Node0xf0dcda70 [shape=record,tooltip="N0xfffffffff0dcda70 ContextIds: 1 2 3 4",fillcolor="mediumorchid1",style="filled",label="{OrigId: 12481870273128938184\n_Z3bazv -\> _Z3barv}"];
46check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47 6: Node0xf0dcda70 -> Node0xf0dcda20[tooltip="ContextIds: 1 2",fillcolor="mediumorchid1",color="mediumorchid1"];
48check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49 7: Node0xf0dcda70 -> Node0xf0dcd400[tooltip="ContextIds: 3 4",fillcolor="mediumorchid1",color="mediumorchid1"];
50check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 8: Node0xf0dcdac0 [shape=record,tooltip="N0xfffffffff0dcdac0 ContextIds: 1 2 3 4",fillcolor="mediumorchid1",style="filled",label="{OrigId: 2732490490862098848\n_Z3foov -\> _Z3bazv}"];
52check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53 9: Node0xf0dcdac0 -> Node0xf0dcda70[tooltip="ContextIds: 1 2 3 4",fillcolor="mediumorchid1",color="mediumorchid1"];
54check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 10: Node0xf0dcdb10 [shape=record,tooltip="N0xfffffffff0dcdb10 ContextIds: 1 3",fillcolor="brown1",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
56check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57check:166'1 ? possible intended match
58 11: Node0xf0dcdb10 -> Node0xf0dcdac0[tooltip="ContextIds: 1 3",fillcolor="brown1",color="brown1"];
59check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 12: Node0xf0dcdb60 [shape=record,tooltip="N0xfffffffff0dcdb60 ContextIds: 2 4",fillcolor="cyan",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
61check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 13: Node0xf0dcdb60 -> Node0xf0dcdac0[tooltip="ContextIds: 2 4",fillcolor="cyan",color="cyan"];
63check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64 14: Node0xf0dcd400 [shape=record,tooltip="N0xfffffffff0dcd400 ContextIds: 3 4",fillcolor="mediumorchid1",style="filled",label="{OrigId: Alloc2\n_Z3barv -\> _Znam}"];
65check:166'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66 15: }
67check:166'0 ~~
68>>>>>>
69---
70From 2f547c132545a6462b00d4e026156b652b73c372 Mon Sep 17 00:00:00 2001
71From: fossdd <[email protected]>
72Date: Sat, 19 Jul 2025 12:01:45 +0200
73Subject: [PATCH] Revert "[MemProf] Add ability to export or highlight only a
74 portion of graph (#128255)"
75
76This reverts commit eb9215739930cdffde4201a9be42a788ea46c63f.
77
78Signed-off-by: fossdd <[email protected]>
79---
80 .../IPO/MemProfContextDisambiguation.cpp | 145 +---------
81 .../MemProfContextDisambiguation/dot.ll | 265 ------------------
82 2 files changed, 13 insertions(+), 397 deletions(-)
83 delete mode 100644 llvm/test/Transforms/MemProfContextDisambiguation/dot.ll
84
85diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
86index 469f43537479..7408da59b5c6 100644
87--- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
88+++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp
89@@ -107,34 +107,6 @@ static cl::opt<bool> ExportToDot("memprof-export-to-dot", cl::init(false),
90 cl::Hidden,
91 cl::desc("Export graph to dot files."));
92
93-// How much of the graph to export to dot.
94-enum DotScope {
95- All, // The full CCG graph.
96- Alloc, // Only contexts for the specified allocation.
97- Context, // Only the specified context.
98-};
99-
100-static cl::opt<DotScope> DotGraphScope(
101- "memprof-dot-scope", cl::desc("Scope of graph to export to dot"),
102- cl::Hidden, cl::init(DotScope::All),
103- cl::values(
104- clEnumValN(DotScope::All, "all", "Export full callsite graph"),
105- clEnumValN(DotScope::Alloc, "alloc",
106- "Export only nodes with contexts feeding given "
107- "-memprof-dot-alloc-id"),
108- clEnumValN(DotScope::Context, "context",
109- "Export only nodes with given -memprof-dot-context-id")));
110-
111-static cl::opt<unsigned>
112- AllocIdForDot("memprof-dot-alloc-id", cl::init(0), cl::Hidden,
113- cl::desc("Id of alloc to export if -memprof-dot-scope=alloc "
114- "or to highlight if -memprof-dot-scope=all"));
115-
116-static cl::opt<unsigned> ContextIdForDot(
117- "memprof-dot-context-id", cl::init(0), cl::Hidden,
118- cl::desc("Id of context to export if -memprof-dot-scope=context or to "
119- "highlight otherwise"));
120-
121 static cl::opt<bool>
122 DumpCCG("memprof-dump-ccg", cl::init(false), cl::Hidden,
123 cl::desc("Dump CallingContextGraph to stdout after each stage."));
124@@ -599,10 +571,6 @@ protected:
125 /// Map from callsite node to the enclosing caller function.
126 std::map<const ContextNode *, const FuncTy *> NodeToCallingFunc;
127
128- // When exporting to dot, and an allocation id is specified, contains the
129- // context ids on that allocation.
130- DenseSet<uint32_t> DotAllocContextIds;
131-
132 private:
133 using EdgeIter = typename std::vector<std::shared_ptr<ContextEdge>>::iterator;
134
135@@ -1394,8 +1362,6 @@ CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::duplicateContextIds(
136 assert(ContextIdToAllocationType.count(OldId));
137 // The new context has the same allocation type as original.
138 ContextIdToAllocationType[LastContextId] = ContextIdToAllocationType[OldId];
139- if (DotAllocContextIds.contains(OldId))
140- DotAllocContextIds.insert(LastContextId);
141 }
142 return NewContextIds;
143 }
144@@ -2161,10 +2127,6 @@ ModuleCallsiteContextGraph::ModuleCallsiteContextGraph(
145 AllocNode, StackContext, CallsiteContext,
146 getMIBAllocType(MIBMD), ContextSizeInfo);
147 }
148- // If exporting the graph to dot and an allocation id of interest was
149- // specified, record all the context ids for this allocation node.
150- if (ExportToDot && AllocNode->OrigStackOrAllocId == AllocIdForDot)
151- DotAllocContextIds = AllocNode->getContextIds();
152 assert(AllocNode->AllocTypes != (uint8_t)AllocationType::None);
153 // Memprof and callsite metadata on memory allocations no longer
154 // needed.
155@@ -2259,10 +2221,6 @@ IndexCallsiteContextGraph::IndexCallsiteContextGraph(
156 ContextSizeInfo);
157 I++;
158 }
159- // If exporting the graph to dot and an allocation id of interest was
160- // specified, record all the context ids for this allocation node.
161- if (ExportToDot && AllocNode->OrigStackOrAllocId == AllocIdForDot)
162- DotAllocContextIds = AllocNode->getContextIds();
163 assert(AllocNode->AllocTypes != (uint8_t)AllocationType::None);
164 // Initialize version 0 on the summary alloc node to the current alloc
165 // type, unless it has both types in which case make it default, so
166@@ -3106,16 +3064,7 @@ struct GraphTraits<const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *> {
167 template <typename DerivedCCG, typename FuncTy, typename CallTy>
168 struct DOTGraphTraits<const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *>
169 : public DefaultDOTGraphTraits {
170- DOTGraphTraits(bool IsSimple = false) : DefaultDOTGraphTraits(IsSimple) {
171- // If the user requested the full graph to be exported, but provided an
172- // allocation id, or if the user gave a context id and requested more than
173- // just a specific context to be exported, note that highlighting is
174- // enabled.
175- DoHighlight =
176- (AllocIdForDot.getNumOccurrences() && DotGraphScope == DotScope::All) ||
177- (ContextIdForDot.getNumOccurrences() &&
178- DotGraphScope != DotScope::Context);
179- }
180+ DOTGraphTraits(bool IsSimple = false) : DefaultDOTGraphTraits(IsSimple) {}
181
182 using GraphType = const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *;
183 using GTraits = GraphTraits<GraphType>;
184@@ -3143,29 +3092,12 @@ struct DOTGraphTraits<const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *>
185 return LabelString;
186 }
187
188- static std::string getNodeAttributes(NodeRef Node, GraphType G) {
189- auto ContextIds = Node->getContextIds();
190- // If highlighting enabled, see if this node contains any of the context ids
191- // of interest. If so, it will use a different color and a larger fontsize
192- // (which makes the node larger as well).
193- bool Highlight = false;
194- if (DoHighlight) {
195- assert(ContextIdForDot.getNumOccurrences() ||
196- AllocIdForDot.getNumOccurrences());
197- if (ContextIdForDot.getNumOccurrences())
198- Highlight = ContextIds.contains(ContextIdForDot);
199- else
200- Highlight = set_intersects(ContextIds, G->DotAllocContextIds);
201- }
202+ static std::string getNodeAttributes(NodeRef Node, GraphType) {
203 std::string AttributeString = (Twine("tooltip=\"") + getNodeId(Node) + " " +
204- getContextIds(ContextIds) + "\"")
205+ getContextIds(Node->getContextIds()) + "\"")
206 .str();
207- // Default fontsize is 14
208- if (Highlight)
209- AttributeString += ",fontsize=\"30\"";
210 AttributeString +=
211- (Twine(",fillcolor=\"") + getColor(Node->AllocTypes, Highlight) + "\"")
212- .str();
213+ (Twine(",fillcolor=\"") + getColor(Node->AllocTypes) + "\"").str();
214 if (Node->CloneOf) {
215 AttributeString += ",color=\"blue\"";
216 AttributeString += ",style=\"filled,bold,dashed\"";
217@@ -3175,22 +3107,9 @@ struct DOTGraphTraits<const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *>
218 }
219
220 static std::string getEdgeAttributes(NodeRef, ChildIteratorType ChildIter,
221- GraphType G) {
222+ GraphType) {
223 auto &Edge = *(ChildIter.getCurrent());
224- // If highlighting enabled, see if this edge contains any of the context ids
225- // of interest. If so, it will use a different color and a heavier arrow
226- // size and weight (the larger weight makes the highlighted path
227- // straighter).
228- bool Highlight = false;
229- if (DoHighlight) {
230- assert(ContextIdForDot.getNumOccurrences() ||
231- AllocIdForDot.getNumOccurrences());
232- if (ContextIdForDot.getNumOccurrences())
233- Highlight = Edge->ContextIds.contains(ContextIdForDot);
234- else
235- Highlight = set_intersects(Edge->ContextIds, G->DotAllocContextIds);
236- }
237- auto Color = getColor(Edge->AllocTypes, Highlight);
238+ auto Color = getColor(Edge->AllocTypes);
239 std::string AttributeString =
240 (Twine("tooltip=\"") + getContextIds(Edge->ContextIds) + "\"" +
241 // fillcolor is the arrow head and color is the line
242@@ -3199,24 +3118,13 @@ struct DOTGraphTraits<const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *>
243 .str();
244 if (Edge->IsBackedge)
245 AttributeString += ",style=\"dotted\"";
246- // Default penwidth and weight are both 1.
247- if (Highlight)
248- AttributeString += ",penwidth=\"2.0\",weight=\"2\"";
249 return AttributeString;
250 }
251
252 // Since the NodeOwners list includes nodes that are no longer connected to
253 // the graph, skip them here.
254- static bool isNodeHidden(NodeRef Node, GraphType G) {
255- if (Node->isRemoved())
256- return true;
257- // If a scope smaller than the full graph was requested, see if this node
258- // contains any of the context ids of interest.
259- if (DotGraphScope == DotScope::Alloc)
260- return !set_intersects(Node->getContextIds(), G->DotAllocContextIds);
261- if (DotGraphScope == DotScope::Context)
262- return !Node->getContextIds().contains(ContextIdForDot);
263- return false;
264+ static bool isNodeHidden(NodeRef Node, GraphType) {
265+ return Node->isRemoved();
266 }
267
268 private:
269@@ -3233,20 +3141,16 @@ private:
270 return IdString;
271 }
272
273- static std::string getColor(uint8_t AllocTypes, bool Highlight) {
274- // If DoHighlight is not enabled, we want to use the highlight colors for
275- // NotCold and Cold, and the non-highlight color for NotCold+Cold. This is
276- // both compatible with the color scheme before highlighting was supported,
277- // and for the NotCold+Cold color the non-highlight color is a bit more
278- // readable.
279+ static std::string getColor(uint8_t AllocTypes) {
280 if (AllocTypes == (uint8_t)AllocationType::NotCold)
281 // Color "brown1" actually looks like a lighter red.
282- return !DoHighlight || Highlight ? "brown1" : "lightpink";
283+ return "brown1";
284 if (AllocTypes == (uint8_t)AllocationType::Cold)
285- return !DoHighlight || Highlight ? "cyan" : "lightskyblue";
286+ return "cyan";
287 if (AllocTypes ==
288 ((uint8_t)AllocationType::NotCold | (uint8_t)AllocationType::Cold))
289- return Highlight ? "magenta" : "mediumorchid1";
290+ // Lighter purple.
291+ return "mediumorchid1";
292 return "gray";
293 }
294
295@@ -3256,17 +3160,8 @@ private:
296 std::string Result = SStream.str();
297 return Result;
298 }
299-
300- // True if we should highlight a specific context or allocation's contexts in
301- // the emitted graph.
302- static bool DoHighlight;
303 };
304
305-template <typename DerivedCCG, typename FuncTy, typename CallTy>
306-bool DOTGraphTraits<
307- const CallsiteContextGraph<DerivedCCG, FuncTy, CallTy> *>::DoHighlight =
308- false;
309-
310 template <typename DerivedCCG, typename FuncTy, typename CallTy>
311 void CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::exportToDot(
312 std::string Label) const {
313@@ -5707,20 +5602,6 @@ bool MemProfContextDisambiguation::processModule(
314 MemProfContextDisambiguation::MemProfContextDisambiguation(
315 const ModuleSummaryIndex *Summary, bool isSamplePGO)
316 : ImportSummary(Summary), isSamplePGO(isSamplePGO) {
317- // Check the dot graph printing options once here, to make sure we have valid
318- // and expected combinations.
319- if (DotGraphScope == DotScope::Alloc && !AllocIdForDot.getNumOccurrences())
320- llvm::report_fatal_error(
321- "-memprof-dot-scope=alloc requires -memprof-dot-alloc-id");
322- if (DotGraphScope == DotScope::Context &&
323- !ContextIdForDot.getNumOccurrences())
324- llvm::report_fatal_error(
325- "-memprof-dot-scope=context requires -memprof-dot-context-id");
326- if (DotGraphScope == DotScope::All && AllocIdForDot.getNumOccurrences() &&
327- ContextIdForDot.getNumOccurrences())
328- llvm::report_fatal_error(
329- "-memprof-dot-scope=all can't have both -memprof-dot-alloc-id and "
330- "-memprof-dot-context-id");
331 if (ImportSummary) {
332 // The MemProfImportSummary should only be used for testing ThinLTO
333 // distributed backend handling via opt, in which case we don't have a
334diff --git a/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll b/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll
335deleted file mode 100644
336index 6ffe5038afdb..000000000000
337--- a/llvm/test/Transforms/MemProfContextDisambiguation/dot.ll
338+++ /dev/null
339@@ -1,265 +0,0 @@
340-;; Test callsite context graph exporting to dot with various options.
341-;;
342-;; The code is similar to that of basic.ll, but with a second allocation.
343-
344-;; Check expected error if alloc scope requested without an alloc id.
345-; RUN: not --crash opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
346-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
347-; RUN: -memprof-dot-scope=alloc \
348-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=ERRMISSINGALLOCID
349-; ERRMISSINGALLOCID: -memprof-dot-scope=alloc requires -memprof-dot-alloc-id
350-
351-;; Check expected error if context scope requested without a context id.
352-; RUN: not --crash opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
353-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
354-; RUN: -memprof-dot-scope=context \
355-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=ERRMISSINGCONTEXTID
356-; ERRMISSINGCONTEXTID: -memprof-dot-scope=context requires -memprof-dot-context-id
357-
358-;; Check expected error if both alloc and context ids are specified when we are
359-;; exporting the full graph to dot. It is unclear which scope to highlight.
360-; RUN: not --crash opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
361-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
362-; RUN: -memprof-dot-alloc-id=0 -memprof-dot-context-id=2 \
363-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=ERRBOTH
364-; ERRBOTH: -memprof-dot-scope=all can't have both -memprof-dot-alloc-id and -memprof-dot-context-id
365-
366-;; Export full graph (default), without any highlight.
367-; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
368-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
369-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=IR
370-; RUN: cat %t.ccg.postbuild.dot | FileCheck %s -check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALL --check-prefix=DOTALLNONE
371-
372-;; Export full graph (default), with highlight of alloc 0.
373-; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
374-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
375-; RUN: -memprof-dot-alloc-id=0 \
376-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=IR
377-; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALL --check-prefix=DOTALLALLOC0
378-
379-;; Export full graph (default), with highlight of context 1.
380-; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
381-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
382-; RUN: -memprof-dot-context-id=1 \
383-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=IR
384-; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALL --check-prefix=DOTALLCONTEXT1
385-
386-;; Export alloc 0 only, without any highlight.
387-; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
388-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
389-; RUN: -memprof-dot-scope=alloc -memprof-dot-alloc-id=0 \
390-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=IR
391-; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALLOC0NONE
392-
393-;; Export alloc 0 only, with highlight of context 1.
394-; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
395-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
396-; RUN: -memprof-dot-scope=alloc -memprof-dot-alloc-id=0 \
397-; RUN: -memprof-dot-context-id=1 \
398-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=IR
399-; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTCOMMON --check-prefix=DOTALLANDALLOC0 --check-prefix=DOTALLOC0CONTEXT1
400-
401-;; Export context 1 only (which means no highlighting).
402-; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
403-; RUN: -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
404-; RUN: -memprof-dot-scope=context -memprof-dot-context-id=1 \
405-; RUN: %s -S 2>&1 | FileCheck %s --check-prefix=IR
406-; RUN: cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOTCOMMON --check-prefix=DOTCONTEXT1
407-
408-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
409-target triple = "x86_64-unknown-linux-gnu"
410-
411-define i32 @main() #0 {
412-entry:
413- %call = call noundef ptr @_Z3foov(), !callsite !0
414- %call1 = call noundef ptr @_Z3foov(), !callsite !1
415- ret i32 0
416-}
417-
418-; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
419-declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1
420-
421-; Function Attrs: nobuiltin
422-declare void @_ZdaPv() #2
423-
424-define internal ptr @_Z3barv() #3 {
425-entry:
426- %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6, !memprof !2, !callsite !7
427- %call2 = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6, !memprof !13, !callsite !18
428- ret ptr null
429-}
430-
431-declare ptr @_Znam(i64)
432-
433-define internal ptr @_Z3bazv() #4 {
434-entry:
435- %call = call noundef ptr @_Z3barv(), !callsite !8
436- ret ptr null
437-}
438-
439-; Function Attrs: noinline
440-define internal ptr @_Z3foov() #5 {
441-entry:
442- %call = call noundef ptr @_Z3bazv(), !callsite !9
443- ret ptr null
444-}
445-
446-; uselistorder directives
447-uselistorder ptr @_Z3foov, { 1, 0 }
448-
449-attributes #0 = { "tune-cpu"="generic" }
450-attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
451-attributes #2 = { nobuiltin }
452-attributes #3 = { "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" }
453-attributes #4 = { "stack-protector-buffer-size"="8" }
454-attributes #5 = { noinline }
455-attributes #6 = { builtin }
456-
457-!0 = !{i64 8632435727821051414}
458-!1 = !{i64 -3421689549917153178}
459-!2 = !{!3, !5}
460-!3 = !{!4, !"notcold", !10}
461-!4 = !{i64 9086428284934609951, i64 -5964873800580613432, i64 2732490490862098848, i64 8632435727821051414}
462-!5 = !{!6, !"cold", !11, !12}
463-!6 = !{i64 9086428284934609951, i64 -5964873800580613432, i64 2732490490862098848, i64 -3421689549917153178}
464-!7 = !{i64 9086428284934609951}
465-!8 = !{i64 -5964873800580613432}
466-!9 = !{i64 2732490490862098848}
467-!10 = !{i64 123, i64 100}
468-!11 = !{i64 456, i64 200}
469-!12 = !{i64 789, i64 300}
470-!13 = !{!14, !16}
471-!14 = !{!15, !"notcold", !10}
472-!15 = !{i64 123, i64 -5964873800580613432, i64 2732490490862098848, i64 8632435727821051414}
473-!16 = !{!17, !"cold", !11, !12}
474-!17 = !{i64 123, i64 -5964873800580613432, i64 2732490490862098848, i64 -3421689549917153178}
475-!18 = !{i64 123}
476-
477-; IR: define {{.*}} @main
478-;; The first call to foo does not allocate cold memory. It should call the
479-;; original functions, which ultimately call the original allocations decorated
480-;; with a "notcold" attribute.
481-; IR: call {{.*}} @_Z3foov()
482-;; The second call to foo allocates cold memory. It should call cloned functions
483-;; which ultimately call acloned allocations decorated with a "cold" attribute.
484-; IR: call {{.*}} @_Z3foov.memprof.1()
485-; IR: define internal {{.*}} @_Z3barv()
486-; IR: call {{.*}} @_Znam(i64 noundef 10) #[[NOTCOLD:[0-9]+]]
487-; IR: call {{.*}} @_Znam(i64 noundef 10) #[[NOTCOLD]]
488-; IR: define internal {{.*}} @_Z3bazv()
489-; IR: call {{.*}} @_Z3barv()
490-; IR: define internal {{.*}} @_Z3foov()
491-; IR: call {{.*}} @_Z3bazv()
492-; IR: define internal {{.*}} @_Z3barv.memprof.1()
493-; IR: call {{.*}} @_Znam(i64 noundef 10) #[[COLD:[0-9]+]]
494-; IR: call {{.*}} @_Znam(i64 noundef 10) #[[COLD]]
495-; IR: define internal {{.*}} @_Z3bazv.memprof.1()
496-; IR: call {{.*}} @_Z3barv.memprof.1()
497-; IR: define internal {{.*}} @_Z3foov.memprof.1()
498-; IR: call {{.*}} @_Z3bazv.memprof.1()
499-; IR: attributes #[[NOTCOLD]] = { builtin "memprof"="notcold" }
500-; IR: attributes #[[COLD]] = { builtin "memprof"="cold" }
501-
502-
503-;; Check highlighting. Alloc 0 includes context ids 1 and 2.
504-
505-; DOTCOMMON: Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1 2",
506-;; This node is highlighted when dumping the whole graph and specifying
507-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
508-; DOTALLNONE-SAME: fillcolor="mediumorchid1",
509-; DOTALLALLOC0-SAME: fontsize="30",fillcolor="magenta",
510-; DOTALLCONTEXT1-SAME: fontsize="30",fillcolor="magenta",
511-; DOTALLOC0NONE-SAME: fillcolor="mediumorchid1",
512-; DOTALLOC0CONTEXT1-SAME: fontsize="30",fillcolor="magenta",
513-; DOTCONTEXT1-SAME: fillcolor="mediumorchid1",
514-; DOTCOMMON-SAME: style="filled",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
515-
516-; DOTCOMMON: Node[[BAZ:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAZ]] ContextIds: 1 2 3 4",
517-;; This node is highlighted when dumping the whole graph and specifying
518-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
519-; DOTALLNONE-SAME: fillcolor="mediumorchid1",
520-; DOTALLALLOC0-SAME: fontsize="30",fillcolor="magenta",
521-; DOTALLCONTEXT1-SAME: fontsize="30",fillcolor="magenta",
522-; DOTALLOC0NONE-SAME: fillcolor="mediumorchid1",
523-; DOTALLOC0CONTEXT1-SAME: fontsize="30",fillcolor="magenta",
524-; DOTCONTEXT1-SAME: fillcolor="mediumorchid1",
525-; DOTCOMMON-SAME: style="filled",label="{OrigId: 12481870273128938184\n_Z3bazv -\> _Z3barv}"];
526-
527-; DOTCOMMON: Node[[BAZ]] -> Node[[BAR]][tooltip="ContextIds: 1 2",
528-;; This edge is highlighted when dumping the whole graph and specifying
529-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
530-; DOTALLNONE-SAME: fillcolor="mediumorchid1",color="mediumorchid1"];
531-; DOTALLALLOC0-SAME: fillcolor="magenta",color="magenta",penwidth="2.0",weight="2"];
532-; DOTALLCONTEXT1-SAME: fillcolor="magenta",color="magenta",penwidth="2.0",weight="2"];
533-; DOTALLOC0NONE-SAME: fillcolor="mediumorchid1",color="mediumorchid1"];
534-; DOTALLOC0CONTEXT1-SAME: fillcolor="magenta",color="magenta",penwidth="2.0",weight="2"];
535-; DOTCONTEXT1-SAME: fillcolor="mediumorchid1",color="mediumorchid1"];
536-
537-;; This edge is not in alloc 0 or context 0, so only included when exporting
538-;; the whole graph (and never highlighted).
539-; DOTALL: Node[[BAZ]] -> Node[[BAR2:0x[a-z0-9]+]][tooltip="ContextIds: 3 4",fillcolor="mediumorchid1",color="mediumorchid1"];
540-
541-; DOTCOMMON: Node[[FOO:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO]] ContextIds: 1 2 3 4",
542-;; This node is highlighted when dumping the whole graph and specifying
543-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
544-; DOTALLNONE-SAME: fillcolor="mediumorchid1",
545-; DOTALLALLOC0-SAME: fontsize="30",fillcolor="magenta",
546-; DOTALLCONTEXT1-SAME: fontsize="30",fillcolor="magenta",
547-; DOTALLOC0NONE-SAME: fillcolor="mediumorchid1",
548-; DOTALLOC0CONTEXT1-SAME: fontsize="30",fillcolor="magenta",
549-; DOTCONTEXT1-SAME: fillcolor="mediumorchid1",
550-; DOTCOMMON-SAME: style="filled",label="{OrigId: 2732490490862098848\n_Z3foov -\> _Z3bazv}"];
551-
552-; DOTCOMMON: Node[[FOO]] -> Node[[BAZ]][tooltip="ContextIds: 1 2 3 4",
553-;; This edge is highlighted when dumping the whole graph and specifying
554-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
555-; DOTALLNONE-SAME: fillcolor="mediumorchid1",color="mediumorchid1"];
556-; DOTALLALLOC0-SAME: fillcolor="magenta",color="magenta",penwidth="2.0",weight="2"];
557-; DOTALLCONTEXT1-SAME: fillcolor="magenta",color="magenta",penwidth="2.0",weight="2"];
558-; DOTALLOC0NONE-SAME: fillcolor="mediumorchid1",color="mediumorchid1"];
559-; DOTALLOC0CONTEXT1-SAME: fillcolor="magenta",color="magenta",penwidth="2.0",weight="2"];
560-; DOTCONTEXT1-SAME: fillcolor="mediumorchid1",color="mediumorchid1"];
561-
562-; DOTCOMMON: Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1 3",
563-;; This node is highlighted when dumping the whole graph and specifying
564-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
565-;; Note that the highlight color is the same as when there is no highlighting.
566-; DOTALLALLOC0-SAME: fontsize="30",
567-; DOTALLCONTEXT1-SAME: fontsize="30",
568-; DOTALLOC0CONTEXT1-SAME: fontsize="30",
569-; DOTCOMMON-SAME: fillcolor="brown1",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
570-
571-; DOTCOMMON: Node[[MAIN1]] -> Node[[FOO]][tooltip="ContextIds: 1 3",fillcolor="brown1",color="brown1"
572-;; This edge is highlighted when dumping the whole graph and specifying
573-;; alloc 0 or context 1, or if dumping alloc 0 and specifying context 1.
574-; DOTALLNONE-SAME: ];
575-; DOTALLALLOC0-SAME: penwidth="2.0",weight="2"];
576-; DOTALLCONTEXT1-SAME: penwidth="2.0",weight="2"];
577-; DOTALLOC0NONE-SAME: ];
578-; DOTALLOC0CONTEXT1-SAME: penwidth="2.0",weight="2"];
579-; DOTCONTEXT1-SAME: ];
580-
581-; DOTALLANDALLOC0: Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2 4",
582-;; This node is highlighted when dumping the whole graph and specifying
583-;; alloc 0. Note that the unhighlighted color is different when there is any
584-;; highlighting (lightskyblue) vs no highlighting (cyan).
585-; DOTALLNONE-SAME: fillcolor="cyan",
586-; DOTALLALLOC0-SAME: fontsize="30",fillcolor="cyan",
587-; DOTALLCONTEXT1-SAME: fillcolor="lightskyblue",
588-; DOTALLOC0NONE-SAME: fillcolor="cyan",
589-; DOTALLOC0CONTEXT1-SAME: fillcolor="lightskyblue",
590-; DOTALLANDALLOC0-SAME: style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
591-
592-; DOTALLANDALLOC0: Node[[MAIN2]] -> Node[[FOO]][tooltip="ContextIds: 2 4",
593-;; This edge is highlighted when dumping the whole graph and specifying
594-;; alloc 0. Note that the unhighlighted color is different when there is any
595-;; highlighting (lightskyblue) vs no highlighting (cyan).
596-; DOTALLNONE-SAME: fillcolor="cyan",color="cyan"];
597-; DOTALLALLOC0-SAME: fillcolor="cyan",color="cyan",penwidth="2.0",weight="2"];
598-; DOTALLCONTEXT1-SAME: fillcolor="lightskyblue",color="lightskyblue"];
599-; DOTALLOC0NONE-SAME: fillcolor="cyan",color="cyan"];
600-; DOTALLOC0CONTEXT1-SAME: fillcolor="lightskyblue",color="lightskyblue"];
601-
602-;; This edge is not in alloc 0 or context 0, so only included when exporting
603-;; the whole graph (and never highlighted).
604-; DOTALL: Node[[BAR2]] [shape=record,tooltip="N[[BAR2]] ContextIds: 3 4",fillcolor="mediumorchid1",style="filled",label="{OrigId: Alloc2\n_Z3barv -\> _Znam}"];
605--
6062.50.1
607