summaryrefslogtreecommitdiff
path: root/contrib/llvm/lib/CodeGen/SafeStackLayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/lib/CodeGen/SafeStackLayout.h')
-rw-r--r--contrib/llvm/lib/CodeGen/SafeStackLayout.h83
1 files changed, 0 insertions, 83 deletions
diff --git a/contrib/llvm/lib/CodeGen/SafeStackLayout.h b/contrib/llvm/lib/CodeGen/SafeStackLayout.h
deleted file mode 100644
index 349d9a8b595c..000000000000
--- a/contrib/llvm/lib/CodeGen/SafeStackLayout.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//===- SafeStackLayout.h - SafeStack frame layout --------------*- C++ -*--===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIB_CODEGEN_SAFESTACKLAYOUT_H
-#define LLVM_LIB_CODEGEN_SAFESTACKLAYOUT_H
-
-#include "SafeStackColoring.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SmallVector.h"
-
-namespace llvm {
-
-class raw_ostream;
-class Value;
-
-namespace safestack {
-
-/// Compute the layout of an unsafe stack frame.
-class StackLayout {
- unsigned MaxAlignment;
-
- struct StackRegion {
- unsigned Start;
- unsigned End;
- StackColoring::LiveRange Range;
-
- StackRegion(unsigned Start, unsigned End,
- const StackColoring::LiveRange &Range)
- : Start(Start), End(End), Range(Range) {}
- };
-
- /// The list of current stack regions, sorted by StackRegion::Start.
- SmallVector<StackRegion, 16> Regions;
-
- struct StackObject {
- const Value *Handle;
- unsigned Size, Alignment;
- StackColoring::LiveRange Range;
- };
-
- SmallVector<StackObject, 8> StackObjects;
-
- DenseMap<const Value *, unsigned> ObjectOffsets;
- DenseMap<const Value *, unsigned> ObjectAlignments;
-
- void layoutObject(StackObject &Obj);
-
-public:
- StackLayout(unsigned StackAlignment) : MaxAlignment(StackAlignment) {}
-
- /// Add an object to the stack frame. Value pointer is opaque and used as a
- /// handle to retrieve the object's offset in the frame later.
- void addObject(const Value *V, unsigned Size, unsigned Alignment,
- const StackColoring::LiveRange &Range);
-
- /// Run the layout computation for all previously added objects.
- void computeLayout();
-
- /// Returns the offset to the object start in the stack frame.
- unsigned getObjectOffset(const Value *V) { return ObjectOffsets[V]; }
-
- /// Returns the alignment of the object
- unsigned getObjectAlignment(const Value *V) { return ObjectAlignments[V]; }
-
- /// Returns the size of the entire frame.
- unsigned getFrameSize() { return Regions.empty() ? 0 : Regions.back().End; }
-
- /// Returns the alignment of the frame.
- unsigned getFrameAlignment() { return MaxAlignment; }
-
- void print(raw_ostream &OS);
-};
-
-} // end namespace safestack
-
-} // end namespace llvm
-
-#endif // LLVM_LIB_CODEGEN_SAFESTACKLAYOUT_H