summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-16 22:43:43 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-16 22:43:43 +0000
commit8eb018ab9c00c504d8b6d991865a599adbd1da02 (patch)
tree0c2978666b992a473ab97522b85289681716c7f4 /clang/lib/Sema
parent45a2a20384f6c74d66f2b5c0b42f083d31deaefc (diff)
downloadbcm5719-llvm-8eb018ab9c00c504d8b6d991865a599adbd1da02.tar.gz
bcm5719-llvm-8eb018ab9c00c504d8b6d991865a599adbd1da02.zip
Support IRgen of sqrt -> llvm.sqrt, pow -> llvm.pow.
- Define pow[lf]?, sqrt[lf]? as builtins. - Add -fmath-errno option which binds to LangOptions.MathErrno - Add new builtin flag Builtin::Context::isConstWithoutErrno for functions which can be marked as const if errno isn't respected for math functions. Sema automatically marks these functions as const when they are defined, if MathErrno=0. - IRgen uses const attribute on sqrt and pow library functions to decide if it can use the llvm intrinsic. llvm-svn: 64689
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 2692cd99db4..4f8b245ef36 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2956,6 +2956,15 @@ void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) {
if (!FD->getAttr<FormatAttr>())
FD->addAttr(new FormatAttr("printf", FormatIdx + 1, FormatIdx + 2));
}
+
+ // Mark const if we don't care about errno and that is the only
+ // thing preventing the function from being const. This allows
+ // IRgen to use LLVM intrinsics for such functions.
+ if (!getLangOptions().MathErrno &&
+ Context.BuiltinInfo.isConstWithoutErrno(BuiltinID)) {
+ if (!FD->getAttr<ConstAttr>())
+ FD->addAttr(new ConstAttr());
+ }
}
IdentifierInfo *Name = FD->getIdentifier();
OpenPOWER on IntegriCloud