Skip to content

Commit

Permalink
make many global variables constant
Browse files Browse the repository at this point in the history
  • Loading branch information
dwightguth committed Nov 25, 2024
1 parent 5e07327 commit bb64741
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/codegen/CreateStaticTerm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ llvm::Constant *create_static_term::not_injection_case(
llvm::Constant *block
= module_->getOrInsertGlobal(kore_string.str(), block_type);
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(block);
global_var->setConstant(true);

if (!global_var->hasInitializer()) {
std::vector<llvm::Constant *> block_vals;
Expand Down Expand Up @@ -151,6 +152,7 @@ create_static_term::create_token(value_type sort, std::string contents) {
"int_" + contents, llvm::StructType::getTypeByName(
module_->getContext(), int_wrapper_struct));
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
mpz_t value;
char const *data_start
Expand All @@ -163,6 +165,7 @@ create_static_term::create_token(value_type sort, std::string contents) {
llvm::Constant *limbs = module_->getOrInsertGlobal(
"int_" + contents + "_limbs", limbs_type);
auto *limbs_var = llvm::dyn_cast<llvm::GlobalVariable>(limbs);
limbs_var->setConstant(true);
std::vector<llvm::Constant *> allocd_limbs;
for (size_t i = 0; i < size; i++) {
allocd_limbs.push_back(llvm::ConstantInt::get(
Expand Down Expand Up @@ -205,6 +208,7 @@ create_static_term::create_token(value_type sort, std::string contents) {
"float_" + contents, llvm::StructType::getTypeByName(
module_->getContext(), float_wrapper_struct));
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
size_t prec = 0;
size_t exp = 0;
Expand Down Expand Up @@ -246,6 +250,7 @@ create_static_term::create_token(value_type sort, std::string contents) {
llvm::Constant *limbs = module_->getOrInsertGlobal(
"float_" + contents + "_limbs", limbs_type);
auto *limbs_var = llvm::dyn_cast<llvm::GlobalVariable>(limbs);
limbs_var->setConstant(true);
std::vector<llvm::Constant *> allocd_limbs;
for (size_t i = 0; i < size; i++) {
allocd_limbs.push_back(llvm::ConstantInt::get(
Expand Down Expand Up @@ -317,6 +322,7 @@ create_static_term::create_token(value_type sort, std::string contents) {
llvm::Constant *global
= module_->getOrInsertGlobal("token_" + escape(contents), string_type);
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
llvm::StructType *block_header_type = llvm::StructType::getTypeByName(
module_->getContext(), blockheader_struct);
Expand Down
2 changes: 2 additions & 0 deletions lib/codegen/Decision.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,7 @@ llvm::Constant *decision::string_literal(std::string const &str) {
auto *global
= module_->getOrInsertGlobal("str_lit_" + str, str_cst->getType());
auto *global_var = llvm::cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str_cst);
}
Expand Down Expand Up @@ -1091,6 +1092,7 @@ std::pair<std::vector<llvm::Value *>, llvm::BasicBlock *> step_function_header(
auto *layout = module->getOrInsertGlobal(
"layout_item_rule_" + std::to_string(ordinal), layout_arr->getType());
auto *global_var = llvm::cast<llvm::GlobalVariable>(layout);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(layout_arr);
}
Expand Down
13 changes: 13 additions & 0 deletions lib/codegen/EmitConfigParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ static llvm::Constant *get_symbol_name_ptr(
auto *global = module->getOrInsertGlobal(
fmt::format("sym_name_{}", name), str->getType());
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
}
Expand Down Expand Up @@ -144,6 +145,7 @@ static void emit_data_table_for_symbol(
auto *table_type = llvm::ArrayType::get(ty, syms.size());
auto *table = module->getOrInsertGlobal("table_" + name, table_type);
auto *global_var = llvm::cast<llvm::GlobalVariable>(table);
global_var->setConstant(true);
init_debug_global(
"table_" + name,
get_array_debug_type(
Expand Down Expand Up @@ -437,6 +439,7 @@ emit_get_tag_for_fresh_sort(kore_definition *definition, llvm::Module *module) {
auto *global
= module->getOrInsertGlobal("sort_name_" + name, str->getType());
auto *global_var = llvm::cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
}
Expand Down Expand Up @@ -504,6 +507,7 @@ static void emit_get_token(kore_definition *definition, llvm::Module *module) {
auto *global
= module->getOrInsertGlobal("sort_name_" + name, str->getType());
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
}
Expand Down Expand Up @@ -531,6 +535,7 @@ static void emit_get_token(kore_definition *definition, llvm::Module *module) {
auto *str = llvm::ConstantDataArray::getString(ctx, "true", false);
auto *global = module->getOrInsertGlobal("bool_true", str->getType());
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
}
Expand Down Expand Up @@ -625,6 +630,8 @@ static void emit_get_token(kore_definition *definition, llvm::Module *module) {
string_type, block, {zero, zero32, zero32}, "", current_block);
auto *block_size = module->getOrInsertGlobal(
"VAR_BLOCK_SIZE", llvm::Type::getInt64Ty(ctx));
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(block_size);
global_var->setConstant(true);
auto *block_size_val = new llvm::LoadInst(
llvm::Type::getInt64Ty(ctx), block_size, "", current_block);
auto *block_alloc_size = llvm::BinaryOperator::Create(
Expand Down Expand Up @@ -904,6 +911,7 @@ static void get_visitor(
auto *global = module->getOrInsertGlobal(
fmt::format("sort_name_{}", sort_name), str->getType());
auto *global_var = llvm::dyn_cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
}
Expand Down Expand Up @@ -1097,6 +1105,7 @@ static llvm::Constant *get_layout_data(
auto *global = module->getOrInsertGlobal(
"layout_item_" + std::to_string(layout), arr->getType());
auto *global_var = llvm::cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(arr);
}
Expand All @@ -1109,6 +1118,7 @@ static llvm::Constant *get_layout_data(
name,
llvm::StructType::getTypeByName(module->getContext(), layout_struct));
auto *global_var2 = llvm::cast<llvm::GlobalVariable>(global2);
global_var2->setConstant(true);
init_debug_global(name, get_forward_decl(layout_struct), global_var2);
if (!global_var2->hasInitializer()) {
global_var2->setInitializer(llvm::ConstantStruct::get(
Expand Down Expand Up @@ -1201,6 +1211,7 @@ static void emit_sort_table_for_proof_trace_serialization(
auto *subtable = module->getOrInsertGlobal(
fmt::format("sort_tags_{}", ast_to_string(*symbol)), subtable_type);
auto *subtable_var = llvm::dyn_cast<llvm::GlobalVariable>(subtable);
subtable_var->setConstant(true);
init_debug_global(
"sort_tags_" + symbol->get_name(),
get_array_debug_type(
Expand Down Expand Up @@ -1246,6 +1257,7 @@ static void emit_sort_table(kore_definition *def, llvm::Module *mod) {
auto *subtable = module->getOrInsertGlobal(
fmt::format("sorts_{}", ast_to_string(*symbol)), subtable_type);
auto *subtable_var = llvm::dyn_cast<llvm::GlobalVariable>(subtable);
subtable_var->setConstant(true);
init_debug_global(
"sorts_" + symbol->get_name(),
get_array_debug_type(
Expand Down Expand Up @@ -1304,6 +1316,7 @@ static void emit_return_sort_table(kore_definition *def, llvm::Module *mod) {
auto *sort_name
= module->getOrInsertGlobal("sort_name_" + sort_str, str_type);
auto *global_var = llvm::cast<llvm::GlobalVariable>(sort_name);
global_var->setConstant(true);
if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
}
Expand Down
2 changes: 2 additions & 0 deletions lib/codegen/Metadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ void add_boolean_flag(

auto *global = mod.getOrInsertGlobal(name, i1_ty);
auto *global_var = llvm::cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);

if (!global_var->hasInitializer()) {
global_var->setInitializer(enabled_cst);
Expand All @@ -44,6 +45,7 @@ void add_kompiled_dir_symbol(

auto *global = mod.getOrInsertGlobal(kompiled_dir, str->getType());
auto *global_var = llvm::cast<llvm::GlobalVariable>(global);
global_var->setConstant(true);

if (!global_var->hasInitializer()) {
global_var->setInitializer(str);
Expand Down

0 comments on commit bb64741

Please sign in to comment.