authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-08-26 15:20:39-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-08-26 15:20:39-04:00
log2a49c876be76dc98996a3251310728ad32b22363
treeb393bff8404fdee0586ca5ab1f6a6ffcd962f28a
parent95aed8c4575dc6f70e4368b9db527c6cec12acfa

audit alignment for functions

see #37

1 files changed, 10 insertions(+), 0 deletions(-)

src/codegen.cpp+10
...@@ -376,6 +376,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {...@@ -376,6 +376,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
376 }376 }
377 fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value);377 fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value);
378378
379 // TODO this is for testing windows DLL stuff
379 //if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") ||380 //if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") ||
380 // buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") ||381 // buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") ||
381 // buf_eql_str(&fn_table_entry->symbol_name, "GetStdHandle") ||382 // buf_eql_str(&fn_table_entry->symbol_name, "GetStdHandle") ||
...@@ -448,6 +449,12 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {...@@ -448,6 +449,12 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) {
448 }449 }
449 if (fn_table_entry->alignment) {450 if (fn_table_entry->alignment) {
450 LLVMSetAlignment(fn_table_entry->llvm_value, (unsigned)fn_table_entry->alignment);451 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));
451 }458 }
452459
453 return fn_table_entry->llvm_value;460 return fn_table_entry->llvm_value;
...@@ -596,6 +603,7 @@ static LLVMValueRef get_floor_ceil_fn(CodeGen *g, TypeTableEntry *type_entry, Zi...@@ -596,6 +603,7 @@ static LLVMValueRef get_floor_ceil_fn(CodeGen *g, TypeTableEntry *type_entry, Zi
596 sprintf(fn_name, "llvm.%s.f%" ZIG_PRI_usize "", name, type_entry->data.floating.bit_count);603 sprintf(fn_name, "llvm.%s.f%" ZIG_PRI_usize "", name, type_entry->data.floating.bit_count);
597 LLVMTypeRef fn_type = LLVMFunctionType(type_entry->type_ref, &type_entry->type_ref, 1, false);604 LLVMTypeRef fn_type = LLVMFunctionType(type_entry->type_ref, &type_entry->type_ref, 1, false);
598 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type);605 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type);
606 assert(LLVMGetIntrinsicID(fn_val));
599607
600 g->llvm_fn_table.put(key, fn_val);608 g->llvm_fn_table.put(key, fn_val);
601 return fn_val;609 return fn_val;
...@@ -830,6 +838,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {...@@ -830,6 +838,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
830 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");838 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
831 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);839 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr);
832 }840 }
841 LLVMSetAlignment(fn_val, LLVMPreferredAlignmentOfType(g->target_data_ref, fn_type_ref));
833842
834 LLVMBasicBlockRef entry_block = LLVMAppendBasicBlock(fn_val, "Entry");843 LLVMBasicBlockRef entry_block = LLVMAppendBasicBlock(fn_val, "Entry");
835 LLVMBasicBlockRef prev_block = LLVMGetInsertBlock(g->builder);844 LLVMBasicBlockRef prev_block = LLVMGetInsertBlock(g->builder);
...@@ -2478,6 +2487,7 @@ static LLVMValueRef get_int_builtin_fn(CodeGen *g, TypeTableEntry *int_type, Bui...@@ -2478,6 +2487,7 @@ static LLVMValueRef get_int_builtin_fn(CodeGen *g, TypeTableEntry *int_type, Bui
2478 };2487 };
2479 LLVMTypeRef fn_type = LLVMFunctionType(int_type->type_ref, param_types, 2, false);2488 LLVMTypeRef fn_type = LLVMFunctionType(int_type->type_ref, param_types, 2, false);
2480 LLVMValueRef fn_val = LLVMAddFunction(g->module, llvm_name, fn_type);2489 LLVMValueRef fn_val = LLVMAddFunction(g->module, llvm_name, fn_type);
2490 assert(LLVMGetIntrinsicID(fn_val));
24812491
2482 g->llvm_fn_table.put(key, fn_val);2492 g->llvm_fn_table.put(key, fn_val);
24832493