summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/IRForTarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Expression/IRForTarget.cpp')
-rw-r--r--lldb/source/Expression/IRForTarget.cpp139
1 files changed, 12 insertions, 127 deletions
diff --git a/lldb/source/Expression/IRForTarget.cpp b/lldb/source/Expression/IRForTarget.cpp
index 2b3618a53a7..1c1f120b86c 100644
--- a/lldb/source/Expression/IRForTarget.cpp
+++ b/lldb/source/Expression/IRForTarget.cpp
@@ -42,6 +42,7 @@ static char ID;
IRForTarget::StaticDataAllocator::StaticDataAllocator(lldb_private::IRExecutionUnit &execution_unit) :
m_execution_unit(execution_unit),
+ m_stream_string(lldb_private::Stream::eBinary, execution_unit.GetAddressByteSize(), execution_unit.GetByteOrder()),
m_allocation(LLDB_INVALID_ADDRESS)
{
}
@@ -63,15 +64,11 @@ lldb::addr_t IRForTarget::StaticDataAllocator::Allocate()
IRForTarget::IRForTarget (lldb_private::ClangExpressionDeclMap *decl_map,
bool resolve_vars,
- lldb_private::ExecutionPolicy execution_policy,
- lldb::ClangExpressionVariableSP &const_result,
lldb_private::IRExecutionUnit &execution_unit,
lldb_private::Stream *error_stream,
const char *func_name) :
ModulePass(ID),
m_resolve_vars(resolve_vars),
- m_execution_policy(execution_policy),
- m_interpret_success(false),
m_func_name(func_name),
m_module(NULL),
m_decl_map(decl_map),
@@ -79,7 +76,6 @@ IRForTarget::IRForTarget (lldb_private::ClangExpressionDeclMap *decl_map,
m_memory_map(execution_unit),
m_CFStringCreateWithBytes(NULL),
m_sel_registerName(NULL),
- m_const_result(const_result),
m_error_stream(error_stream),
m_has_side_effects(false),
m_result_store(NULL),
@@ -444,97 +440,6 @@ IRForTarget::DeclForGlobal (GlobalValue *global_val)
return DeclForGlobal(global_val, m_module);
}
-void
-IRForTarget::MaybeSetConstantResult (llvm::Constant *initializer,
- const lldb_private::ConstString &name,
- lldb_private::TypeFromParser type)
-{
- if (llvm::ConstantExpr *init_expr = dyn_cast<llvm::ConstantExpr>(initializer))
- {
- switch (init_expr->getOpcode())
- {
- default:
- return;
- case Instruction::IntToPtr:
- MaybeSetConstantResult (init_expr->getOperand(0), name, type);
- return;
- }
- }
- else if (llvm::ConstantInt *init_int = dyn_cast<llvm::ConstantInt>(initializer))
- {
- m_const_result = m_decl_map->BuildIntegerVariable(name, type, init_int->getValue());
- }
-}
-
-void
-IRForTarget::MaybeSetCastResult (lldb_private::TypeFromParser type)
-{
- lldb_private::Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
-
- if (!m_result_store)
- return;
-
- LoadInst *original_load = NULL;
-
- for (llvm::Value *current_value = m_result_store->getValueOperand(), *next_value;
- current_value != NULL;
- current_value = next_value)
- {
- CastInst *cast_inst = dyn_cast<CastInst>(current_value);
- LoadInst *load_inst = dyn_cast<LoadInst>(current_value);
-
- if (cast_inst)
- {
- next_value = cast_inst->getOperand(0);
- }
- else if (load_inst)
- {
- if (isa<LoadInst>(load_inst->getPointerOperand()))
- {
- next_value = load_inst->getPointerOperand();
- }
- else
- {
- original_load = load_inst;
- break;
- }
- }
- else
- {
- return;
- }
- }
-
- if (!original_load)
- return;
-
- Value *loaded_value = original_load->getPointerOperand();
- GlobalVariable *loaded_global = dyn_cast<GlobalVariable>(loaded_value);
-
- if (!loaded_global)
- return;
-
- clang::NamedDecl *loaded_decl = DeclForGlobal(loaded_global);
-
- if (!loaded_decl)
- return;
-
- clang::VarDecl *loaded_var = dyn_cast<clang::VarDecl>(loaded_decl);
-
- if (!loaded_var)
- return;
-
- if (log)
- {
- lldb_private::StreamString type_desc_stream;
- type.DumpTypeDescription(&type_desc_stream);
-
- log->Printf("Type to cast variable to: \"%s\"", type_desc_stream.GetString().c_str());
- }
-
- m_const_result = m_decl_map->BuildCastVariable(m_result_name, loaded_var, type);
-}
-
bool
IRForTarget::CreateResultVariable (llvm::Function &llvm_function)
{
@@ -714,7 +619,7 @@ IRForTarget::CreateResultVariable (llvm::Function &llvm_function)
log->Printf("Result decl type: \"%s\"", type_desc_stream.GetData());
}
- m_result_name = m_decl_map->GetPersistentResultName();
+ m_result_name = lldb_private::ConstString("$RESULT_NAME");
if (log)
log->Printf("Creating a new result global: \"%s\" with size 0x%" PRIx64,
@@ -806,15 +711,14 @@ IRForTarget::CreateResultVariable (llvm::Function &llvm_function)
result_global->replaceAllUsesWith(new_result_global);
}
-
- if (!m_const_result)
- if (!m_decl_map->AddPersistentVariable(result_decl,
- m_result_name,
- m_result_type,
- true,
- m_result_is_pointer))
- return false;
+ if (!m_decl_map->AddPersistentVariable(result_decl,
+ m_result_name,
+ m_result_type,
+ true,
+ m_result_is_pointer))
+ return false;
+
result_global->eraseFromParent();
return true;
@@ -2138,10 +2042,11 @@ IRForTarget::ReplaceStaticLiterals (llvm::BasicBlock &basic_block)
llvm::Instruction *inst = *user_iter;
ConstantFP *operand_constant_fp = dyn_cast<ConstantFP>(operand_val);
- Type *operand_type = operand_constant_fp->getType();
if (operand_constant_fp)
{
+ Type *operand_type = operand_constant_fp->getType();
+
APFloat operand_apfloat = operand_constant_fp->getValueAPF();
APInt operand_apint = operand_apfloat.bitcastToAPInt();
@@ -2195,7 +2100,7 @@ IRForTarget::ReplaceStaticLiterals (llvm::BasicBlock &basic_block)
llvm::Type *fp_ptr_ty = operand_constant_fp->getType()->getPointerTo();
- Constant *new_pointer = BuildRelocation(fp_ptr_ty, offset);
+ Constant *new_pointer = BuildRelocation(fp_ptr_ty, aligned_offset);
llvm::LoadInst *fp_load = new llvm::LoadInst(new_pointer, "fp_load", inst);
@@ -2762,12 +2667,6 @@ IRForTarget::runOnModule (Module &llvm_module)
return false;
}
-
- if (m_const_result && m_execution_policy != lldb_private::eExecutionPolicyAlways)
- {
- m_interpret_success = true;
- return true;
- }
for (bbi = function->begin();
bbi != function->end();
@@ -2804,20 +2703,6 @@ IRForTarget::runOnModule (Module &llvm_module)
}
}
- if (m_decl_map && m_execution_policy != lldb_private::eExecutionPolicyAlways)
- {
- IRInterpreter::maybeRunOnFunction(m_decl_map, m_memory_map, m_error_stream,m_const_result, m_result_name, m_result_type, *function, llvm_module, m_interpreter_error);
-
- if (m_interpreter_error.Success())
- return true;
- }
-
- if (m_execution_policy == lldb_private::eExecutionPolicyNever) {
- if (m_result_name)
- m_decl_map->RemoveResultVariable(m_result_name);
- return false;
- }
-
if (log && log->GetVerbose())
{
std::string s;
OpenPOWER on IntegriCloud