Skip to content

Commit 2a49c87

Browse files
committed
audit alignment for functions
see #37
1 parent 95aed8c commit 2a49c87

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/codegen.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
376376
}
377377
fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value);
378378

379+
// TODO this is for testing windows DLL stuff
379380
//if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") ||
380381
// buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") ||
381382
// buf_eql_str(&fn_table_entry->symbol_name, "GetStdHandle") ||
@@ -448,6 +449,12 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
448449
}
449450
if (fn_table_entry->alignment) {
450451
LLVMSetAlignment(fn_table_entry->llvm_value, (unsigned)fn_table_entry->alignment);
452+
} else if (external_linkage) {
453+
LLVMSetAlignment(fn_table_entry->llvm_value,
454+
LLVMABIAlignmentOfType(g->target_data_ref, fn_table_entry->type_entry->data.fn.raw_type_ref));
455+
} else {
456+
LLVMSetAlignment(fn_table_entry->llvm_value,
457+
LLVMPreferredAlignmentOfType(g->target_data_ref, fn_table_entry->type_entry->data.fn.raw_type_ref));
451458
}
452459

453460
return fn_table_entry->llvm_value;
@@ -596,6 +603,7 @@ static LLVMValueRef get_floor_ceil_fn(CodeGen *g, TypeTableEntry *type_entry, Zi
596603
sprintf(fn_name, "llvm.%s.f%" ZIG_PRI_usize "", name, type_entry->data.floating.bit_count);
597604
LLVMTypeRef fn_type = LLVMFunctionType(type_entry->type_ref, &type_entry->type_ref, 1, false);
598605
LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type);
606+
assert(LLVMGetIntrinsicID(fn_val));
599607

600608
g->llvm_fn_table.put(key, fn_val);
601609
return fn_val;
@@ -830,6 +838,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
830838
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
831839
ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
832840
}
841+
LLVMSetAlignment(fn_val, LLVMPreferredAlignmentOfType(g->target_data_ref, fn_type_ref));
833842

834843
LLVMBasicBlockRef entry_block = LLVMAppendBasicBlock(fn_val, "Entry");
835844
LLVMBasicBlockRef prev_block = LLVMGetInsertBlock(g->builder);
@@ -2478,6 +2487,7 @@ static LLVMValueRef get_int_builtin_fn(CodeGen *g, TypeTableEntry *int_type, Bui
24782487
};
24792488
LLVMTypeRef fn_type = LLVMFunctionType(int_type->type_ref, param_types, 2, false);
24802489
LLVMValueRef fn_val = LLVMAddFunction(g->module, llvm_name, fn_type);
2490+
assert(LLVMGetIntrinsicID(fn_val));
24812491

24822492
g->llvm_fn_table.put(key, fn_val);
24832493

0 commit comments

Comments
 (0)