authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-03-08 18:56:14-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-03-08 18:56:14-07:00
log76e15418038e708e13189c2ba6d5ac5ab50fc006
treed5b390d29b1f4a390016fe1e932ba1b533f82298
parent17a36859e75e3cfb9e089c49ff5eed09832edb61

update to llvm 3.8.0


8 files changed, 94 insertions(+), 94 deletions(-)

cmake/Findclang.cmake+2-2
...@@ -8,14 +8,14 @@...@@ -8,14 +8,14 @@
88
9find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h9find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h
10 PATHS10 PATHS
11 /usr/lib/llvm-3.7/include11 /usr/lib/llvm-3.8/include
12 /mingw64/include)12 /mingw64/include)
1313
14macro(FIND_AND_ADD_CLANG_LIB _libname_)14macro(FIND_AND_ADD_CLANG_LIB _libname_)
15 string(TOUPPER ${_libname_} _prettylibname_)15 string(TOUPPER ${_libname_} _prettylibname_)
16 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_}16 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_}
17 PATHS17 PATHS
18 /usr/lib/llvm-3.7/lib18 /usr/lib/llvm-3.8/lib
19 /mingw64/lib)19 /mingw64/lib)
20 if(CLANG_${_prettylibname_}_LIB)20 if(CLANG_${_prettylibname_}_LIB)
21 set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB})21 set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB})
cmake/Findllvm.cmake+1-1
...@@ -7,7 +7,7 @@...@@ -7,7 +7,7 @@
7# LLVM_LIBRARIES7# LLVM_LIBRARIES
8# LLVM_LIBDIRS8# LLVM_LIBDIRS
99
10find_program(LLVM_CONFIG_EXE NAMES llvm-config llvm-config-3.7)10find_program(LLVM_CONFIG_EXE NAMES llvm-config llvm-config-3.8)
1111
12execute_process(12execute_process(
13 COMMAND ${LLVM_CONFIG_EXE} --libs13 COMMAND ${LLVM_CONFIG_EXE} --libs
src/analyze.cpp+2-4
...@@ -658,9 +658,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {...@@ -658,9 +658,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
658 fn_type->data.fn.raw_type_ref = LLVMFunctionType(gen_return_type->type_ref,658 fn_type->data.fn.raw_type_ref = LLVMFunctionType(gen_return_type->type_ref,
659 gen_param_types, gen_param_index, fn_type_id->is_var_args);659 gen_param_types, gen_param_index, fn_type_id->is_var_args);
660 fn_type->type_ref = LLVMPointerType(fn_type->data.fn.raw_type_ref, 0);660 fn_type->type_ref = LLVMPointerType(fn_type->data.fn.raw_type_ref, 0);
661 LLVMZigDIFile *di_file = nullptr;661 fn_type->di_type = LLVMZigCreateSubroutineType(g->dbuilder, param_di_types, gen_param_index + 1, 0);
662 fn_type->di_type = LLVMZigCreateSubroutineType(g->dbuilder, di_file,
663 param_di_types, gen_param_index + 1, 0);
664662
665 g->fn_type_table.put(&fn_type->data.fn.fn_type_id, fn_type);663 g->fn_type_table.put(&fn_type->data.fn.fn_type_id, fn_type);
666664
...@@ -997,7 +995,7 @@ static void resolve_function_proto(CodeGen *g, AstNode *node, FnTableEntry *fn_t...@@ -997,7 +995,7 @@ static void resolve_function_proto(CodeGen *g, AstNode *node, FnTableEntry *fn_t
997 import->block_context->di_scope, buf_ptr(&fn_table_entry->symbol_name), "",995 import->block_context->di_scope, buf_ptr(&fn_table_entry->symbol_name), "",
998 import->di_file, line_number,996 import->di_file, line_number,
999 fn_type->di_type, fn_table_entry->internal_linkage,997 fn_type->di_type, fn_table_entry->internal_linkage,
1000 is_definition, scope_line, flags, is_optimized, fn_table_entry->fn_value);998 is_definition, scope_line, flags, is_optimized, nullptr);
1001999
1002 BlockContext *context = new_block_context(fn_table_entry->fn_def_node, import->block_context);1000 BlockContext *context = new_block_context(fn_table_entry->fn_def_node, import->block_context);
1003 fn_table_entry->fn_def_node->data.fn_def.block_context = context;1001 fn_table_entry->fn_def_node->data.fn_def.block_context = context;
src/codegen.cpp+8-12
...@@ -3216,21 +3216,18 @@ static void do_code_gen(CodeGen *g) {...@@ -3216,21 +3216,18 @@ static void do_code_gen(CodeGen *g) {
3216 continue;3216 continue;
3217 }3217 }
32183218
3219 unsigned tag;
3220 unsigned arg_no;
3221 TypeTableEntry *gen_type;3219 TypeTableEntry *gen_type;
3222 if (var->block_context->node->type == NodeTypeFnDef) {3220 if (var->block_context->node->type == NodeTypeFnDef) {
3223 tag = LLVMZigTag_DW_arg_variable();
3224 arg_no = var->gen_arg_index + 1;
3225
3226 var->is_ptr = false;3221 var->is_ptr = false;
3227 assert(var->gen_arg_index >= 0);3222 assert(var->gen_arg_index >= 0);
3228 var->value_ref = LLVMGetParam(fn, var->gen_arg_index);3223 var->value_ref = LLVMGetParam(fn, var->gen_arg_index);
32293224
3230 gen_type = fn_table_entry->type_entry->data.fn.gen_param_info[var->src_arg_index].type;3225 gen_type = fn_table_entry->type_entry->data.fn.gen_param_info[var->src_arg_index].type;
3226
3227 var->di_loc_var = LLVMZigCreateParameterVariable(g->dbuilder, var->block_context->di_scope,
3228 buf_ptr(&var->name), import->di_file, var->decl_node->line + 1,
3229 gen_type->di_type, !g->strip_debug_symbols, 0, var->gen_arg_index + 1);
3231 } else {3230 } else {
3232 tag = LLVMZigTag_DW_auto_variable();
3233 arg_no = 0;
32343231
3235 add_debug_source_node(g, var->decl_node);3232 add_debug_source_node(g, var->decl_node);
3236 var->value_ref = LLVMBuildAlloca(g->builder, var->type->type_ref, buf_ptr(&var->name));3233 var->value_ref = LLVMBuildAlloca(g->builder, var->type->type_ref, buf_ptr(&var->name));
...@@ -3238,12 +3235,11 @@ static void do_code_gen(CodeGen *g) {...@@ -3238,12 +3235,11 @@ static void do_code_gen(CodeGen *g) {
3238 LLVMSetAlignment(var->value_ref, align_bytes);3235 LLVMSetAlignment(var->value_ref, align_bytes);
32393236
3240 gen_type = var->type;3237 gen_type = var->type;
3241 }
32423238
3243 var->di_loc_var = LLVMZigCreateLocalVariable(g->dbuilder, tag,3239 var->di_loc_var = LLVMZigCreateAutoVariable(g->dbuilder, var->block_context->di_scope,
3244 var->block_context->di_scope, buf_ptr(&var->name),3240 buf_ptr(&var->name), import->di_file, var->decl_node->line + 1,
3245 import->di_file, var->decl_node->line + 1,3241 gen_type->di_type, !g->strip_debug_symbols, 0);
3246 gen_type->di_type, !g->strip_debug_symbols, 0, arg_no);3242 }
3247 }3243 }
32483244
3249 // create debug variable declarations for parameters3245 // create debug variable declarations for parameters
src/parseh.cpp+14-2
...@@ -370,6 +370,17 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const...@@ -370,6 +370,17 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const
370 case BuiltinType::OCLImage1dBuffer:370 case BuiltinType::OCLImage1dBuffer:
371 case BuiltinType::OCLImage2d:371 case BuiltinType::OCLImage2d:
372 case BuiltinType::OCLImage2dArray:372 case BuiltinType::OCLImage2dArray:
373 case BuiltinType::OCLImage2dArrayDepth:
374 case BuiltinType::OCLImage2dDepth:
375 case BuiltinType::OCLImage2dMSAA:
376 case BuiltinType::OCLImage2dArrayMSAA:
377 case BuiltinType::OCLImage2dMSAADepth:
378 case BuiltinType::OCLImage2dArrayMSAADepth:
379 case BuiltinType::OCLClkEvent:
380 case BuiltinType::OCLQueue:
381 case BuiltinType::OCLNDRange:
382 case BuiltinType::OCLReserveID:
383 case BuiltinType::OMPArraySection:
373 case BuiltinType::OCLImage3d:384 case BuiltinType::OCLImage3d:
374 case BuiltinType::OCLSampler:385 case BuiltinType::OCLSampler:
375 case BuiltinType::OCLEvent:386 case BuiltinType::OCLEvent:
...@@ -626,6 +637,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const...@@ -626,6 +637,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const
626 case Type::Complex:637 case Type::Complex:
627 case Type::ObjCObjectPointer:638 case Type::ObjCObjectPointer:
628 case Type::Atomic:639 case Type::Atomic:
640 case Type::Pipe:
629 emit_warning(c, decl, "missed a '%s' type", ty->getTypeClassName());641 emit_warning(c, decl, "missed a '%s' type", ty->getTypeClassName());
630 return c->codegen->builtin_types.entry_invalid;642 return c->codegen->builtin_types.entry_invalid;
631 }643 }
...@@ -1598,9 +1610,9 @@ int parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const ch...@@ -1598,9 +1610,9 @@ int parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const ch
1598 std::unique_ptr<ASTUnit> ast_unit(ASTUnit::LoadFromCommandLine(1610 std::unique_ptr<ASTUnit> ast_unit(ASTUnit::LoadFromCommandLine(
1599 &clang_argv.at(0), &clang_argv.last(),1611 &clang_argv.at(0), &clang_argv.last(),
1600 pch_container_ops, diags, resources_path,1612 pch_container_ops, diags, resources_path,
1601 only_local_decls, capture_diagnostics, None, true, false, TU_Complete,1613 only_local_decls, capture_diagnostics, None, true, 0, TU_Complete,
1602 false, false, allow_pch_with_compiler_errors, skip_function_bodies,1614 false, false, allow_pch_with_compiler_errors, skip_function_bodies,
1603 user_files_are_volatile, false, &err_unit));1615 user_files_are_volatile, false, None, &err_unit));
16041616
16051617
1606 // Early failures in LoadFromCommandLine may return with ErrUnit unset.1618 // Early failures in LoadFromCommandLine may return with ErrUnit unset.
src/target.cpp+14-1
...@@ -12,12 +12,14 @@...@@ -12,12 +12,14 @@
12#include <stdio.h>12#include <stdio.h>
1313
14static const ArchType arch_list[] = {14static const ArchType arch_list[] = {
15 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_2a},
15 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a},16 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a},
16 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8},17 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8},
17 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7},18 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7},
18 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em},19 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em},
19 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m},20 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m},
20 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s},21 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s},
22 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7k},
21 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6},23 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6},
22 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m},24 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m},
23 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k},25 {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k},
...@@ -29,6 +31,7 @@ static const ArchType arch_list[] = {...@@ -29,6 +31,7 @@ static const ArchType arch_list[] = {
29 {ZigLLVM_armeb, ZigLLVM_NoSubArch},31 {ZigLLVM_armeb, ZigLLVM_NoSubArch},
30 {ZigLLVM_aarch64, ZigLLVM_NoSubArch},32 {ZigLLVM_aarch64, ZigLLVM_NoSubArch},
31 {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch},33 {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch},
34 {ZigLLVM_avr, ZigLLVM_NoSubArch},
32 {ZigLLVM_bpfel, ZigLLVM_NoSubArch},35 {ZigLLVM_bpfel, ZigLLVM_NoSubArch},
33 {ZigLLVM_bpfeb, ZigLLVM_NoSubArch},36 {ZigLLVM_bpfeb, ZigLLVM_NoSubArch},
34 {ZigLLVM_hexagon, ZigLLVM_NoSubArch},37 {ZigLLVM_hexagon, ZigLLVM_NoSubArch},
...@@ -84,6 +87,7 @@ static const ZigLLVM_VendorType vendor_list[] = {...@@ -84,6 +87,7 @@ static const ZigLLVM_VendorType vendor_list[] = {
84 ZigLLVM_MipsTechnologies,87 ZigLLVM_MipsTechnologies,
85 ZigLLVM_NVIDIA,88 ZigLLVM_NVIDIA,
86 ZigLLVM_CSR,89 ZigLLVM_CSR,
90 ZigLLVM_Myriad,
87};91};
8892
89static const ZigLLVM_OSType os_list[] = {93static const ZigLLVM_OSType os_list[] = {
...@@ -112,6 +116,9 @@ static const ZigLLVM_OSType os_list[] = {...@@ -112,6 +116,9 @@ static const ZigLLVM_OSType os_list[] = {
112 ZigLLVM_NVCL,116 ZigLLVM_NVCL,
113 ZigLLVM_AMDHSA,117 ZigLLVM_AMDHSA,
114 ZigLLVM_PS4,118 ZigLLVM_PS4,
119 ZigLLVM_ELFIAMCU,
120 ZigLLVM_TvOS,
121 ZigLLVM_WatchOS,
115};122};
116123
117static const ZigLLVM_EnvironmentType environ_list[] = {124static const ZigLLVM_EnvironmentType environ_list[] = {
...@@ -126,6 +133,8 @@ static const ZigLLVM_EnvironmentType environ_list[] = {...@@ -126,6 +133,8 @@ static const ZigLLVM_EnvironmentType environ_list[] = {
126 ZigLLVM_MSVC,133 ZigLLVM_MSVC,
127 ZigLLVM_Itanium,134 ZigLLVM_Itanium,
128 ZigLLVM_Cygnus,135 ZigLLVM_Cygnus,
136 ZigLLVM_AMDOpenCL,
137 ZigLLVM_CoreCLR,
129};138};
130139
131int target_arch_count(void) {140int target_arch_count(void) {
...@@ -293,12 +302,13 @@ void resolve_target_object_format(ZigTarget *target) {...@@ -293,12 +302,13 @@ void resolve_target_object_format(ZigTarget *target) {
293 target->oformat = ZigLLVM_ELF;302 target->oformat = ZigLLVM_ELF;
294}303}
295304
296305// See lib/Support/Triple.cpp in LLVM for the source of this data.
297static int get_arch_pointer_bit_width(ZigLLVM_ArchType arch) {306static int get_arch_pointer_bit_width(ZigLLVM_ArchType arch) {
298 switch (arch) {307 switch (arch) {
299 case ZigLLVM_UnknownArch:308 case ZigLLVM_UnknownArch:
300 return 0;309 return 0;
301310
311 case ZigLLVM_avr:
302 case ZigLLVM_msp430:312 case ZigLLVM_msp430:
303 return 16;313 return 16;
304314
...@@ -408,6 +418,9 @@ int get_c_type_size_in_bits(const ZigTarget *target, CIntType id) {...@@ -408,6 +418,9 @@ int get_c_type_size_in_bits(const ZigTarget *target, CIntType id) {
408 case ZigLLVM_NVCL:418 case ZigLLVM_NVCL:
409 case ZigLLVM_AMDHSA:419 case ZigLLVM_AMDHSA:
410 case ZigLLVM_PS4:420 case ZigLLVM_PS4:
421 case ZigLLVM_ELFIAMCU:
422 case ZigLLVM_TvOS:
423 case ZigLLVM_WatchOS:
411 zig_panic("TODO c type size in bits for this target");424 zig_panic("TODO c type size in bits for this target");
412 }425 }
413 zig_unreachable();426 zig_unreachable();
src/zig_llvm.cpp+31-61
...@@ -307,7 +307,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type,...@@ -307,7 +307,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type,
307}307}
308308
309LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,309LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
310 LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags)310 LLVMZigDIType **types_array, int types_array_len, unsigned flags)
311{311{
312 SmallVector<Metadata *, 8> types;312 SmallVector<Metadata *, 8> types;
313 for (int i = 0; i < types_array_len; i += 1) {313 for (int i = 0; i < types_array_len; i += 1) {
...@@ -316,7 +316,6 @@ LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,...@@ -316,7 +316,6 @@ LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
316 }316 }
317 DIBuilder *dibuilder = reinterpret_cast<DIBuilder*>(dibuilder_wrapped);317 DIBuilder *dibuilder = reinterpret_cast<DIBuilder*>(dibuilder_wrapped);
318 DISubroutineType *subroutine_type = dibuilder->createSubroutineType(318 DISubroutineType *subroutine_type = dibuilder->createSubroutineType(
319 reinterpret_cast<DIFile*>(file),
320 dibuilder->getOrCreateTypeArray(types),319 dibuilder->getOrCreateTypeArray(types),
321 flags);320 flags);
322 DIType *ditype = subroutine_type;321 DIType *ditype = subroutine_type;
...@@ -351,12 +350,8 @@ unsigned LLVMZigLang_DW_LANG_C99(void) {...@@ -351,12 +350,8 @@ unsigned LLVMZigLang_DW_LANG_C99(void) {
351 return dwarf::DW_LANG_C99;350 return dwarf::DW_LANG_C99;
352}351}
353352
354unsigned LLVMZigTag_DW_auto_variable(void) {353unsigned LLVMZigTag_DW_variable(void) {
355 return dwarf::DW_TAG_auto_variable;354 return dwarf::DW_TAG_variable;
356}
357
358unsigned LLVMZigTag_DW_arg_variable(void) {
359 return dwarf::DW_TAG_arg_variable;
360}355}
361356
362unsigned LLVMZigTag_DW_structure_type(void) {357unsigned LLVMZigTag_DW_structure_type(void) {
...@@ -385,21 +380,34 @@ LLVMZigDILexicalBlock *LLVMZigCreateLexicalBlock(LLVMZigDIBuilder *dbuilder, LLV...@@ -385,21 +380,34 @@ LLVMZigDILexicalBlock *LLVMZigCreateLexicalBlock(LLVMZigDIBuilder *dbuilder, LLV
385 return reinterpret_cast<LLVMZigDILexicalBlock*>(result);380 return reinterpret_cast<LLVMZigDILexicalBlock*>(result);
386}381}
387382
383LLVMZigDILocalVariable *LLVMZigCreateAutoVariable(LLVMZigDIBuilder *dbuilder,
384 LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
385 LLVMZigDIType *type, bool always_preserve, unsigned flags)
386{
387 DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createAutoVariable(
388 reinterpret_cast<DIScope*>(scope),
389 name,
390 reinterpret_cast<DIFile*>(file),
391 line_no,
392 reinterpret_cast<DIType*>(type),
393 always_preserve,
394 flags);
395 return reinterpret_cast<LLVMZigDILocalVariable*>(result);
396}
388397
389LLVMZigDILocalVariable *LLVMZigCreateLocalVariable(LLVMZigDIBuilder *dbuilder, unsigned tag,398LLVMZigDILocalVariable *LLVMZigCreateParameterVariable(LLVMZigDIBuilder *dbuilder,
390 LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,399 LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
391 LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no)400 LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no)
392{401{
393 DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createLocalVariable(402 DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createParameterVariable(
394 tag,
395 reinterpret_cast<DIScope*>(scope),403 reinterpret_cast<DIScope*>(scope),
396 name,404 name,
405 arg_no,
397 reinterpret_cast<DIFile*>(file),406 reinterpret_cast<DIFile*>(file),
398 line_no,407 line_no,
399 reinterpret_cast<DIType*>(type),408 reinterpret_cast<DIType*>(type),
400 always_preserve,409 always_preserve,
401 flags,410 flags);
402 arg_no);
403 return reinterpret_cast<LLVMZigDILocalVariable*>(result);411 return reinterpret_cast<LLVMZigDILocalVariable*>(result);
404}412}
405413
...@@ -447,9 +455,8 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena...@@ -447,9 +455,8 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena
447LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,455LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
448 const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno,456 const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno,
449 LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line,457 LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line,
450 unsigned flags, bool is_optimized, LLVMValueRef function)458 unsigned flags, bool is_optimized, LLVMZigDISubprogram *decl_subprogram)
451{459{
452 Function *unwrapped_function = reinterpret_cast<Function*>(unwrap(function));
453 DISubroutineType *di_sub_type = static_cast<DISubroutineType*>(reinterpret_cast<DIType*>(fn_di_type));460 DISubroutineType *di_sub_type = static_cast<DISubroutineType*>(reinterpret_cast<DIType*>(fn_di_type));
454 DISubprogram *result = reinterpret_cast<DIBuilder*>(dibuilder)->createFunction(461 DISubprogram *result = reinterpret_cast<DIBuilder*>(dibuilder)->createFunction(
455 reinterpret_cast<DIScope*>(scope),462 reinterpret_cast<DIScope*>(scope),
...@@ -457,7 +464,9 @@ LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigD...@@ -457,7 +464,9 @@ LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigD
457 reinterpret_cast<DIFile*>(file),464 reinterpret_cast<DIFile*>(file),
458 lineno,465 lineno,
459 di_sub_type,466 di_sub_type,
460 is_local_to_unit, is_definition, scope_line, flags, is_optimized, unwrapped_function);467 is_local_to_unit, is_definition, scope_line, flags, is_optimized,
468 nullptr,
469 reinterpret_cast<DISubprogram *>(decl_subprogram));
461 return reinterpret_cast<LLVMZigDISubprogram*>(result);470 return reinterpret_cast<LLVMZigDISubprogram*>(result);
462}471}
463472
...@@ -509,7 +518,7 @@ void LLVMZigSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state) {...@@ -509,7 +518,7 @@ void LLVMZigSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state) {
509 if (on_state) {518 if (on_state) {
510 FastMathFlags fmf;519 FastMathFlags fmf;
511 fmf.setUnsafeAlgebra();520 fmf.setUnsafeAlgebra();
512 unwrap(builder_wrapped)->SetFastMathFlags(fmf);521 unwrap(builder_wrapped)->setFastMathFlags(fmf);
513 } else {522 } else {
514 unwrap(builder_wrapped)->clearFastMathFlags();523 unwrap(builder_wrapped)->clearFastMathFlags();
515 }524 }
...@@ -563,6 +572,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {...@@ -563,6 +572,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {
563 switch (sub_arch) {572 switch (sub_arch) {
564 case ZigLLVM_NoSubArch:573 case ZigLLVM_NoSubArch:
565 return "(none)";574 return "(none)";
575 case ZigLLVM_ARMSubArch_v8_2a:
576 return "v8_2a";
566 case ZigLLVM_ARMSubArch_v8_1a:577 case ZigLLVM_ARMSubArch_v8_1a:
567 return "v8_1a";578 return "v8_1a";
568 case ZigLLVM_ARMSubArch_v8:579 case ZigLLVM_ARMSubArch_v8:
...@@ -575,6 +586,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {...@@ -575,6 +586,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {
575 return "v7m";586 return "v7m";
576 case ZigLLVM_ARMSubArch_v7s:587 case ZigLLVM_ARMSubArch_v7s:
577 return "v7s";588 return "v7s";
589 case ZigLLVM_ARMSubArch_v7k:
590 return "v7k";
578 case ZigLLVM_ARMSubArch_v6:591 case ZigLLVM_ARMSubArch_v6:
579 return "v6";592 return "v6";
580 case ZigLLVM_ARMSubArch_v6m:593 case ZigLLVM_ARMSubArch_v6m:
...@@ -626,51 +639,8 @@ enum FloatAbi {...@@ -626,51 +639,8 @@ enum FloatAbi {
626 FloatAbiSoftFp,639 FloatAbiSoftFp,
627};640};
628641
629static int get_arm_sub_arch_version(const Triple &triple) {
630 return ARMTargetParser::parseArchVersion(triple.getArchName());
631}
632
633static FloatAbi get_float_abi(const Triple &triple) {642static FloatAbi get_float_abi(const Triple &triple) {
634 switch (triple.getOS()) {643 zig_panic("TODO implement get_float_abi for ARM");
635 case Triple::Darwin:
636 case Triple::MacOSX:
637 case Triple::IOS:
638 if (get_arm_sub_arch_version(triple) == 6 ||
639 get_arm_sub_arch_version(triple) == 7)
640 {
641 return FloatAbiSoftFp;
642 } else {
643 return FloatAbiSoft;
644 }
645 case Triple::Win32:
646 return FloatAbiHard;
647 case Triple::FreeBSD:
648 switch (triple.getEnvironment()) {
649 case Triple::GNUEABIHF:
650 return FloatAbiHard;
651 default:
652 return FloatAbiSoft;
653 }
654 default:
655 switch (triple.getEnvironment()) {
656 case Triple::GNUEABIHF:
657 return FloatAbiHard;
658 case Triple::GNUEABI:
659 return FloatAbiSoftFp;
660 case Triple::EABIHF:
661 return FloatAbiHard;
662 case Triple::EABI:
663 return FloatAbiSoftFp;
664 case Triple::Android:
665 if (get_arm_sub_arch_version(triple) == 7) {
666 return FloatAbiSoftFp;
667 } else {
668 return FloatAbiSoft;
669 }
670 default:
671 return FloatAbiSoft;
672 }
673 }
674}644}
675645
676Buf *get_dynamic_linker(LLVMTargetMachineRef target_machine_ref) {646Buf *get_dynamic_linker(LLVMTargetMachineRef target_machine_ref) {
src/zig_llvm.hpp+22-11
...@@ -87,7 +87,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type,...@@ -87,7 +87,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type,
87 LLVMZigDIType **types_array, int types_array_len);87 LLVMZigDIType **types_array, int types_array_len);
8888
89LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,89LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
90 LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags);90 LLVMZigDIType **types_array, int types_array_len, unsigned flags);
9191
92unsigned LLVMZigEncoding_DW_ATE_unsigned(void);92unsigned LLVMZigEncoding_DW_ATE_unsigned(void);
93unsigned LLVMZigEncoding_DW_ATE_signed(void);93unsigned LLVMZigEncoding_DW_ATE_signed(void);
...@@ -96,8 +96,7 @@ unsigned LLVMZigEncoding_DW_ATE_boolean(void);...@@ -96,8 +96,7 @@ unsigned LLVMZigEncoding_DW_ATE_boolean(void);
96unsigned LLVMZigEncoding_DW_ATE_unsigned_char(void);96unsigned LLVMZigEncoding_DW_ATE_unsigned_char(void);
97unsigned LLVMZigEncoding_DW_ATE_signed_char(void);97unsigned LLVMZigEncoding_DW_ATE_signed_char(void);
98unsigned LLVMZigLang_DW_LANG_C99(void);98unsigned LLVMZigLang_DW_LANG_C99(void);
99unsigned LLVMZigTag_DW_auto_variable(void);99unsigned LLVMZigTag_DW_variable(void);
100unsigned LLVMZigTag_DW_arg_variable(void);
101unsigned LLVMZigTag_DW_structure_type(void);100unsigned LLVMZigTag_DW_structure_type(void);
102101
103LLVMZigDIBuilder *LLVMZigCreateDIBuilder(LLVMModuleRef module, bool allow_unresolved);102LLVMZigDIBuilder *LLVMZigCreateDIBuilder(LLVMModuleRef module, bool allow_unresolved);
...@@ -110,7 +109,11 @@ LLVMZigDIScope *LLVMZigFileToScope(LLVMZigDIFile *difile);...@@ -110,7 +109,11 @@ LLVMZigDIScope *LLVMZigFileToScope(LLVMZigDIFile *difile);
110LLVMZigDIScope *LLVMZigSubprogramToScope(LLVMZigDISubprogram *subprogram);109LLVMZigDIScope *LLVMZigSubprogramToScope(LLVMZigDISubprogram *subprogram);
111LLVMZigDIScope *LLVMZigTypeToScope(LLVMZigDIType *type);110LLVMZigDIScope *LLVMZigTypeToScope(LLVMZigDIType *type);
112111
113LLVMZigDILocalVariable *LLVMZigCreateLocalVariable(LLVMZigDIBuilder *dbuilder, unsigned tag,112LLVMZigDILocalVariable *LLVMZigCreateAutoVariable(LLVMZigDIBuilder *dbuilder,
113 LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
114 LLVMZigDIType *type, bool always_preserve, unsigned flags);
115
116LLVMZigDILocalVariable *LLVMZigCreateParameterVariable(LLVMZigDIBuilder *dbuilder,
114 LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,117 LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
115 LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no);118 LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no);
116119
...@@ -127,7 +130,7 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena...@@ -127,7 +130,7 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena
127LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,130LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
128 const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno,131 const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno,
129 LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line,132 LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line,
130 unsigned flags, bool is_optimized, LLVMValueRef function);133 unsigned flags, bool is_optimized, LLVMZigDISubprogram *decl_subprogram);
131134
132void LLVMZigDIBuilderFinalize(LLVMZigDIBuilder *dibuilder);135void LLVMZigDIBuilderFinalize(LLVMZigDIBuilder *dibuilder);
133136
...@@ -152,6 +155,7 @@ enum ZigLLVM_ArchType {...@@ -152,6 +155,7 @@ enum ZigLLVM_ArchType {
152 ZigLLVM_armeb, // ARM (big endian): armeb155 ZigLLVM_armeb, // ARM (big endian): armeb
153 ZigLLVM_aarch64, // AArch64 (little endian): aarch64156 ZigLLVM_aarch64, // AArch64 (little endian): aarch64
154 ZigLLVM_aarch64_be, // AArch64 (big endian): aarch64_be157 ZigLLVM_aarch64_be, // AArch64 (big endian): aarch64_be
158 ZigLLVM_avr, // AVR: Atmel AVR microcontroller
155 ZigLLVM_bpfel, // eBPF or extended BPF or 64-bit BPF (little endian)159 ZigLLVM_bpfel, // eBPF or extended BPF or 64-bit BPF (little endian)
156 ZigLLVM_bpfeb, // eBPF or extended BPF or 64-bit BPF (big endian)160 ZigLLVM_bpfeb, // eBPF or extended BPF or 64-bit BPF (big endian)
157 ZigLLVM_hexagon, // Hexagon: hexagon161 ZigLLVM_hexagon, // Hexagon: hexagon
...@@ -177,8 +181,8 @@ enum ZigLLVM_ArchType {...@@ -177,8 +181,8 @@ enum ZigLLVM_ArchType {
177 ZigLLVM_xcore, // XCore: xcore181 ZigLLVM_xcore, // XCore: xcore
178 ZigLLVM_nvptx, // NVPTX: 32-bit182 ZigLLVM_nvptx, // NVPTX: 32-bit
179 ZigLLVM_nvptx64, // NVPTX: 64-bit183 ZigLLVM_nvptx64, // NVPTX: 64-bit
180 ZigLLVM_le32, // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten)184 ZigLLVM_le32, // le32: generic little-endian 32-bit CPU (PNaCl)
181 ZigLLVM_le64, // le64: generic little-endian 64-bit CPU (PNaCl / Emscripten)185 ZigLLVM_le64, // le64: generic little-endian 64-bit CPU (PNaCl)
182 ZigLLVM_amdil, // AMDIL186 ZigLLVM_amdil, // AMDIL
183 ZigLLVM_amdil64, // AMDIL with 64-bit pointers187 ZigLLVM_amdil64, // AMDIL with 64-bit pointers
184 ZigLLVM_hsail, // AMD HSAIL188 ZigLLVM_hsail, // AMD HSAIL
...@@ -196,12 +200,14 @@ enum ZigLLVM_ArchType {...@@ -196,12 +200,14 @@ enum ZigLLVM_ArchType {
196enum ZigLLVM_SubArchType {200enum ZigLLVM_SubArchType {
197 ZigLLVM_NoSubArch,201 ZigLLVM_NoSubArch,
198202
203 ZigLLVM_ARMSubArch_v8_2a,
199 ZigLLVM_ARMSubArch_v8_1a,204 ZigLLVM_ARMSubArch_v8_1a,
200 ZigLLVM_ARMSubArch_v8,205 ZigLLVM_ARMSubArch_v8,
201 ZigLLVM_ARMSubArch_v7,206 ZigLLVM_ARMSubArch_v7,
202 ZigLLVM_ARMSubArch_v7em,207 ZigLLVM_ARMSubArch_v7em,
203 ZigLLVM_ARMSubArch_v7m,208 ZigLLVM_ARMSubArch_v7m,
204 ZigLLVM_ARMSubArch_v7s,209 ZigLLVM_ARMSubArch_v7s,
210 ZigLLVM_ARMSubArch_v7k,
205 ZigLLVM_ARMSubArch_v6,211 ZigLLVM_ARMSubArch_v6,
206 ZigLLVM_ARMSubArch_v6m,212 ZigLLVM_ARMSubArch_v6m,
207 ZigLLVM_ARMSubArch_v6k,213 ZigLLVM_ARMSubArch_v6k,
...@@ -228,8 +234,9 @@ enum ZigLLVM_VendorType {...@@ -228,8 +234,9 @@ enum ZigLLVM_VendorType {
228 ZigLLVM_MipsTechnologies,234 ZigLLVM_MipsTechnologies,
229 ZigLLVM_NVIDIA,235 ZigLLVM_NVIDIA,
230 ZigLLVM_CSR,236 ZigLLVM_CSR,
237 ZigLLVM_Myriad,
231238
232 ZigLLVM_LastVendorType = ZigLLVM_CSR239 ZigLLVM_LastVendorType = ZigLLVM_Myriad
233};240};
234enum ZigLLVM_OSType {241enum ZigLLVM_OSType {
235 ZigLLVM_UnknownOS,242 ZigLLVM_UnknownOS,
...@@ -258,8 +265,11 @@ enum ZigLLVM_OSType {...@@ -258,8 +265,11 @@ enum ZigLLVM_OSType {
258 ZigLLVM_NVCL, // NVIDIA OpenCL265 ZigLLVM_NVCL, // NVIDIA OpenCL
259 ZigLLVM_AMDHSA, // AMD HSA Runtime266 ZigLLVM_AMDHSA, // AMD HSA Runtime
260 ZigLLVM_PS4,267 ZigLLVM_PS4,
268 ZigLLVM_ELFIAMCU,
269 ZigLLVM_TvOS, // Apple tvOS
270 ZigLLVM_WatchOS, // Apple watchOS
261271
262 ZigLLVM_LastOSType = ZigLLVM_PS4272 ZigLLVM_LastOSType = ZigLLVM_WatchOS
263};273};
264enum ZigLLVM_EnvironmentType {274enum ZigLLVM_EnvironmentType {
265 ZigLLVM_UnknownEnvironment,275 ZigLLVM_UnknownEnvironment,
...@@ -276,8 +286,9 @@ enum ZigLLVM_EnvironmentType {...@@ -276,8 +286,9 @@ enum ZigLLVM_EnvironmentType {
276 ZigLLVM_MSVC,286 ZigLLVM_MSVC,
277 ZigLLVM_Itanium,287 ZigLLVM_Itanium,
278 ZigLLVM_Cygnus,288 ZigLLVM_Cygnus,
279289 ZigLLVM_AMDOpenCL,
280 ZigLLVM_LastEnvironmentType = ZigLLVM_Cygnus,290 ZigLLVM_CoreCLR,
291 ZigLLVM_LastEnvironmentType = ZigLLVM_CoreCLR
281};292};
282enum ZigLLVM_ObjectFormatType {293enum ZigLLVM_ObjectFormatType {
283 ZigLLVM_UnknownObjectFormat,294 ZigLLVM_UnknownObjectFormat,