[llvm] r205254 - [Stackmaps] Update the stackmap format to use 64-bit relocations for the function address and properly align all entries.

Andrew Trick atrick at apple.com
Thu Apr 3 00:15:54 PDT 2014


On Apr 2, 2014, at 6:54 PM, Eric Christopher <echristo at gmail.com> wrote:

> Still seems reasonable to document it somewhere.

Ok. r205515.

I tend to avoid documenting things that are unimplemented, as it’s unlikely the docs will change when they get implemented.

-Andy

> 
> -eric
> 
> On Wed, Apr 2, 2014 at 6:50 PM, Andrew Trick <atrick at apple.com> wrote:
>> 
>> On Mar 31, 2014, at 4:17 PM, Eric Christopher <echristo at gmail.com> wrote:
>> 
>>> Lack of 32-bit support documented anywhere?
>> 
>> I wouldn't say that 32-bit is unsupported. No 32-bit targets have been implemented.
>> 
>> Yes, it would be a waste of space on 32-bit platforms, but there are much bigger wastes of space in the format. There is only one of these per function, which is insignificant.
>> 
>> The format is designed for simplicity under the assumption that the runtime can compress the data however it chooses (this is just a transient record). We tend to use wide fields for parsing simplicity and so we don't need to extend the format in the future.
>> 
>> If some platform wants to optimize the format, there is space in the header that we can use for variants. It just isn't needed now.
>> 
>> -Andy
>> 
>>> On Mon, Mar 31, 2014 at 4:16 PM, Juergen Ributzka <juergen at apple.com> wrote:
>>>> We don't have 32-bit support and we need the full 64-bit address for the large code model.
>>>> 
>>>> On Mar 31, 2014, at 3:58 PM, Eric Christopher <echristo at gmail.com> wrote:
>>>> 
>>>>> Isn't this wasteful on platforms that have 32-bit pointers? I could be
>>>>> missing something I admit.
>>>>> 
>>>>> -eric
>>>>> 
>>>>> On Mon, Mar 31, 2014 at 3:14 PM, Juergen Ributzka <juergen at apple.com> wrote:
>>>>>> Author: ributzka
>>>>>> Date: Mon Mar 31 17:14:04 2014
>>>>>> New Revision: 205254
>>>>>> 
>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=205254&view=rev
>>>>>> Log:
>>>>>> [Stackmaps] Update the stackmap format to use 64-bit relocations for the function address and properly align all entries.
>>>>>> 
>>>>>> This commit updates the stackmap format to version 1 to indicate the
>>>>>> reorganizaion of several fields. This was done in order to align stackmap
>>>>>> entries to their natural alignment and to minimize padding.
>>>>>> 
>>>>>> Fixes <rdar://problem/16005902>
>>>>>> 
>>>>>> Modified:
>>>>>>  llvm/trunk/docs/StackMaps.rst
>>>>>>  llvm/trunk/include/llvm/CodeGen/StackMaps.h
>>>>>>  llvm/trunk/lib/CodeGen/StackMaps.cpp
>>>>>>  llvm/trunk/test/CodeGen/ARM64/anyregcc.ll
>>>>>>  llvm/trunk/test/CodeGen/ARM64/stackmap.ll
>>>>>>  llvm/trunk/test/CodeGen/X86/anyregcc.ll
>>>>>>  llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll
>>>>>>  llvm/trunk/test/CodeGen/X86/stackmap.ll
>>>>>> 
>>>>>> Modified: llvm/trunk/docs/StackMaps.rst
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/StackMaps.rst?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/docs/StackMaps.rst (original)
>>>>>> +++ llvm/trunk/docs/StackMaps.rst Mon Mar 31 17:14:04 2014
>>>>>> @@ -313,17 +313,21 @@ format of this section follows:
>>>>>> 
>>>>>> .. code-block:: none
>>>>>> 
>>>>>> -  uint32 : Reserved (header)
>>>>>> +  Header {
>>>>>> +    uint8  : Stack Map Version (current version is 1)
>>>>>> +    uint8  : Reserved (expected to be 0)
>>>>>> +    uint16 : Reserved (expected to be 0)
>>>>>> +  }
>>>>>> uint32 : NumFunctions
>>>>>> +  uint32 : NumConstants
>>>>>> +  uint32 : NumRecords
>>>>>> StkSizeRecord[NumFunctions] {
>>>>>> -    uint32 : Function Offset
>>>>>> -    uint32 : Stack Size
>>>>>> +    uint64 : Function Address
>>>>>> +    uint64 : Stack Size
>>>>>> }
>>>>>> -  uint32 : NumConstants
>>>>>> Constants[NumConstants] {
>>>>>>   uint64 : LargeConstant
>>>>>> }
>>>>>> -  uint32 : NumRecords
>>>>>> StkMapRecord[NumRecords] {
>>>>>>   uint64 : PatchPoint ID
>>>>>>   uint32 : Instruction Offset
>>>>>> @@ -335,12 +339,14 @@ format of this section follows:
>>>>>>     uint16 : Dwarf RegNum
>>>>>>     int32  : Offset or SmallConstant
>>>>>>   }
>>>>>> +    uint16 : Padding
>>>>>>   uint16 : NumLiveOuts
>>>>>>   LiveOuts[NumLiveOuts]
>>>>>>     uint16 : Dwarf RegNum
>>>>>>     uint8  : Reserved
>>>>>>     uint8  : Size in Bytes
>>>>>>   }
>>>>>> +    uint32 : Padding (only if required to align to 8 byte)
>>>>>> }
>>>>>> 
>>>>>> The first byte of each location encodes a type that indicates how to
>>>>>> 
>>>>>> Modified: llvm/trunk/include/llvm/CodeGen/StackMaps.h
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/StackMaps.h?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/include/llvm/CodeGen/StackMaps.h (original)
>>>>>> +++ llvm/trunk/include/llvm/CodeGen/StackMaps.h Mon Mar 31 17:14:04 2014
>>>>>> @@ -133,7 +133,7 @@ public:
>>>>>> private:
>>>>>> typedef SmallVector<Location, 8> LocationVec;
>>>>>> typedef SmallVector<LiveOutReg, 8> LiveOutVec;
>>>>>> -  typedef MapVector<const MCSymbol *, uint32_t> FnStackSizeMap;
>>>>>> +  typedef MapVector<const MCSymbol *, uint64_t> FnStackSizeMap;
>>>>>> 
>>>>>> struct CallsiteInfo {
>>>>>>   const MCExpr *CSOffsetExpr;
>>>>>> 
>>>>>> Modified: llvm/trunk/lib/CodeGen/StackMaps.cpp
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StackMaps.cpp?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/lib/CodeGen/StackMaps.cpp (original)
>>>>>> +++ llvm/trunk/lib/CodeGen/StackMaps.cpp Mon Mar 31 17:14:04 2014
>>>>>> @@ -225,7 +225,7 @@ void StackMaps::recordStackMapOpers(cons
>>>>>> // Record the stack size of the current function.
>>>>>> const MachineFrameInfo *MFI = AP.MF->getFrameInfo();
>>>>>> FnStackSize[AP.CurrentFnSym] =
>>>>>> -    MFI->hasVarSizedObjects() ? ~0U : MFI->getStackSize();
>>>>>> +    MFI->hasVarSizedObjects() ? UINT64_MAX : MFI->getStackSize();
>>>>>> }
>>>>>> 
>>>>>> void StackMaps::recordStackMap(const MachineInstr &MI) {
>>>>>> @@ -261,15 +261,19 @@ void StackMaps::recordPatchPoint(const M
>>>>>> 
>>>>>> /// serializeToStackMapSection conceptually populates the following fields:
>>>>>> ///
>>>>>> -/// uint32 : Reserved (header)
>>>>>> +/// Header {
>>>>>> +///   uint8  : Stack Map Version (currently 1)
>>>>>> +///   uint8  : Reserved (expected to be 0)
>>>>>> +///   uint16 : Reserved (expected to be 0)
>>>>>> +/// }
>>>>>> /// uint32 : NumFunctions
>>>>>> +/// uint32 : NumConstants
>>>>>> +/// uint32 : NumRecords
>>>>>> /// StkSizeRecord[NumFunctions] {
>>>>>> -///   uint32 : Function Offset
>>>>>> -///   uint32 : Stack Size
>>>>>> +///   uint64 : Function Address
>>>>>> +///   uint64 : Stack Size
>>>>>> /// }
>>>>>> -/// uint32 : NumConstants
>>>>>> /// int64  : Constants[NumConstants]
>>>>>> -/// uint32 : NumRecords
>>>>>> /// StkMapRecord[NumRecords] {
>>>>>> ///   uint64 : PatchPoint ID
>>>>>> ///   uint32 : Instruction Offset
>>>>>> @@ -281,11 +285,14 @@ void StackMaps::recordPatchPoint(const M
>>>>>> ///     uint16 : Dwarf RegNum
>>>>>> ///     int32  : Offset
>>>>>> ///   }
>>>>>> +///   uint16 : Padding
>>>>>> ///   uint16 : NumLiveOuts
>>>>>> -///   LiveOuts[NumLiveOuts]
>>>>>> +///   LiveOuts[NumLiveOuts] {
>>>>>> ///     uint16 : Dwarf RegNum
>>>>>> ///     uint8  : Reserved
>>>>>> ///     uint8  : Size in Bytes
>>>>>> +///   }
>>>>>> +///   uint32 : Padding (only if required to align to 8 byte)
>>>>>> /// }
>>>>>> ///
>>>>>> /// Location Encoding, Type, Value:
>>>>>> @@ -319,32 +326,35 @@ void StackMaps::serializeToStackMapSecti
>>>>>> DEBUG(dbgs() << "********** Stack Map Output **********\n");
>>>>>> 
>>>>>> // Header.
>>>>>> -  AP.OutStreamer.EmitIntValue(0, 4);
>>>>>> +  AP.OutStreamer.EmitIntValue(1, 1); // Version.
>>>>>> +  AP.OutStreamer.EmitIntValue(0, 1); // Reserved.
>>>>>> +  AP.OutStreamer.EmitIntValue(0, 2); // Reserved.
>>>>>> 
>>>>>> // Num functions.
>>>>>> +  DEBUG(dbgs() << WSMP << "#functions = " << FnStackSize.size() << '\n');
>>>>>> AP.OutStreamer.EmitIntValue(FnStackSize.size(), 4);
>>>>>> +  // Num constants.
>>>>>> +  DEBUG(dbgs() << WSMP << "#constants = " << ConstPool.getNumConstants()
>>>>>> +               << '\n');
>>>>>> +  AP.OutStreamer.EmitIntValue(ConstPool.getNumConstants(), 4);
>>>>>> +  // Num callsites.
>>>>>> +  DEBUG(dbgs() << WSMP << "#callsites = " << CSInfos.size() << '\n');
>>>>>> +  AP.OutStreamer.EmitIntValue(CSInfos.size(), 4);
>>>>>> 
>>>>>> -  // Stack size entries.
>>>>>> +  // Function stack size entries.
>>>>>> for (FnStackSizeMap::iterator I = FnStackSize.begin(), E = FnStackSize.end();
>>>>>>      I != E; ++I) {
>>>>>> -    AP.OutStreamer.EmitSymbolValue(I->first, 4);
>>>>>> -    AP.OutStreamer.EmitIntValue(I->second, 4);
>>>>>> +    AP.OutStreamer.EmitSymbolValue(I->first, 8);
>>>>>> +    AP.OutStreamer.EmitIntValue(I->second, 8);
>>>>>> }
>>>>>> 
>>>>>> -  // Num constants.
>>>>>> -  AP.OutStreamer.EmitIntValue(ConstPool.getNumConstants(), 4);
>>>>>> -
>>>>>> // Constant pool entries.
>>>>>> for (unsigned i = 0; i < ConstPool.getNumConstants(); ++i)
>>>>>>   AP.OutStreamer.EmitIntValue(ConstPool.getConstant(i), 8);
>>>>>> 
>>>>>> -  DEBUG(dbgs() << WSMP << "#callsites = " << CSInfos.size() << "\n");
>>>>>> -  AP.OutStreamer.EmitIntValue(CSInfos.size(), 4);
>>>>>> -
>>>>>> +  // Callsite entries.
>>>>>> for (CallsiteInfoList::const_iterator CSII = CSInfos.begin(),
>>>>>> -                                        CSIE = CSInfos.end();
>>>>>> -       CSII != CSIE; ++CSII) {
>>>>>> -
>>>>>> +       CSIE = CSInfos.end(); CSII != CSIE; ++CSII) {
>>>>>>   uint64_t CallsiteID = CSII->ID;
>>>>>>   const LocationVec &CSLocs = CSII->Locations;
>>>>>>   const LiveOutVec &LiveOuts = CSII->LiveOuts;
>>>>>> @@ -360,7 +370,9 @@ void StackMaps::serializeToStackMapSecti
>>>>>>     AP.OutStreamer.EmitValue(CSII->CSOffsetExpr, 4);
>>>>>>     AP.OutStreamer.EmitIntValue(0, 2); // Reserved.
>>>>>>     AP.OutStreamer.EmitIntValue(0, 2); // 0 locations.
>>>>>> +      AP.OutStreamer.EmitIntValue(0, 2); // padding.
>>>>>>     AP.OutStreamer.EmitIntValue(0, 2); // 0 live-out registers.
>>>>>> +      AP.OutStreamer.EmitIntValue(0, 4); // padding.
>>>>>>     continue;
>>>>>>   }
>>>>>> 
>>>>>> @@ -438,6 +450,8 @@ void StackMaps::serializeToStackMapSecti
>>>>>>   DEBUG(dbgs() << WSMP << "  has " << LiveOuts.size()
>>>>>>                << " live-out registers\n");
>>>>>> 
>>>>>> +    // Num live-out registers and padding to align to 4 byte.
>>>>>> +    AP.OutStreamer.EmitIntValue(0, 2);
>>>>>>   AP.OutStreamer.EmitIntValue(LiveOuts.size(), 2);
>>>>>> 
>>>>>>   operIdx = 0;
>>>>>> @@ -452,6 +466,8 @@ void StackMaps::serializeToStackMapSecti
>>>>>>     AP.OutStreamer.EmitIntValue(0, 1);
>>>>>>     AP.OutStreamer.EmitIntValue(LI->Size, 1);
>>>>>>   }
>>>>>> +    // Emit alignment to 8 byte.
>>>>>> +    AP.OutStreamer.EmitValueToAlignment(8);
>>>>>> }
>>>>>> 
>>>>>> AP.OutStreamer.AddBlankLine();
>>>>>> 
>>>>>> Modified: llvm/trunk/test/CodeGen/ARM64/anyregcc.ll
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM64/anyregcc.ll?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/test/CodeGen/ARM64/anyregcc.ll (original)
>>>>>> +++ llvm/trunk/test/CodeGen/ARM64/anyregcc.ll Mon Mar 31 17:14:04 2014
>>>>>> @@ -4,29 +4,34 @@
>>>>>> ; CHECK-LABEL: .section        __LLVM_STACKMAPS,__llvm_stackmaps
>>>>>> ; CHECK-NEXT:  __LLVM_StackMaps:
>>>>>> ; Header
>>>>>> -; CHECK-NEXT:   .long   0
>>>>>> +; CHECK-NEXT:   .byte 1
>>>>>> +; CHECK-NEXT:   .byte 0
>>>>>> +; CHECK-NEXT:   .short 0
>>>>>> ; Num Functions
>>>>>> ; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _test
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _property_access1
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _property_access2
>>>>>> -; CHECK-NEXT:   .long 32
>>>>>> -; CHECK-NEXT:   .long _property_access3
>>>>>> -; CHECK-NEXT:   .long 32
>>>>>> -; CHECK-NEXT:   .long _anyreg_test1
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _anyreg_test2
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _patchpoint_spilldef
>>>>>> -; CHECK-NEXT:   .long 112
>>>>>> -; CHECK-NEXT:   .long _patchpoint_spillargs
>>>>>> -; CHECK-NEXT:   .long 128
>>>>>> -; Num Constants
>>>>>> -; CHECK-NEXT:   .long   0
>>>>>> +; Num LargeConstants
>>>>>> +; CHECK-NEXT:   .long 0
>>>>>> ; Num Callsites
>>>>>> -; CHECK-NEXT:   .long   8
>>>>>> +; CHECK-NEXT:   .long 8
>>>>>> +
>>>>>> +; Functions and stack size
>>>>>> +; CHECK-NEXT:   .quad _test
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _property_access1
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _property_access2
>>>>>> +; CHECK-NEXT:   .quad 32
>>>>>> +; CHECK-NEXT:   .quad _property_access3
>>>>>> +; CHECK-NEXT:   .quad 32
>>>>>> +; CHECK-NEXT:   .quad _anyreg_test1
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _anyreg_test2
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _patchpoint_spilldef
>>>>>> +; CHECK-NEXT:   .quad 112
>>>>>> +; CHECK-NEXT:   .quad _patchpoint_spillargs
>>>>>> +; CHECK-NEXT:   .quad 128
>>>>>> +
>>>>>> 
>>>>>> ; test
>>>>>> ; CHECK-LABEL:  .long   L{{.*}}-_test
>>>>>> 
>>>>>> Modified: llvm/trunk/test/CodeGen/ARM64/stackmap.ll
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM64/stackmap.ll?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/test/CodeGen/ARM64/stackmap.ll (original)
>>>>>> +++ llvm/trunk/test/CodeGen/ARM64/stackmap.ll Mon Mar 31 17:14:04 2014
>>>>>> @@ -8,37 +8,44 @@ target datalayout = "e-m:o-i64:64-f80:12
>>>>>> 
>>>>>> ; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
>>>>>> ; CHECK-NEXT:  __LLVM_StackMaps:
>>>>>> -; CHECK-NEXT:   .long   0
>>>>>> +; Header
>>>>>> +; CHECK-NEXT:   .byte 1
>>>>>> +; CHECK-NEXT:   .byte 0
>>>>>> +; CHECK-NEXT:   .short 0
>>>>>> ; Num Functions
>>>>>> ; CHECK-NEXT:   .long 11
>>>>>> -; CHECK-NEXT:   .long _constantargs
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _osrinline
>>>>>> -; CHECK-NEXT:   .long 32
>>>>>> -; CHECK-NEXT:   .long _osrcold
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _propertyRead
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _propertyWrite
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _jsVoidCall
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _jsIntCall
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _spilledValue
>>>>>> -; CHECK-NEXT:   .long 160
>>>>>> -; CHECK-NEXT:   .long _spilledStackMapValue
>>>>>> -; CHECK-NEXT:   .long 128
>>>>>> -; CHECK-NEXT:   .long _liveConstant
>>>>>> -; CHECK-NEXT:   .long 16
>>>>>> -; CHECK-NEXT:   .long _clobberLR
>>>>>> -; CHECK-NEXT:   .long 112
>>>>>> ; Num LargeConstants
>>>>>> -; CHECK-NEXT:   .long   2
>>>>>> +; CHECK-NEXT:   .long 2
>>>>>> +; Num Callsites
>>>>>> +; CHECK-NEXT:   .long 11
>>>>>> +
>>>>>> +; Functions and stack size
>>>>>> +; CHECK-NEXT:   .quad _constantargs
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _osrinline
>>>>>> +; CHECK-NEXT:   .quad 32
>>>>>> +; CHECK-NEXT:   .quad _osrcold
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _propertyRead
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _propertyWrite
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _jsVoidCall
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _jsIntCall
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _spilledValue
>>>>>> +; CHECK-NEXT:   .quad 160
>>>>>> +; CHECK-NEXT:   .quad _spilledStackMapValue
>>>>>> +; CHECK-NEXT:   .quad 128
>>>>>> +; CHECK-NEXT:   .quad _liveConstant
>>>>>> +; CHECK-NEXT:   .quad 16
>>>>>> +; CHECK-NEXT:   .quad _clobberLR
>>>>>> +; CHECK-NEXT:   .quad 112
>>>>>> +
>>>>>> +; Num LargeConstants
>>>>>> ; CHECK-NEXT:   .quad   4294967295
>>>>>> ; CHECK-NEXT:   .quad   4294967296
>>>>>> -; Num Callsites
>>>>>> -; CHECK-NEXT:   .long   11
>>>>>> 
>>>>>> ; Constant arguments
>>>>>> ;
>>>>>> 
>>>>>> Modified: llvm/trunk/test/CodeGen/X86/anyregcc.ll
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/anyregcc.ll?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/test/CodeGen/X86/anyregcc.ll (original)
>>>>>> +++ llvm/trunk/test/CodeGen/X86/anyregcc.ll Mon Mar 31 17:14:04 2014
>>>>>> @@ -7,30 +7,37 @@
>>>>>> ; CHECK-LABEL:  .section __LLVM_STACKMAPS,__llvm_stackmaps
>>>>>> ; CHECK-NEXT:   __LLVM_StackMaps:
>>>>>> ; Header
>>>>>> -; CHECK-NEXT:   .long 0
>>>>>> +; CHECK-NEXT:   .byte 1
>>>>>> +; CHECK-NEXT:   .byte 0
>>>>>> +; CHECK-NEXT:   .short 0
>>>>>> ; Num Functions
>>>>>> ; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _test
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _property_access1
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _property_access2
>>>>>> -; CHECK-NEXT:   .long 24
>>>>>> -; CHECK-NEXT:   .long _property_access3
>>>>>> -; CHECK-NEXT:   .long 24
>>>>>> -; CHECK-NEXT:   .long _anyreg_test1
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _anyreg_test2
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _patchpoint_spilldef
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _patchpoint_spillargs
>>>>>> -; CHECK-NEXT:   .long 88
>>>>>> ; Num Constants
>>>>>> -; CHECK-NEXT:   .long   0
>>>>>> +; CHECK-NEXT:   .long 0
>>>>>> ; Num Callsites
>>>>>> -; CHECK-NEXT:   .long   8
>>>>>> +; CHECK-NEXT:   .long 8
>>>>>> +
>>>>>> +; Functions and stack size
>>>>>> +; CHECK-NEXT:   .quad _test
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _property_access1
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _property_access2
>>>>>> +; CHECK-NEXT:   .quad 24
>>>>>> +; CHECK-NEXT:   .quad _property_access3
>>>>>> +; CHECK-NEXT:   .quad 24
>>>>>> +; CHECK-NEXT:   .quad _anyreg_test1
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _anyreg_test2
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _patchpoint_spilldef
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _patchpoint_spillargs
>>>>>> +; CHECK-NEXT:   .quad 88
>>>>>> +
>>>>>> +; No constants
>>>>>> 
>>>>>> +; Callsites
>>>>>> ; test
>>>>>> ; CHECK-LABEL:  .long   L{{.*}}-_test
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> 
>>>>>> Modified: llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll (original)
>>>>>> +++ llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll Mon Mar 31 17:14:04 2014
>>>>>> @@ -6,17 +6,23 @@
>>>>>> 
>>>>>> ; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
>>>>>> ; CHECK-NEXT:   __LLVM_StackMaps:
>>>>>> -; CHECK-NEXT:   .long 0
>>>>>> +; Header
>>>>>> +; CHECK-NEXT:   .byte 1
>>>>>> +; CHECK-NEXT:   .byte 0
>>>>>> +; CHECK-NEXT:   .short 0
>>>>>> ; Num Functions
>>>>>> ; CHECK-NEXT:   .long 2
>>>>>> -; CHECK-NEXT:   .long _stackmap_liveness
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _mixed_liveness
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> ; Num LargeConstants
>>>>>> ; CHECK-NEXT:   .long   0
>>>>>> ; Num Callsites
>>>>>> ; CHECK-NEXT:   .long   5
>>>>>> +
>>>>>> +; Functions and stack size
>>>>>> +; CHECK-NEXT:   .quad _stackmap_liveness
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _mixed_liveness
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +
>>>>>> define void @stackmap_liveness() {
>>>>>> entry:
>>>>>> %a1 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind
>>>>>> @@ -24,13 +30,19 @@ entry:
>>>>>> ; CHECK-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; CHECK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; CHECK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 1 (stackmap liveness information enabled)
>>>>>> ; STACK-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; STACK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 2
>>>>>> ; STACK-NEXT:   .short  2
>>>>>> ; LiveOut Entry 1: %RSP (8 bytes)
>>>>>> @@ -41,13 +53,19 @@ entry:
>>>>>> ; STACK-NEXT:   .short  19
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 16
>>>>>> +; Align
>>>>>> +; STACK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 1 (patchpoint liveness information enabled)
>>>>>> ; PATCH-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; PATCH-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; PATCH-NEXT:   .align  3
>>>>>> call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 1, i32 5)
>>>>>> %a2 = call i64 asm sideeffect "", "={r8}"() nounwind
>>>>>> %a3 = call i8 asm sideeffect "", "={ah}"() nounwind
>>>>>> @@ -58,16 +76,22 @@ entry:
>>>>>> ; CHECK-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; CHECK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; CHECK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 2 (stackmap liveness information enabled)
>>>>>> ; STACK-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; STACK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 6
>>>>>> ; STACK-NEXT:   .short  6
>>>>>> -; LiveOut Entry 2: %RAX (1 bytes) --> %AL or %AH
>>>>>> +; LiveOut Entry 1: %RAX (1 bytes) --> %AL or %AH
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 1
>>>>>> @@ -75,29 +99,35 @@ entry:
>>>>>> ; STACK-NEXT:   .short  7
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 8
>>>>>> -; LiveOut Entry 2: %R8 (8 bytes)
>>>>>> +; LiveOut Entry 3: %R8 (8 bytes)
>>>>>> ; STACK-NEXT:   .short  8
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 8
>>>>>> -; LiveOut Entry 2: %YMM0 (32 bytes)
>>>>>> +; LiveOut Entry 4: %YMM0 (32 bytes)
>>>>>> ; STACK-NEXT:   .short  17
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 32
>>>>>> -; LiveOut Entry 2: %YMM1 (32 bytes)
>>>>>> +; LiveOut Entry 5: %YMM1 (32 bytes)
>>>>>> ; STACK-NEXT:   .short  18
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 32
>>>>>> -; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
>>>>>> +; LiveOut Entry 6: %YMM2 (16 bytes) --> %XMM2
>>>>>> ; STACK-NEXT:   .short  19
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 16
>>>>>> +; Align
>>>>>> +; STACK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 2 (patchpoint liveness information enabled)
>>>>>> ; PATCH-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; PATCH-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; PATCH-NEXT:   .align  3
>>>>>> call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 2, i32 5)
>>>>>> call void asm sideeffect "", "{r8},{ah},{ymm0},{ymm1}"(i64 %a2, i8 %a3, <4 x double> %a4, <4 x double> %a5) nounwind
>>>>>> 
>>>>>> @@ -105,16 +135,22 @@ entry:
>>>>>> ; CHECK-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; CHECK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; CHECK-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; CHECK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 3 (stackmap liveness information enabled)
>>>>>> ; STACK-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; STACK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 2
>>>>>> ; STACK-NEXT:   .short  2
>>>>>> -; LiveOut Entry 2: %RSP (8 bytes)
>>>>>> +; LiveOut Entry 1: %RSP (8 bytes)
>>>>>> ; STACK-NEXT:   .short  7
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 8
>>>>>> @@ -122,13 +158,19 @@ entry:
>>>>>> ; STACK-NEXT:   .short  19
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 16
>>>>>> +; Align
>>>>>> +; STACK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 3 (patchpoint liveness information enabled)
>>>>>> ; PATCH-LABEL:  .long L{{.*}}-_stackmap_liveness
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; PATCH-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; PATCH-NEXT:   .align  3
>>>>>> call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 3, i32 5)
>>>>>> call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind
>>>>>> ret void
>>>>>> @@ -141,39 +183,58 @@ entry:
>>>>>> ; STACK-LABEL:  .long L{{.*}}-_mixed_liveness
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; STACK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 1
>>>>>> ; STACK-NEXT:   .short  1
>>>>>> ; LiveOut Entry 1: %YMM2 (16 bytes) --> %XMM2
>>>>>> ; STACK-NEXT:   .short  19
>>>>>> ; STACK-NEXT:   .byte 0
>>>>>> ; STACK-NEXT:   .byte 16
>>>>>> +; Align
>>>>>> +; STACK-NEXT:   .align  3
>>>>>> +
>>>>>> +
>>>>>> ; StackMap 5 (stackmap liveness information enabled)
>>>>>> ; STACK-LABEL:  .long L{{.*}}-_mixed_liveness
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; STACK-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; STACK-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; STACK-NEXT:   .align  3
>>>>>> 
>>>>>> ; StackMap 4 (patchpoint liveness information enabled)
>>>>>> ; PATCH-LABEL:  .long L{{.*}}-_mixed_liveness
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; PATCH-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Align
>>>>>> +; PATCH-NEXT:   .align  3
>>>>>> +
>>>>>> ; StackMap 5 (patchpoint liveness information enabled)
>>>>>> ; PATCH-LABEL:  .long L{{.*}}-_mixed_liveness
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> ; PATCH-NEXT:   .short  0
>>>>>> +; Padding
>>>>>> +; PATCH-NEXT:   .short  0
>>>>>> ; Num LiveOut Entries: 2
>>>>>> ; PATCH-NEXT:   .short  2
>>>>>> ; LiveOut Entry 1: %RSP (8 bytes)
>>>>>> ; PATCH-NEXT:   .short  7
>>>>>> ; PATCH-NEXT:   .byte 0
>>>>>> ; PATCH-NEXT:   .byte 8
>>>>>> -; LiveOut Entry 1: %YMM2 (16 bytes) --> %XMM2
>>>>>> +; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
>>>>>> ; PATCH-NEXT:   .short  19
>>>>>> ; PATCH-NEXT:   .byte 0
>>>>>> ; PATCH-NEXT:   .byte 16
>>>>>> +; Align
>>>>>> +; PATCH-NEXT:   .align  3
>>>>>> call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 4, i32 5)
>>>>>> call anyregcc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 5, i32 0, i8* null, i32 0)
>>>>>> call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind
>>>>>> 
>>>>>> Modified: llvm/trunk/test/CodeGen/X86/stackmap.ll
>>>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stackmap.ll?rev=205254&r1=205253&r2=205254&view=diff
>>>>>> ==============================================================================
>>>>>> --- llvm/trunk/test/CodeGen/X86/stackmap.ll (original)
>>>>>> +++ llvm/trunk/test/CodeGen/X86/stackmap.ll Mon Mar 31 17:14:04 2014
>>>>>> @@ -4,47 +4,55 @@
>>>>>> 
>>>>>> ; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
>>>>>> ; CHECK-NEXT:  __LLVM_StackMaps:
>>>>>> -; CHECK-NEXT:   .long 0
>>>>>> +; Header
>>>>>> +; CHECK-NEXT:   .byte 1
>>>>>> +; CHECK-NEXT:   .byte 0
>>>>>> +; CHECK-NEXT:   .short 0
>>>>>> ; Num Functions
>>>>>> ; CHECK-NEXT:   .long 15
>>>>>> -; CHECK-NEXT:   .long _constantargs
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _osrinline
>>>>>> -; CHECK-NEXT:   .long 24
>>>>>> -; CHECK-NEXT:   .long _osrcold
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _propertyRead
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _propertyWrite
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _jsVoidCall
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _jsIntCall
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _spilledValue
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _spilledStackMapValue
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _spillSubReg
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _subRegOffset
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _liveConstant
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _directFrameIdx
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> -; CHECK-NEXT:   .long _longid
>>>>>> -; CHECK-NEXT:   .long 8
>>>>>> -; CHECK-NEXT:   .long _clobberScratch
>>>>>> -; CHECK-NEXT:   .long 56
>>>>>> ; Num LargeConstants
>>>>>> -; CHECK-NEXT:   .long   3
>>>>>> +; CHECK-NEXT:   .long 3
>>>>>> +; Num Callsites
>>>>>> +; CHECK-NEXT:   .long 19
>>>>>> +
>>>>>> +; Functions and stack size
>>>>>> +; CHECK-NEXT:   .quad _constantargs
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _osrinline
>>>>>> +; CHECK-NEXT:   .quad 24
>>>>>> +; CHECK-NEXT:   .quad _osrcold
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _propertyRead
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _propertyWrite
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _jsVoidCall
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _jsIntCall
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _spilledValue
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _spilledStackMapValue
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _spillSubReg
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _subRegOffset
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _liveConstant
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _directFrameIdx
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +; CHECK-NEXT:   .quad _longid
>>>>>> +; CHECK-NEXT:   .quad 8
>>>>>> +; CHECK-NEXT:   .quad _clobberScratch
>>>>>> +; CHECK-NEXT:   .quad 56
>>>>>> +
>>>>>> +; Large Constants
>>>>>> ; CHECK-NEXT:   .quad   2147483648
>>>>>> ; CHECK-NEXT:   .quad   4294967295
>>>>>> ; CHECK-NEXT:   .quad   4294967296
>>>>>> -; Num Callsites
>>>>>> -; CHECK-NEXT:   .long   19
>>>>>> 
>>>>>> +; Callsites
>>>>>> ; Constant arguments
>>>>>> ;
>>>>>> ; CHECK-NEXT:   .quad   1
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> llvm-commits mailing list
>>>>>> llvm-commits at cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list