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

Eric Christopher echristo at gmail.com
Wed Apr 2 18:54:47 PDT 2014


Still seems reasonable to document it somewhere.

-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