Mercurial > projects > ldc
view ir/irfunction.h @ 622:26fce59fe80a
Wrapped all the most potentially expensive logging calls in a conditional to only do work when actually requested.
Commented some logging calls that could potentially write out many megabytes of type dumps.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 01 Oct 2008 18:32:31 +0200 |
parents | c7d7e2282ba3 |
children | eef8ac26c66c |
line wrap: on
line source
#ifndef LLVMDC_IR_IRFUNCTION_H #define LLVMDC_IR_IRFUNCTION_H #include "ir/ir.h" #include "ir/irlandingpad.h" #include <vector> #include <stack> #include <map> // represents a function struct IrFunction : IrBase { llvm::Function* func; llvm::Instruction* allocapoint; FuncDeclaration* decl; TypeFunction* type; bool queued; bool defined; llvm::Value* retArg; // return in ptr arg llvm::Value* thisArg; // class/struct 'this' arg llvm::Value* nestArg; // nested function 'this' arg llvm::Value* nestedVar; // nested var alloca llvm::Value* _arguments; llvm::Value* _argptr; llvm::Constant* dwarfSubProg; llvm::AllocaInst* srcfileArg; llvm::AllocaInst* msgArg; // pushes a unique label scope of the given name void pushUniqueLabelScope(const char* name); // pops a label scope void popLabelScope(); // gets the string under which the label's BB // is stored in the labelToBB map. // essentially prefixes ident by the strings in labelScopes std::string getScopedLabelName(const char* ident); // label to basic block lookup typedef std::map<std::string, llvm::BasicBlock*> LabelToBBMap; LabelToBBMap labelToBB; // landing pads for try statements IRLandingPad landingPad; IrFunction(FuncDeclaration* fd); // annotations void setNeverInline(); void setAlwaysInline(); private: // prefix for labels and gotos // used for allowing labels to be emitted twice std::vector<std::string> labelScopes; // next unique id stack std::stack<int> nextUnique; }; #endif