| //===-- Locals.h - Java locals ----------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file was developed by the LLVM research group and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains the abstraction of Java locals. We model the |
| // locals as an array of lazily created allocas. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_JAVA_LOCALS_H |
| #define LLVM_JAVA_LOCALS_H |
| |
| #include "Resolver.h" |
| #include <map> |
| #include <vector> |
| |
| namespace llvm { |
| |
| class AllocaInst; |
| class BasicBlock; |
| class Instruction; |
| class Type; |
| class Value; |
| |
| } // namespace llvm |
| |
| namespace llvm { namespace Java { |
| |
| class Locals { |
| const Resolver* resolver_; |
| typedef std::map<const Type*, AllocaInst*> SlotMap; |
| std::vector<SlotMap> locals_; |
| |
| public: |
| Locals(const Resolver* resolver, unsigned maxLocals); |
| |
| /// @brief - Stores the value \c value on the \c i'th local |
| /// variable and appends any instructions to implement this to \c |
| /// insertAtEnd BasicBlock |
| void store(unsigned i, Value* value, BasicBlock* insertAtEnd); |
| |
| /// @brief - Loads the value of the \c i'th local variable of type |
| /// \c type and appends any instructions to implement this to \c |
| /// insertAtEnd BasicBlock |
| Value* load(unsigned i, const Type* type, BasicBlock* insertAtEnd); |
| }; |
| |
| } } // namespace llvm::Java |
| |
| #endif//LLVM_JAVA_LOCALS_H |