#include "llvm/Value.h"
#include <iostream>
-namespace {
-class SlotMachine; // Internal private class
-}
-
namespace llvm {
class Module;
class PointerType;
class AssemblyWriter; // Internal private class
+class SlotMachine;
class CachedWriter {
AssemblyWriter *AW;
// setModule - Invalidate internal state, use the new module instead.
void setModule(const Module *M);
- CachedWriter &operator<<(const Value *V);
-
- inline CachedWriter &operator<<(const Value &X) {
- return *this << &X;
- }
+ CachedWriter &operator<<(const Value &V);
- CachedWriter &operator<<(const Type *X);
- inline CachedWriter &operator<<(const PointerType *X);
+ CachedWriter &operator<<(const Type &X);
inline CachedWriter &operator<<(std::ostream &(&Manip)(std::ostream &)) {
Out << Manip; return *this;
}
break;
default:
- std::cout << "ERROR: Constant unimp for type: " << C->getType() << "\n";
+ std::cout << "ERROR: Constant unimp for type: " << *C->getType() << "\n";
abort();
}
return Result;
Ptr->Untyped[7] = (Val.ULongVal >> 56) & 255;
break;
default:
- std::cout << "Cannot store value of type " << Ty << "!\n";
+ std::cout << "Cannot store value of type " << *Ty << "!\n";
}
} else {
switch (Ty->getTypeID()) {
Ptr->Untyped[0] = (Val.ULongVal >> 56) & 255;
break;
default:
- std::cout << "Cannot store value of type " << Ty << "!\n";
+ std::cout << "Cannot store value of type " << *Ty << "!\n";
}
}
}
}
default:
- std::cerr << "Bad Type: " << Init->getType() << "\n";
+ std::cerr << "Bad Type: " << *Init->getType() << "\n";
assert(0 && "Unknown constant type to initialize memory with!");
}
}
getOperandValue(CE->getOperand(1), SF),
getOperandValue(CE->getOperand(2), SF));
default:
- std::cerr << "Unhandled ConstantExpr: " << CE << "\n";
+ std::cerr << "Unhandled ConstantExpr: " << *CE << "\n";
abort();
return GenericValue();
}
IMPLEMENT_BINARY_OPERATOR(*, Float);
IMPLEMENT_BINARY_OPERATOR(*, Double);
default:
- std::cout << "Unhandled type for Mul instruction: " << Ty << "\n";
+ std::cout << "Unhandled type for Mul instruction: " << *Ty << "\n";
abort();
}
return Dest;
#include <algorithm>
using namespace llvm;
-namespace {
+namespace llvm {
/// This class provides computation of slot numbers for LLVM Assembly writing.
/// @brief LLVM Assembly Writing Slot Computation.
};
-}
+} // end namespace llvm
static RegisterPass<PrintModulePass>
X("printm", "Print module to stderr",PassInfo::Analysis|PassInfo::Optimization);
delete SC;
}
-CachedWriter &CachedWriter::operator<<(const Value *V) {
+CachedWriter &CachedWriter::operator<<(const Value &V) {
assert(AW && SC && "CachedWriter does not have a current module!");
- if (const Instruction *I = dyn_cast<Instruction>(V))
+ if (const Instruction *I = dyn_cast<Instruction>(&V))
AW->write(I);
- else if (const BasicBlock *BB = dyn_cast<BasicBlock>(V))
+ else if (const BasicBlock *BB = dyn_cast<BasicBlock>(&V))
AW->write(BB);
- else if (const Function *F = dyn_cast<Function>(V))
+ else if (const Function *F = dyn_cast<Function>(&V))
AW->write(F);
- else if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
+ else if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(&V))
AW->write(GV);
else
- AW->writeOperand(V, true, true);
+ AW->writeOperand(&V, true, true);
return *this;
}
-CachedWriter& CachedWriter::operator<<(const Type *Ty) {
+CachedWriter& CachedWriter::operator<<(const Type &Ty) {
if (SymbolicTypes) {
const Module *M = AW->getModule();
- if (M) WriteTypeSymbolic(Out, Ty, M);
+ if (M) WriteTypeSymbolic(Out, &Ty, M);
} else {
- AW->write(Ty);
+ AW->write(&Ty);
}
return *this;
}