[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
Wed Apr 2 18:50:49 PDT 2014


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