A port of the Visual Studio 2012 debugger visualizers for common LLVM and clang datat...
[oota-llvm.git] / utils / llvm.natvis
1 <?xml version="1.0" encoding="utf-8"?>\r
2 <!--\r
3 Visual Studio 2012 Native Debugging Visualizers for LLVM\r
4 \r
5 Put this file into "%USERPROFILE%\Documents\Visual Studio 2012\Visualizers"\r
6 or create a symbolic link so it updates automatically.\r
7 -->\r
8 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">\r
9   <Type Name="llvm::SmallVector&lt;*,*&gt;">\r
10     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>\r
11     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{ size={($T1*)EndX - ($T1*)BeginX} }}</DisplayString>\r
12     <Expand>\r
13       <Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>\r
14       <Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>\r
15       <ArrayItems>\r
16         <Size>($T1*)EndX - ($T1*)BeginX</Size>\r
17         <ValuePointer>($T1*)BeginX</ValuePointer>\r
18       </ArrayItems>\r
19     </Expand>\r
20   </Type>\r
21 \r
22   <Type Name="llvm::SmallVectorImpl&lt;*&gt;">\r
23     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>\r
24     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">[{($T1*)EndX - ($T1*)BeginX}]</DisplayString>\r
25     <Expand>\r
26       <Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>\r
27       <Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>\r
28       <ArrayItems>\r
29         <Size>($T1*)EndX - ($T1*)BeginX</Size>\r
30         <ValuePointer>($T1*)BeginX</ValuePointer>\r
31       </ArrayItems>\r
32     </Expand>\r
33   </Type>\r
34 \r
35   <Type Name="llvm::SmallString&lt;*&gt;">\r
36     <DisplayString>{BeginX,s}</DisplayString>\r
37     <StringView>BeginX,s</StringView>\r
38     <Expand>\r
39       <Item Name="[size]">(char*)EndX - (char*)BeginX</Item>\r
40       <Item Name="[capacity]">(char*)CapacityX - (char*)BeginX</Item>\r
41       <ArrayItems>\r
42         <Size>(char*)EndX - (char*)BeginX</Size>\r
43         <ValuePointer>(char*)BeginX</ValuePointer>\r
44       </ArrayItems>\r
45     </Expand>\r
46   </Type>\r
47 \r
48   <Type Name="llvm::StringRef">\r
49     <DisplayString>[{Length}] {Data,s}</DisplayString>\r
50     <StringView>Data,s</StringView>\r
51     <Expand>\r
52       <Item Name="[length]">Length</Item>\r
53       <ArrayItems>\r
54         <Size>Length</Size>\r
55         <ValuePointer>Data</ValuePointer>\r
56       </ArrayItems>\r
57     </Expand>\r
58   </Type>\r
59 \r
60   <Type Name="llvm::PointerIntPair&lt;*,*,*,*&gt;">\r
61     <DisplayString>{Value &amp; PointerBitMask} [{(Value &gt;&gt; IntShift) &amp; IntMask}]</DisplayString>\r
62     <Expand>\r
63       <Item Name="[ptr]">Value &amp; PointerBitMask</Item>\r
64       <Item Name="[int]">(Value &gt;&gt; IntShift) &amp; IntMask</Item>\r
65     </Expand>\r
66   </Type>\r
67 \r
68   <Type Name="llvm::PointerUnion&lt;*,*&gt;">\r
69     <DisplayString Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) == 0">[P1] {($T1)(Val.Value &amp; Val.PointerBitMask)}</DisplayString>\r
70     <DisplayString Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) != 0">[P2] {($T2)(Val.Value &amp; Val.PointerBitMask)}</DisplayString>\r
71     <Expand>\r
72       <Item Name="[ptr]" Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) == 0">($T1)(Val.Value &amp; Val.PointerBitMask)</Item>\r
73       <Item Name="[ptr]" Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) != 0">($T2)(Val.Value &amp; Val.PointerBitMask)</Item>\r
74     </Expand>\r
75   </Type>\r
76 \r
77   <Type Name="llvm::PointerUnion3&lt;*,*,*&gt;">\r
78     <DisplayString Condition="(Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">[P1] {($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
79     <DisplayString Condition="(Val.Val.Value &amp; 2) == 2">[P2] {($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
80     <DisplayString Condition="(Val.Val.Value &amp; 1) == 1">[P3] {($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
81     <Expand>\r
82       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
83       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 2) == 2">($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
84       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 1) == 1">($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
85     </Expand>\r
86   </Type>\r
87 \r
88   <Type Name="llvm::PointerUnion4&lt;*,*,*,*&gt;">\r
89     <DisplayString Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">[P1] {($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
90     <DisplayString Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) == 2">[P2] {($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
91     <DisplayString Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 1) == 1">[P3] {($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
92     <DisplayString Condition="(Val.Val.Value &amp; 3) == 3">[P4] {($T4)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>\r
93     <Expand>\r
94       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
95       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) == 2">($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
96       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 1) == 1">($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
97       <Item Name="[ptr]" Condition="(Val.Val.Value &amp; 3) == 3">($T4)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</Item>\r
98     </Expand>\r
99   </Type>\r
100 \r
101   <Type Name="llvm::iplist&lt;*,*&gt;">\r
102     <DisplayString Condition="Head == 0">{{ empty }}</DisplayString>\r
103     <DisplayString Condition="Head != 0">{{ head={Head} }}</DisplayString>\r
104     <Expand>\r
105       <LinkedListItems>\r
106         <HeadPointer>Head</HeadPointer>\r
107         <NextPointer>Next</NextPointer>\r
108         <ValueNode>this</ValueNode>\r
109       </LinkedListItems>\r
110     </Expand>\r
111   </Type>\r
112 \r
113   <Type Name="llvm::IntrusiveRefCntPtr&lt;*&gt;">\r
114     <DisplayString Condition="Obj == 0">empty</DisplayString>\r
115     <DisplayString Condition="(Obj != 0) &amp;&amp; (Obj-&gt;ref_cnt == 1)">RefPtr [1 ref] {*Obj}</DisplayString>\r
116     <DisplayString Condition="(Obj != 0) &amp;&amp; (Obj-&gt;ref_cnt != 1)">RefPtr [{Obj-&gt;ref_cnt} refs] {*Obj}</DisplayString>\r
117     <Expand>\r
118       <Item Condition="Obj != 0" Name="[refs]">Obj-&gt;ref_cnt</Item>\r
119       <Item Condition="Obj != 0" Name="[ptr]">Obj</Item>\r
120     </Expand>\r
121   </Type>\r
122 \r
123   <Type Name="llvm::OwningPtr&lt;*&gt;">\r
124     <DisplayString Condition="Ptr == 0">empty</DisplayString>\r
125     <DisplayString Condition="Ptr != 0">OwningPtr {*Ptr}</DisplayString>\r
126     <Expand>\r
127       <Item Condition="Ptr != 0" Name="[ptr]">Ptr</Item>\r
128     </Expand>\r
129   </Type>\r
130 \r
131   <Type Name="llvm::SmallPtrSet&lt;*,*&gt;">\r
132     <DisplayString Condition="CurArray == SmallArray">{{ [Small Mode] elements={NumElements}, arraySize={CurArraySize} }}</DisplayString>\r
133     <DisplayString Condition="CurArray != SmallArray">{{ [Big Mode] elements={NumElements}, arraySize={CurArraySize} }}</DisplayString>\r
134     <Expand>\r
135       <Item Name="[NumElements]">NumElements</Item>\r
136       <Item Name="[CurArraySize]">CurArraySize</Item>\r
137       <IndexListItems>\r
138         <Size>CurArraySize + 1</Size>\r
139         <ValueNode>($T1*)&amp;CurArray[$i]</ValueNode>\r
140       </IndexListItems>\r
141     </Expand>\r
142   </Type>\r
143 \r
144   <Type Name="llvm::DenseMap&lt;*,*,*&gt;">\r
145     <DisplayString Condition="NumEntries == 0">empty</DisplayString>\r
146     <DisplayString Condition="NumEntries != 0">{{ entries={NumEntries}, buckets={NumBuckets} }}</DisplayString>\r
147     <Expand>\r
148       <Item Name="[NumEntries]">NumEntries</Item>\r
149       <Item Name="[NumBuckets]">NumBuckets</Item>\r
150       <ArrayItems>\r
151         <Size>NumBuckets</Size>\r
152         <ValuePointer>Buckets</ValuePointer>\r
153       </ArrayItems>\r
154     </Expand>\r
155   </Type>\r
156 \r
157   <Type Name="llvm::StringMap&lt;*,*&gt;">\r
158     <DisplayString>{{ NumBuckets={NumBuckets}, ItemSize={ItemSize} }}</DisplayString>\r
159     <Expand>\r
160       <Item Name="[NumBuckets]">NumBuckets</Item>\r
161       <Item Name="[ItemSize]">ItemSize</Item>\r
162       <IndexListItems>\r
163         <Size>NumBuckets</Size>\r
164         <ValueNode>(llvm::StringMapEntry&lt;$T1&gt;*)TheTable[$i]</ValueNode>\r
165       </IndexListItems>\r
166     </Expand>\r
167   </Type>\r
168 \r
169   <Type Name="llvm::StringMapEntry&lt;*&gt;">\r
170     <DisplayString Condition="StrLen == 0">empty</DisplayString>\r
171     <DisplayString Condition="StrLen != 0">({((llvm::StringMapEntry&lt;$T1&gt;*)this)+1,s}, {second})</DisplayString>\r
172     <Expand>\r
173       <Item Name="[key]">((llvm::StringMapEntry&lt;$T1&gt;*)this)+1,s</Item>\r
174       <Item Name="[value]" Condition="StrLen != 0">second</Item>\r
175     </Expand>\r
176   </Type>\r
177 \r
178   <Type Name="llvm::Triple">\r
179     <DisplayString>{Data}</DisplayString>\r
180   </Type>\r
181 </AutoVisualizer>\r