void emitError(const Instruction *I, const Twine &ErrorStr);
void emitError(const Twine &ErrorStr);
- /// emitWarning - This is similar to emitError but it emits a warning instead
- /// of an error.
- void emitWarning(unsigned LocCookie, const Twine &ErrorStr);
- void emitWarning(const Instruction *I, const Twine &ErrorStr);
- void emitWarning(const Twine &ErrorStr);
-
private:
LLVMContext(LLVMContext&) LLVM_DELETED_FUNCTION;
void operator=(LLVMContext&) LLVM_DELETED_FUNCTION;
unsigned ReadCount = matchEdges(M, PB, Counters);
if (ReadCount != Counters.size()) {
- M.getContext().emitWarning("profile information is inconsistent "
- "with the current program");
+ errs() << "WARNING: profile information is inconsistent with "
+ << "the current program!\n";
}
NumEdgesRead = ReadCount;
#include "llvm/Analysis/ProfileInfoLoader.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/InstrTypes.h"
-#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/CFG.h"
}
}
if (ReadCount != Counters.size()) {
- M.getContext().emitWarning("profile information is inconsistent "
- "with the current program");
+ errs() << "WARNING: profile information is inconsistent with "
+ << "the current program!\n";
}
NumEdgesRead = ReadCount;
}
}
}
if (ReadCount != Counters.size()) {
- M.getContext().emitWarning("profile information is inconsistent "
- "with the current program");
+ errs() << "WARNING: profile information is inconsistent with "
+ << "the current program!\n";
}
NumEdgesRead = ReadCount;
}
BlockInformation[F][BB] = (double)Counters[ReadCount++];
}
if (ReadCount != Counters.size()) {
- M.getContext().emitWarning("profile information is inconsistent "
- "with the current program");
+ errs() << "WARNING: profile information is inconsistent with "
+ << "the current program!\n";
}
}
FunctionInformation[F] = (double)Counters[ReadCount++];
}
if (ReadCount != Counters.size()) {
- M.getContext().emitWarning("profile information is inconsistent "
- "with the current program");
+ errs() << "WARNING: profile information is inconsistent with "
+ << "the current program!\n";
}
}
}
case Intrinsic::stacksave:
+ case Intrinsic::stackrestore: {
if (!Warned)
- Context.emitWarning("this target does not support the "
- "llvm.stacksave intrinsic");
- Warned = true;
- CI->replaceAllUsesWith(Constant::getNullValue(CI->getType()));
- break;
-
- case Intrinsic::stackrestore:
- if (!Warned)
- Context.emitWarning("this target does not support the "
- "llvm.stackrestore intrinsic");
+ errs() << "WARNING: this target does not support the llvm.stack"
+ << (Callee->getIntrinsicID() == Intrinsic::stacksave ?
+ "save" : "restore") << " intrinsic.\n";
Warned = true;
+ if (Callee->getIntrinsicID() == Intrinsic::stacksave)
+ CI->replaceAllUsesWith(Constant::getNullValue(CI->getType()));
break;
+ }
case Intrinsic::returnaddress:
- Context.emitWarning("this target does not support the "
- "llvm.returnaddress intrinsic");
- CI->replaceAllUsesWith(ConstantPointerNull::get(
- cast<PointerType>(CI->getType())));
- break;
-
case Intrinsic::frameaddress:
- Context.emitWarning("this target does not support the "
- "llvm.frameaddress intrinsic");
+ errs() << "WARNING: this target does not support the llvm."
+ << (Callee->getIntrinsicID() == Intrinsic::returnaddress ?
+ "return" : "frame") << "address intrinsic.\n";
CI->replaceAllUsesWith(ConstantPointerNull::get(
cast<PointerType>(CI->getType())));
break;
case Intrinsic::pcmarker:
break; // Simply strip out pcmarker on unsupported architectures
- case Intrinsic::readcyclecounter:
- Context.emitWarning("this target does not support the "
- "llvm.readcyclecounter intrinsic; "
- "it is being lowered to a constant 0");
+ case Intrinsic::readcyclecounter: {
+ errs() << "WARNING: this target does not support the llvm.readcyclecoun"
+ << "ter intrinsic. It is being lowered to a constant 0\n";
CI->replaceAllUsesWith(ConstantInt::get(Type::getInt64Ty(Context), 0));
break;
+ }
case Intrinsic::dbg_declare:
break; // Simply strip out debugging intrinsics
emitError(0U, ErrorStr);
}
-void LLVMContext::emitWarning(const Twine &ErrorStr) {
- emitWarning(0U, ErrorStr);
-}
-
-static unsigned getSrcLocation(const Instruction *I) {
+void LLVMContext::emitError(const Instruction *I, const Twine &ErrorStr) {
unsigned LocCookie = 0;
if (const MDNode *SrcLoc = I->getMetadata("srcloc")) {
if (SrcLoc->getNumOperands() != 0)
if (const ConstantInt *CI = dyn_cast<ConstantInt>(SrcLoc->getOperand(0)))
LocCookie = CI->getZExtValue();
}
- return LocCookie;
-}
-
-void LLVMContext::emitError(const Instruction *I, const Twine &ErrorStr) {
- unsigned LocCookie = getSrcLocation(I);
return emitError(LocCookie, ErrorStr);
}
-void LLVMContext::emitWarning(const Instruction *I, const Twine &ErrorStr) {
- unsigned LocCookie = getSrcLocation(I);
- return emitWarning(LocCookie, ErrorStr);
-}
-
void LLVMContext::emitError(unsigned LocCookie, const Twine &ErrorStr) {
// If there is no error handler installed, just print the error and exit.
if (pImpl->DiagHandler == 0) {
pImpl->DiagHandler(Diag, pImpl->DiagContext, LocCookie);
}
-void LLVMContext::emitWarning(unsigned LocCookie, const Twine &ErrorStr) {
- // If there is no handler installed, just print the warning.
- if (pImpl->DiagHandler == 0) {
- errs() << "warning: " << ErrorStr << "\n";
- return;
- }
-
- // If we do have a handler, we can report the warning.
- SMDiagnostic Diag("", SourceMgr::DK_Warning, ErrorStr.str());
-
- pImpl->DiagHandler(Diag, pImpl->DiagContext, LocCookie);
-}
-
//===----------------------------------------------------------------------===//
// Metadata Kind Uniquing
//===----------------------------------------------------------------------===//
#include "llvm/Transforms/Instrumentation.h"
#include "ProfilingUtils.h"
#include "llvm/ADT/Statistic.h"
-#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/raw_ostream.h"
bool EdgeProfiler::runOnModule(Module &M) {
Function *Main = M.getFunction("main");
if (Main == 0) {
- M.getContext().emitWarning("cannot insert edge profiling into a module"
- " with no main function");
+ errs() << "WARNING: cannot insert edge profiling into a module"
+ << " with no main function!\n";
return false; // No main, no instrumentation!
}
#include "llvm/Analysis/ProfileInfo.h"
#include "llvm/Analysis/ProfileInfoLoader.h"
#include "llvm/IR/Constants.h"
-#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
bool OptimalEdgeProfiler::runOnModule(Module &M) {
Function *Main = M.getFunction("main");
if (Main == 0) {
- M.getContext().emitWarning("cannot insert edge profiling into a module"
- " with no main function");
+ errs() << "WARNING: cannot insert edge profiling into a module"
+ << " with no main function!\n";
return false; // No main, no instrumentation!
}
Main = M.getFunction("MAIN__");
if (!Main) {
- Context->emitWarning("cannot insert edge profiling into a module"
- " with no main function");
+ errs() << "WARNING: cannot insert path profiling into a module"
+ << " with no main function!\n";
return false;
}