aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Module.cpp
diff options
context:
space:
mode:
authorJustin Hibbits <jrh29@alumni.cwru.edu>2014-11-07 04:46:10 +0000
committerJustin Hibbits <jrh29@alumni.cwru.edu>2014-11-07 04:46:10 +0000
commit771c132e0f0590f2c82f048998d33a62d8c3f636 (patch)
treef89d54a4401d126c65b1a64a2a0fda0c2b690cd9 /llvm/lib/IR/Module.cpp
parent97ae14e166caa3342cba36ddcee7250ab13f4f69 (diff)
downloadllvm-771c132e0f0590f2c82f048998d33a62d8c3f636.zip
llvm-771c132e0f0590f2c82f048998d33a62d8c3f636.tar.gz
llvm-771c132e0f0590f2c82f048998d33a62d8c3f636.tar.bz2
Add Position-independent Code model Module API.
Summary: This makes PIC levels a Module flag attribute, which can be queried by the backend. The flag is named `PIC Level`, and can have a value of: 0 - Backend-default 1 - Small-model (-fpic) 2 - Large-model (-fPIC) These match the `-pic-level' command line argument for clang, and the value of the preprocessor macro `__PIC__'. Test Plan: New flags tests specific for the 'PIC Level' module flag. Tests to be added as part of a future commit for PowerPC, which will use this new API. Reviewers: rafael, echristo Reviewed By: rafael, echristo Subscribers: rafael, llvm-commits Differential Revision: http://reviews.llvm.org/D5882 llvm-svn: 221510
Diffstat (limited to 'llvm/lib/IR/Module.cpp')
-rw-r--r--llvm/lib/IR/Module.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp
index 35d2848..bc50db3 100644
--- a/llvm/lib/IR/Module.cpp
+++ b/llvm/lib/IR/Module.cpp
@@ -459,3 +459,16 @@ Comdat *Module::getOrInsertComdat(StringRef Name) {
Entry.second.Name = &Entry;
return &Entry.second;
}
+
+PICLevel::Level Module::getPICLevel() const {
+ Value *Val = getModuleFlag("PIC Level");
+
+ if (Val == NULL)
+ return PICLevel::Default;
+
+ return static_cast<PICLevel::Level>(cast<ConstantInt>(Val)->getZExtValue());
+}
+
+void Module::setPICLevel(PICLevel::Level PL) {
+ addModuleFlag(ModFlagBehavior::Error, "PIC Level", PL);
+}