summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/IntrinsicLowering.cpp
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2012-12-24 18:15:21 +0000
committerBob Wilson <bob.wilson@apple.com>2012-12-24 18:15:21 +0000
commit4ed23578daa2ab659255511885f998d8876354d8 (patch)
treea1b75c77a95d2193da1e22e3816e52f64615471c /llvm/lib/CodeGen/IntrinsicLowering.cpp
parent06b84eb414b76f6513c56a08c898a60d4d121987 (diff)
downloadbcm5719-llvm-4ed23578daa2ab659255511885f998d8876354d8.tar.gz
bcm5719-llvm-4ed23578daa2ab659255511885f998d8876354d8.zip
Add LLVMContext::emitWarning methods and use them. <rdar://problem/12867368>
When the backend is used from clang, it should produce proper diagnostics instead of just printing messages to errs(). Other clients may also want to register their own error handlers with the LLVMContext, and the same handler should work for warnings in the same way as the existing emitError methods. llvm-svn: 171041
Diffstat (limited to 'llvm/lib/CodeGen/IntrinsicLowering.cpp')
-rw-r--r--llvm/lib/CodeGen/IntrinsicLowering.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/llvm/lib/CodeGen/IntrinsicLowering.cpp b/llvm/lib/CodeGen/IntrinsicLowering.cpp
index 698d289f13c..f289a9beacb 100644
--- a/llvm/lib/CodeGen/IntrinsicLowering.cpp
+++ b/llvm/lib/CodeGen/IntrinsicLowering.cpp
@@ -413,22 +413,30 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
}
case Intrinsic::stacksave:
- case Intrinsic::stackrestore: {
if (!Warned)
- errs() << "WARNING: this target does not support the llvm.stack"
- << (Callee->getIntrinsicID() == Intrinsic::stacksave ?
- "save" : "restore") << " intrinsic.\n";
+ 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");
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:
- errs() << "WARNING: this target does not support the llvm."
- << (Callee->getIntrinsicID() == Intrinsic::returnaddress ?
- "return" : "frame") << "address intrinsic.\n";
+ Context.emitWarning("this target does not support the "
+ "llvm.frameaddress intrinsic");
CI->replaceAllUsesWith(ConstantPointerNull::get(
cast<PointerType>(CI->getType())));
break;
@@ -438,12 +446,12 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
case Intrinsic::pcmarker:
break; // Simply strip out pcmarker on unsupported architectures
- case Intrinsic::readcyclecounter: {
- errs() << "WARNING: this target does not support the llvm.readcyclecoun"
- << "ter intrinsic. It is being lowered to a constant 0\n";
+ case Intrinsic::readcyclecounter:
+ Context.emitWarning("this target does not support the "
+ "llvm.readcyclecounter intrinsic; "
+ "it is being lowered to a constant 0");
CI->replaceAllUsesWith(ConstantInt::get(Type::getInt64Ty(Context), 0));
break;
- }
case Intrinsic::dbg_declare:
break; // Simply strip out debugging intrinsics
OpenPOWER on IntegriCloud