MIR support is totally unusable for AMDGPU without this, since the set of reserved registers is set from fields here. Add a clone method to MachineFunctionInfo. This is a subtle variant of the copy constructor that is required if there are any MIR constructs that use pointers. Specifically, at minimum fields that reference MachineBasicBlocks or the MachineFunction need to be adjusted to the values in the new function.
64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
//===- ARCMachineFunctionInfo.h - ARC machine function info -----*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file declares ARC-specific per-machine-function information.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_ARC_ARCMACHINEFUNCTIONINFO_H
|
|
#define LLVM_LIB_TARGET_ARC_ARCMACHINEFUNCTIONINFO_H
|
|
|
|
#include "llvm/CodeGen/MachineFunction.h"
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
|
|
/// ARCFunctionInfo - This class is derived from MachineFunction private
|
|
/// ARC target-specific information for each MachineFunction.
|
|
class ARCFunctionInfo : public MachineFunctionInfo {
|
|
virtual void anchor();
|
|
bool ReturnStackOffsetSet;
|
|
int VarArgsFrameIndex;
|
|
unsigned ReturnStackOffset;
|
|
|
|
public:
|
|
ARCFunctionInfo()
|
|
: ReturnStackOffsetSet(false), VarArgsFrameIndex(0),
|
|
ReturnStackOffset(-1U), MaxCallStackReq(0) {}
|
|
|
|
explicit ARCFunctionInfo(MachineFunction &MF)
|
|
: ReturnStackOffsetSet(false), VarArgsFrameIndex(0),
|
|
ReturnStackOffset(-1U), MaxCallStackReq(0) {}
|
|
~ARCFunctionInfo() {}
|
|
|
|
MachineFunctionInfo *
|
|
clone(BumpPtrAllocator &Allocator, MachineFunction &DestMF,
|
|
const DenseMap<MachineBasicBlock *, MachineBasicBlock *> &Src2DstMBB)
|
|
const override;
|
|
|
|
void setVarArgsFrameIndex(int off) { VarArgsFrameIndex = off; }
|
|
int getVarArgsFrameIndex() const { return VarArgsFrameIndex; }
|
|
|
|
void setReturnStackOffset(unsigned value) {
|
|
assert(!ReturnStackOffsetSet && "Return stack offset set twice");
|
|
ReturnStackOffset = value;
|
|
ReturnStackOffsetSet = true;
|
|
}
|
|
|
|
unsigned getReturnStackOffset() const {
|
|
assert(ReturnStackOffsetSet && "Return stack offset not set");
|
|
return ReturnStackOffset;
|
|
}
|
|
|
|
unsigned MaxCallStackReq;
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_LIB_TARGET_ARC_ARCMACHINEFUNCTIONINFO_H
|