[llvm] r200444 - [Stackmaps] Record the stack size of each function that contains a stackmap/patchpoint intrinsic.

NAKAMURA Takumi geek4civic at gmail.com
Wed Jan 29 19:23:05 PST 2014


It broke builds.

I wonder codegen and asmprinter are cyclic-dependent...

...Takumi

2014-01-30 Juergen Ributzka <juergen at apple.com>:
> Author: ributzka
> Date: Wed Jan 29 21:06:14 2014
> New Revision: 200444
>
> URL: http://llvm.org/viewvc/llvm-project?rev=200444&view=rev
> Log:
> [Stackmaps] Record the stack size of each function that contains a stackmap/patchpoint intrinsic.
>
> Reviewed by Andy
>
> Modified:
>     llvm/trunk/docs/StackMaps.rst
>     llvm/trunk/include/llvm/CodeGen/StackMaps.h
>     llvm/trunk/lib/CodeGen/StackMaps.cpp
>     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=200444&r1=200443&r2=200444&view=diff
> ==============================================================================
> --- llvm/trunk/docs/StackMaps.rst (original)
> +++ llvm/trunk/docs/StackMaps.rst Wed Jan 29 21:06:14 2014
> @@ -314,6 +314,11 @@ format of this section follows:
>  .. code-block:: none
>
>    uint32 : Reserved (header)
> +  uint32 : NumFunctions
> +  StkSizeRecord[NumFunctions] {
> +    uint32 : Function Offset
> +    uint32 : Stack Size
> +  }
>    uint32 : NumConstants
>    Constants[NumConstants] {
>      uint64 : LargeConstant
>
> Modified: llvm/trunk/include/llvm/CodeGen/StackMaps.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/StackMaps.h?rev=200444&r1=200443&r2=200444&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/StackMaps.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/StackMaps.h Wed Jan 29 21:06:14 2014
> @@ -11,6 +11,7 @@
>  #ifndef LLVM_STACKMAPS
>  #define LLVM_STACKMAPS
>
> +#include "llvm/ADT/MapVector.h"
>  #include "llvm/ADT/SmallVector.h"
>  #include "llvm/CodeGen/MachineInstr.h"
>  #include <map>
> @@ -132,6 +133,7 @@ public:
>  private:
>    typedef SmallVector<Location, 8> LocationVec;
>    typedef SmallVector<LiveOutReg, 8> LiveOutVec;
> +  typedef MapVector<const MCSymbol *, uint32_t> FnStackSizeMap;
>
>    struct CallsiteInfo {
>      const MCExpr *CSOffsetExpr;
> @@ -170,6 +172,7 @@ private:
>    AsmPrinter &AP;
>    CallsiteInfoList CSInfos;
>    ConstantPool ConstPool;
> +  FnStackSizeMap FnStackSize;
>
>    MachineInstr::const_mop_iterator
>    parseOperand(MachineInstr::const_mop_iterator MOI,
>
> Modified: llvm/trunk/lib/CodeGen/StackMaps.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StackMaps.cpp?rev=200444&r1=200443&r2=200444&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/StackMaps.cpp (original)
> +++ llvm/trunk/lib/CodeGen/StackMaps.cpp Wed Jan 29 21:06:14 2014
> @@ -11,6 +11,8 @@
>
>  #include "llvm/CodeGen/StackMaps.h"
>  #include "llvm/CodeGen/AsmPrinter.h"
> +#include "llvm/CodeGen/MachineFunction.h"
> +#include "llvm/CodeGen/MachineFrameInfo.h"
>  #include "llvm/CodeGen/MachineInstr.h"
>  #include "llvm/IR/DataLayout.h"
>  #include "llvm/MC/MCContext.h"
> @@ -216,12 +218,19 @@ void StackMaps::recordStackMapOpers(cons
>      }
>    }
>
> +  // Create an expression to calculate the offset of the callsite from function
> +  // entry.
>    const MCExpr *CSOffsetExpr = MCBinaryExpr::CreateSub(
>      MCSymbolRefExpr::Create(MILabel, OutContext),
>      MCSymbolRefExpr::Create(AP.CurrentFnSym, OutContext),
>      OutContext);
>
>    CSInfos.push_back(CallsiteInfo(CSOffsetExpr, ID, Locations, LiveOuts));
> +
> +  // Record the stack size of the current function.
> +  const MachineFrameInfo *MFI = AP.MF->getFrameInfo();
> +  FnStackSize[AP.CurrentFnSym] =
> +    MFI->hasVarSizedObjects() ? ~0U : MFI->getStackSize();
>  }
>
>  void StackMaps::recordStackMap(const MachineInstr &MI) {
> @@ -258,6 +267,11 @@ void StackMaps::recordPatchPoint(const M
>  /// serializeToStackMapSection conceptually populates the following fields:
>  ///
>  /// uint32 : Reserved (header)
> +/// uint32 : NumFunctions
> +/// StkSizeRecord[NumFunctions] {
> +///   uint32 : Function Offset
> +///   uint32 : Stack Size
> +/// }
>  /// uint32 : NumConstants
>  /// int64  : Constants[NumConstants]
>  /// uint32 : NumRecords
> @@ -313,6 +327,16 @@ void StackMaps::serializeToStackMapSecti
>    // Header.
>    AP.OutStreamer.EmitIntValue(0, 4);
>
> +  // Num functions.
> +  AP.OutStreamer.EmitIntValue(FnStackSize.size(), 4);
> +
> +  // Stack size entries.
> +  for (FnStackSizeMap::iterator I = FnStackSize.begin(), E = FnStackSize.end();
> +       I != E; ++I) {
> +    AP.EmitLabelReference(I->first, 4, true);
> +    AP.OutStreamer.EmitIntValue(I->second, 4);
> +  }
> +
>    // Num constants.
>    AP.OutStreamer.EmitIntValue(ConstPool.getNumConstants(), 4);
>
>
> Modified: llvm/trunk/test/CodeGen/X86/anyregcc.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/anyregcc.ll?rev=200444&r1=200443&r2=200444&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/anyregcc.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/anyregcc.ll Wed Jan 29 21:06:14 2014
> @@ -1,13 +1,31 @@
> -; RUN: llc < %s -mtriple=x86_64-apple-darwin -disable-fp-elim | FileCheck %s
> -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=corei7     | FileCheck --check-prefix=SSE %s
> -; RUN: llc < %s -march=x86-64 -mcpu=corei7-avx | FileCheck --check-prefix=AVX %s
> +; RUN: llc < %s -mtriple=x86_64-apple-darwin                  -disable-fp-elim | FileCheck %s
> +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7     -disable-fp-elim | FileCheck --check-prefix=SSE %s
> +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -disable-fp-elim | FileCheck --check-prefix=AVX %s
>
>
>  ; Stackmap Header: no constants - 6 callsites
> -; CHECK-LABEL: .section        __LLVM_STACKMAPS,__llvm_stackmaps
> -; CHECK-NEXT:  __LLVM_StackMaps:
> +; CHECK-LABEL:  .section __LLVM_STACKMAPS,__llvm_stackmaps
> +; CHECK-NEXT:   __LLVM_StackMaps:
>  ; Header
> -; CHECK-NEXT:   .long   0
> +; CHECK-NEXT:   .long 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
>  ; Num Callsites
> @@ -343,8 +361,8 @@ entry:
>  define anyregcc void @anyregcc1() {
>  entry:
>  ;SSE-LABEL: anyregcc1
> -;SSE:      pushq %rax
>  ;SSE:      pushq %rbp
> +;SSE:      pushq %rax
>  ;SSE:      pushq %r15
>  ;SSE:      pushq %r14
>  ;SSE:      pushq %r13
> @@ -375,8 +393,8 @@ entry:
>  ;SSE-NEXT: movaps %xmm1
>  ;SSE-NEXT: movaps %xmm0
>  ;AVX-LABEL:anyregcc1
> -;AVX:      pushq %rax
>  ;AVX:      pushq %rbp
> +;AVX:      pushq %rax
>  ;AVX:      pushq %r15
>  ;AVX:      pushq %r14
>  ;AVX:      pushq %r13
> @@ -390,22 +408,22 @@ entry:
>  ;AVX:      pushq %rdx
>  ;AVX:      pushq %rcx
>  ;AVX:      pushq %rbx
> -;AVX:      vmovups %ymm15
> -;AVX-NEXT: vmovups %ymm14
> -;AVX-NEXT: vmovups %ymm13
> -;AVX-NEXT: vmovups %ymm12
> -;AVX-NEXT: vmovups %ymm11
> -;AVX-NEXT: vmovups %ymm10
> -;AVX-NEXT: vmovups %ymm9
> -;AVX-NEXT: vmovups %ymm8
> -;AVX-NEXT: vmovups %ymm7
> -;AVX-NEXT: vmovups %ymm6
> -;AVX-NEXT: vmovups %ymm5
> -;AVX-NEXT: vmovups %ymm4
> -;AVX-NEXT: vmovups %ymm3
> -;AVX-NEXT: vmovups %ymm2
> -;AVX-NEXT: vmovups %ymm1
> -;AVX-NEXT: vmovups %ymm0
> +;AVX:      vmovaps %ymm15
> +;AVX-NEXT: vmovaps %ymm14
> +;AVX-NEXT: vmovaps %ymm13
> +;AVX-NEXT: vmovaps %ymm12
> +;AVX-NEXT: vmovaps %ymm11
> +;AVX-NEXT: vmovaps %ymm10
> +;AVX-NEXT: vmovaps %ymm9
> +;AVX-NEXT: vmovaps %ymm8
> +;AVX-NEXT: vmovaps %ymm7
> +;AVX-NEXT: vmovaps %ymm6
> +;AVX-NEXT: vmovaps %ymm5
> +;AVX-NEXT: vmovaps %ymm4
> +;AVX-NEXT: vmovaps %ymm3
> +;AVX-NEXT: vmovaps %ymm2
> +;AVX-NEXT: vmovaps %ymm1
> +;AVX-NEXT: vmovaps %ymm0
>    call void asm sideeffect "", "~{rax},~{rbx},~{rcx},~{rdx},~{rsi},~{rdi},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15},~{rbp},~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15}"()
>    ret void
>  }
>
> 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=200444&r1=200443&r2=200444&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/stackmap-liveness.ll Wed Jan 29 21:06:14 2014
> @@ -6,7 +6,13 @@
>
>  ; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
>  ; CHECK-NEXT:   __LLVM_StackMaps:
> -; CHECK-NEXT:   .long   0
> +; CHECK-NEXT:   .long 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
>
> Modified: llvm/trunk/test/CodeGen/X86/stackmap.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stackmap.ll?rev=200444&r1=200443&r2=200444&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/stackmap.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/stackmap.ll Wed Jan 29 21:06:14 2014
> @@ -4,7 +4,37 @@
>
>  ; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
>  ; CHECK-NEXT:  __LLVM_StackMaps:
> -; CHECK-NEXT:   .long   0
> +; CHECK-NEXT:   .long 0
> +; Num Functions
> +; CHECK-NEXT:   .long 14
> +; 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
>  ; Num LargeConstants
>  ; CHECK-NEXT:   .long   3
>  ; CHECK-NEXT:   .quad   2147483648
>
>
> _______________________________________________
> 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