Enable emission of debugger-friendly bitcode
- Add "-g" flag to llvm-rs-cc in order to emit debug metadata
- Add optimization level parameter -O and tests
- Add lit based tests (use llvm-lit from libbcc/tests/debuginfo)
-- Add README file for lit-tests directory
Change-Id: I5e2f6f9b6f536fa7a10de008b54ac0878cf352a9
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index d4a081b..6602130 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -19,6 +19,8 @@
#include <string>
#include <vector>
+#include "clang/Frontend/CodeGenOptions.h"
+
#include "llvm/ADT/Twine.h"
#include "llvm/ADT/StringExtras.h"
@@ -29,6 +31,7 @@
#include "llvm/Metadata.h"
#include "llvm/Module.h"
+#include "llvm/Support/DebugLoc.h"
#include "llvm/Support/IRBuilder.h"
#include "slang_assert.h"
@@ -60,6 +63,7 @@
mExportForEachMetadata(NULL),
mExportTypeMetadata(NULL),
mRSObjectSlotsMetadata(NULL),
+ mRSOptimizationMetadata(NULL),
mRefCount(mContext->getASTContext()) {
}
@@ -194,6 +198,16 @@
return;
}
+ // Write optimization level
+ llvm::SmallVector<llvm::Value*, 1> OptimizationOption;
+ OptimizationOption.push_back(llvm::ConstantInt::get(
+ mLLVMContext, llvm::APInt(32, mCodeGenOpts.OptimizationLevel)));
+
+ if (mRSOptimizationMetadata == NULL)
+ mRSOptimizationMetadata = M->getOrInsertNamedMetadata(OPTIMIZATION_LEVEL_MN);
+ mRSOptimizationMetadata->addOperand(
+ llvm::MDNode::get(mLLVMContext, OptimizationOption));
+
// Dump export variable info
if (mContext->hasExportVar()) {
int slotCount = 0;