Mercurial > projects > ldc
view gen/abi.h @ 994:18ad5601dff7
Use LLVM OStream wrapper instead of <iostream> in the logger.
llvm::OStream provides all std::ostream functionality (by holding a
std::ostream* internally), but
* doesn't include <iostream>, avoiding per-file overhead.
* allows the stream pointer to be null, and the (inlined) operators do nothing
when that's the case. (This also allows removal of the ofstream("/dev/null")
hack Logger used when disabled, which presumably wasn't very portable)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Thu, 26 Feb 2009 14:51:02 +0100 |
parents | 420ef073448d |
children | e8c6dbcd33d1 |
line wrap: on
line source
#ifndef __LDC_GEN_ABI_H__ #define __LDC_GEN_ABI_H__ #include <vector> struct Type; namespace llvm { class Type; class Value; } // return rewrite rule struct ABIRetRewrite { // get original value from rewritten one virtual LLValue* get(LLValue* v) = 0; // rewrite original value virtual LLValue* put(LLValue* v) = 0; // returns target type of this rewrite virtual const LLType* type(const LLType* t) = 0; // test if rewrite applies virtual bool test(TypeFunction* tf) = 0; }; // interface called by codegen struct TargetABI { static TargetABI* getTarget(); TargetABI(); const llvm::Type* getRetType(TypeFunction* tf, const llvm::Type* t); llvm::Value* getRet(TypeFunction* tf, llvm::Value* v); llvm::Value* putRet(TypeFunction* tf, llvm::Value* v); virtual bool returnInArg(Type* t) = 0; virtual bool passByRef(Type* t) = 0; protected: std::vector<ABIRetRewrite*> retOps; ABIRetRewrite* findRetRewrite(TypeFunction* tf); }; #endif