mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
0b8c9a80f2
into their new header subdirectory: include/llvm/IR. This matches the directory structure of lib, and begins to correct a long standing point of file layout clutter in LLVM. There are still more header files to move here, but I wanted to handle them in separate commits to make tracking what files make sense at each layer easier. The only really questionable files here are the target intrinsic tablegen files. But that's a battle I'd rather not fight today. I've updated both CMake and Makefile build systems (I think, and my tests think, but I may have missed something). I've also re-sorted the includes throughout the project. I'll be committing updates to Clang, DragonEgg, and Polly momentarily. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171366 91177308-0d34-0410-b5e6-96231b3b80d8
109 lines
3.8 KiB
C++
109 lines
3.8 KiB
C++
//===-- llvm/CodeGen/PseudoSourceValue.h ------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains the declaration of the PseudoSourceValue class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CODEGEN_PSEUDOSOURCEVALUE_H
|
|
#define LLVM_CODEGEN_PSEUDOSOURCEVALUE_H
|
|
|
|
#include "llvm/IR/Value.h"
|
|
|
|
namespace llvm {
|
|
class MachineFrameInfo;
|
|
class raw_ostream;
|
|
|
|
/// PseudoSourceValue - Special value supplied for machine level alias
|
|
/// analysis. It indicates that a memory access references the functions
|
|
/// stack frame (e.g., a spill slot), below the stack frame (e.g., argument
|
|
/// space), or constant pool.
|
|
class PseudoSourceValue : public Value {
|
|
private:
|
|
/// printCustom - Implement printing for PseudoSourceValue. This is called
|
|
/// from Value::print or Value's operator<<.
|
|
///
|
|
virtual void printCustom(raw_ostream &O) const;
|
|
|
|
public:
|
|
explicit PseudoSourceValue(enum ValueTy Subclass = PseudoSourceValueVal);
|
|
|
|
/// isConstant - Test whether the memory pointed to by this
|
|
/// PseudoSourceValue has a constant value.
|
|
///
|
|
virtual bool isConstant(const MachineFrameInfo *) const;
|
|
|
|
/// isAliased - Test whether the memory pointed to by this
|
|
/// PseudoSourceValue may also be pointed to by an LLVM IR Value.
|
|
virtual bool isAliased(const MachineFrameInfo *) const;
|
|
|
|
/// mayAlias - Return true if the memory pointed to by this
|
|
/// PseudoSourceValue can ever alias a LLVM IR Value.
|
|
virtual bool mayAlias(const MachineFrameInfo *) const;
|
|
|
|
/// classof - Methods for support type inquiry through isa, cast, and
|
|
/// dyn_cast:
|
|
///
|
|
static inline bool classof(const Value *V) {
|
|
return V->getValueID() == PseudoSourceValueVal ||
|
|
V->getValueID() == FixedStackPseudoSourceValueVal;
|
|
}
|
|
|
|
/// A pseudo source value referencing a fixed stack frame entry,
|
|
/// e.g., a spill slot.
|
|
static const PseudoSourceValue *getFixedStack(int FI);
|
|
|
|
/// A pseudo source value referencing the area below the stack frame of
|
|
/// a function, e.g., the argument space.
|
|
static const PseudoSourceValue *getStack();
|
|
|
|
/// A pseudo source value referencing the global offset table
|
|
/// (or something the like).
|
|
static const PseudoSourceValue *getGOT();
|
|
|
|
/// A pseudo source value referencing the constant pool. Since constant
|
|
/// pools are constant, this doesn't need to identify a specific constant
|
|
/// pool entry.
|
|
static const PseudoSourceValue *getConstantPool();
|
|
|
|
/// A pseudo source value referencing a jump table. Since jump tables are
|
|
/// constant, this doesn't need to identify a specific jump table.
|
|
static const PseudoSourceValue *getJumpTable();
|
|
};
|
|
|
|
/// FixedStackPseudoSourceValue - A specialized PseudoSourceValue
|
|
/// for holding FixedStack values, which must include a frame
|
|
/// index.
|
|
class FixedStackPseudoSourceValue : public PseudoSourceValue {
|
|
const int FI;
|
|
public:
|
|
explicit FixedStackPseudoSourceValue(int fi) :
|
|
PseudoSourceValue(FixedStackPseudoSourceValueVal), FI(fi) {}
|
|
|
|
/// classof - Methods for support type inquiry through isa, cast, and
|
|
/// dyn_cast:
|
|
///
|
|
static inline bool classof(const Value *V) {
|
|
return V->getValueID() == FixedStackPseudoSourceValueVal;
|
|
}
|
|
|
|
virtual bool isConstant(const MachineFrameInfo *MFI) const;
|
|
|
|
virtual bool isAliased(const MachineFrameInfo *MFI) const;
|
|
|
|
virtual bool mayAlias(const MachineFrameInfo *) const;
|
|
|
|
virtual void printCustom(raw_ostream &OS) const;
|
|
|
|
int getFrameIndex() const { return FI; }
|
|
};
|
|
} // End llvm namespace
|
|
|
|
#endif
|