mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
e5657d5298
In the <DisplayString> of PointerIntPair , I cast the pointer to the actual type, so VS can leverage it while visualizing, not unlike the recent change to PointerUnion visualization. In the expansion, the current code is casting to the incorrect type (wrong number of stars), so I fixed that as well. llvm-svn: 263821
170 lines
8.2 KiB
XML
170 lines
8.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Visual Studio 2012 Native Debugging Visualizers for LLVM
|
|
|
|
Put this file into "%USERPROFILE%\Documents\Visual Studio 2012\Visualizers"
|
|
or create a symbolic link so it updates automatically.
|
|
-->
|
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
|
|
|
<Type Name="llvm::SmallVectorImpl<*>">
|
|
<DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>
|
|
<DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{ size={($T1*)EndX - ($T1*)BeginX} }}</DisplayString>
|
|
<Expand>
|
|
<Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>
|
|
<Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>
|
|
<ArrayItems>
|
|
<Size>($T1*)EndX - ($T1*)BeginX</Size>
|
|
<ValuePointer>($T1*)BeginX</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::SmallString<*>">
|
|
<DisplayString>{BeginX,s}</DisplayString>
|
|
<StringView>BeginX,s</StringView>
|
|
<Expand>
|
|
<Item Name="[size]">(char*)EndX - (char*)BeginX</Item>
|
|
<Item Name="[capacity]">(char*)CapacityX - (char*)BeginX</Item>
|
|
<ArrayItems>
|
|
<Size>(char*)EndX - (char*)BeginX</Size>
|
|
<ValuePointer>(char*)BeginX</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::StringRef">
|
|
<DisplayString>{Data,[Length]s}</DisplayString>
|
|
<StringView>Data,[Length]s</StringView>
|
|
<Expand>
|
|
<Item Name="[size]">Length</Item>
|
|
<ArrayItems>
|
|
<Size>Length</Size>
|
|
<ValuePointer>Data</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::PointerIntPair<*,*,*,*>">
|
|
<DisplayString>{IntMask}: {($T1)(Value & PointerBitMask)} [{($T3)((Value >> IntShift) & IntMask)}]</DisplayString>
|
|
<Expand>
|
|
<Item Name="[ptr]">($T1)(Value & PointerBitMask)</Item>
|
|
<Item Name="[int]">($T3)((Value >> IntShift) & IntMask)</Item>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::PointerUnion<*,*>">
|
|
<DisplayString Condition="((Val.Value >> Val.IntShift) & Val.IntMask) == 0">{"$T1", s8b}: {($T1)(Val.Value & Val.PointerBitMask)}</DisplayString>
|
|
<DisplayString Condition="((Val.Value >> Val.IntShift) & Val.IntMask) != 0">{"$T2", s8b}: {($T2)(Val.Value & Val.PointerBitMask)}</DisplayString>
|
|
<Expand>
|
|
<ExpandedItem Condition="((Val.Value >> Val.IntShift) & Val.IntMask) == 0">($T1)(Val.Value & Val.PointerBitMask)</ExpandedItem>
|
|
<ExpandedItem Condition="((Val.Value >> Val.IntShift) & Val.IntMask) != 0">($T2)(Val.Value & Val.PointerBitMask)</ExpandedItem>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::PointerUnion3<*,*,*>">
|
|
<DisplayString Condition="(Val.Val.Value & 2) != 2 && (Val.Val.Value & 1) != 1">{"$T1", s8b}: {($T1)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<DisplayString Condition="(Val.Val.Value & 2) == 2">{"$T2", s8b}: {($T2)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<DisplayString Condition="(Val.Val.Value & 1) == 1">{"$T3", s8b}: {($T3)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<Expand>
|
|
<ExpandedItem Condition="(Val.Val.Value & 2) != 2 && (Val.Val.Value & 1) != 1">($T1)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
<ExpandedItem Condition="(Val.Val.Value & 2) == 2">($T2)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
<ExpandedItem Condition="(Val.Val.Value & 1) == 1">($T3)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::PointerUnion4<*,*,*,*>">
|
|
<DisplayString Condition="(Val.Val.Value & 3) != 3 && (Val.Val.Value & 2) != 2 && (Val.Val.Value & 1) != 1">{"$T1", s8b}: {($T1)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<DisplayString Condition="(Val.Val.Value & 3) != 3 && (Val.Val.Value & 2) == 2">{"$T2", s8b}: {($T2)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<DisplayString Condition="(Val.Val.Value & 3) != 3 && (Val.Val.Value & 1) == 1">{"$T3", s8b}: {($T3)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<DisplayString Condition="(Val.Val.Value & 3) == 3">{"$T4", s8b}: {($T4)((Val.Val.Value >> 2) << 2)}</DisplayString>
|
|
<Expand>
|
|
<ExpandedItem Condition="(Val.Val.Value & 3) != 3 && (Val.Val.Value & 2) != 2 && (Val.Val.Value & 1) != 1">($T1)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
<ExpandedItem Condition="(Val.Val.Value & 3) != 3 && (Val.Val.Value & 2) == 2">($T2)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
<ExpandedItem Condition="(Val.Val.Value & 3) != 3 && (Val.Val.Value & 1) == 1">($T3)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
<ExpandedItem Condition="(Val.Val.Value & 3) == 3">($T4)((Val.Val.Value >> 2) << 2)</ExpandedItem>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::iplist<*,*>">
|
|
<DisplayString Condition="Head == 0">{{ empty }}</DisplayString>
|
|
<DisplayString Condition="Head != 0">{{ head={Head} }}</DisplayString>
|
|
<Expand>
|
|
<LinkedListItems>
|
|
<HeadPointer>Head</HeadPointer>
|
|
<NextPointer>Next</NextPointer>
|
|
<ValueNode>this</ValueNode>
|
|
</LinkedListItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::IntrusiveRefCntPtr<*>">
|
|
<DisplayString Condition="Obj == 0">empty</DisplayString>
|
|
<DisplayString Condition="(Obj != 0) && (Obj->ref_cnt == 1)">RefPtr [1 ref] {*Obj}</DisplayString>
|
|
<DisplayString Condition="(Obj != 0) && (Obj->ref_cnt != 1)">RefPtr [{Obj->ref_cnt} refs] {*Obj}</DisplayString>
|
|
<Expand>
|
|
<Item Condition="Obj != 0" Name="[refs]">Obj->ref_cnt</Item>
|
|
<ExpandedItem Condition="Obj != 0">Obj</ExpandedItem>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::SmallPtrSet<*,*>">
|
|
<DisplayString Condition="CurArray == SmallArray">{{ [Small Mode] size={NumElements}, capacity={CurArraySize} }}</DisplayString>
|
|
<DisplayString Condition="CurArray != SmallArray">{{ [Big Mode] size={NumElements}, capacity={CurArraySize} }}</DisplayString>
|
|
<Expand>
|
|
<Item Name="[size]">NumElements</Item>
|
|
<Item Name="[capacity]">CurArraySize</Item>
|
|
<ArrayItems>
|
|
<Size>CurArraySize</Size>
|
|
<ValuePointer>($T1*)CurArray</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::DenseMap<*,*,*>">
|
|
<DisplayString Condition="NumEntries == 0">empty</DisplayString>
|
|
<DisplayString Condition="NumEntries != 0">{{ size={NumEntries}, buckets={NumBuckets} }}</DisplayString>
|
|
<Expand>
|
|
<Item Name="[size]">NumEntries</Item>
|
|
<Item Name="[buckets]">NumBuckets</Item>
|
|
<ArrayItems>
|
|
<Size>NumBuckets</Size>
|
|
<ValuePointer>Buckets</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::StringMap<*,*>">
|
|
<DisplayString>{{ size={NumItems}, buckets={NumBuckets} }}</DisplayString>
|
|
<Expand>
|
|
<Item Name="[size]">NumItems</Item>
|
|
<Item Name="[buckets]">NumBuckets</Item>
|
|
<ArrayItems>
|
|
<Size>NumBuckets</Size>
|
|
<ValuePointer>(MapEntryTy**)TheTable</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::StringMapEntry<*>">
|
|
<DisplayString Condition="StrLen == 0">empty</DisplayString>
|
|
<DisplayString Condition="StrLen != 0">({this+1,s}, {second})</DisplayString>
|
|
<Expand>
|
|
<Item Name="[key]">this+1,s</Item>
|
|
<Item Name="[value]" Condition="StrLen != 0">second</Item>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="llvm::Triple">
|
|
<DisplayString>{Data}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="llvm::Optional<*>">
|
|
<DisplayString Condition="!hasVal">empty</DisplayString>
|
|
<DisplayString Condition="hasVal">{*(($T1 *)(unsigned char *)storage.buffer)}</DisplayString>
|
|
<Expand>
|
|
<Item Name="[underlying]" Condition="hasVal">*(($T1 *)(unsigned char *)storage.buffer)</Item>
|
|
</Expand>
|
|
</Type>
|
|
</AutoVisualizer>
|