| ... | ... | @@ -376,6 +376,7 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) { |
| 376 | 376 | } |
| 377 | 377 | fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value); |
| 378 | 378 | |
| 379 | // TODO this is for testing windows DLL stuff |
| 379 | 380 | //if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") || |
| 380 | 381 | // buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") || |
| 381 | 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 | 449 | } |
| 449 | 450 | if (fn_table_entry->alignment) { |
| 450 | 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 | } |
| 452 | 459 | |
| 453 | 460 | return fn_table_entry->llvm_value; |
| ... | ... | @@ -596,6 +603,7 @@ static LLVMValueRef get_floor_ceil_fn(CodeGen *g, TypeTableEntry *type_entry, Zi |
| 596 | 603 | sprintf(fn_name, "llvm.%s.f%" ZIG_PRI_usize "", name, type_entry->data.floating.bit_count); |
| 597 | 604 | LLVMTypeRef fn_type = LLVMFunctionType(type_entry->type_ref, &type_entry->type_ref, 1, false); |
| 598 | 605 | LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type); |
| 606 | assert(LLVMGetIntrinsicID(fn_val)); |
| 599 | 607 | |
| 600 | 608 | g->llvm_fn_table.put(key, fn_val); |
| 601 | 609 | return fn_val; |
| ... | ... | @@ -830,6 +838,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) { |
| 830 | 838 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true"); |
| 831 | 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)); |
| 833 | 842 | |
| 834 | 843 | LLVMBasicBlockRef entry_block = LLVMAppendBasicBlock(fn_val, "Entry"); |
| 835 | 844 | LLVMBasicBlockRef prev_block = LLVMGetInsertBlock(g->builder); |
| ... | ... | @@ -2478,6 +2487,7 @@ static LLVMValueRef get_int_builtin_fn(CodeGen *g, TypeTableEntry *int_type, Bui |
| 2478 | 2487 | }; |
| 2479 | 2488 | LLVMTypeRef fn_type = LLVMFunctionType(int_type->type_ref, param_types, 2, false); |
| 2480 | 2489 | LLVMValueRef fn_val = LLVMAddFunction(g->module, llvm_name, fn_type); |
| 2490 | assert(LLVMGetIntrinsicID(fn_val)); |
| 2481 | 2491 | |
| 2482 | 2492 | g->llvm_fn_table.put(key, fn_val); |
| 2483 | 2493 | |