Commit 76e1541803

Andrew Kelley <superjoe30@gmail.com>
2016-03-09 02:56:14
update to llvm 3.8.0
1 parent 17a3685
cmake/Findclang.cmake
@@ -8,14 +8,14 @@
 
 find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h
     PATHS
-        /usr/lib/llvm-3.7/include
+        /usr/lib/llvm-3.8/include
         /mingw64/include)
 
 macro(FIND_AND_ADD_CLANG_LIB _libname_)
     string(TOUPPER ${_libname_} _prettylibname_)
     find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_}
         PATHS
-            /usr/lib/llvm-3.7/lib
+            /usr/lib/llvm-3.8/lib
             /mingw64/lib)
     if(CLANG_${_prettylibname_}_LIB)
         set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB})
cmake/Findllvm.cmake
@@ -7,7 +7,7 @@
 # LLVM_LIBRARIES
 # LLVM_LIBDIRS
 
-find_program(LLVM_CONFIG_EXE NAMES llvm-config llvm-config-3.7)
+find_program(LLVM_CONFIG_EXE NAMES llvm-config llvm-config-3.8)
 
 execute_process(
     COMMAND ${LLVM_CONFIG_EXE} --libs
src/analyze.cpp
@@ -658,9 +658,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
     fn_type->data.fn.raw_type_ref = LLVMFunctionType(gen_return_type->type_ref,
             gen_param_types, gen_param_index, fn_type_id->is_var_args);
     fn_type->type_ref = LLVMPointerType(fn_type->data.fn.raw_type_ref, 0);
-    LLVMZigDIFile *di_file = nullptr;
-    fn_type->di_type = LLVMZigCreateSubroutineType(g->dbuilder, di_file,
-            param_di_types, gen_param_index + 1, 0);
+    fn_type->di_type = LLVMZigCreateSubroutineType(g->dbuilder, param_di_types, gen_param_index + 1, 0);
 
     g->fn_type_table.put(&fn_type->data.fn.fn_type_id, fn_type);
 
@@ -997,7 +995,7 @@ static void resolve_function_proto(CodeGen *g, AstNode *node, FnTableEntry *fn_t
             import->block_context->di_scope, buf_ptr(&fn_table_entry->symbol_name), "",
             import->di_file, line_number,
             fn_type->di_type, fn_table_entry->internal_linkage,
-            is_definition, scope_line, flags, is_optimized, fn_table_entry->fn_value);
+            is_definition, scope_line, flags, is_optimized, nullptr);
 
         BlockContext *context = new_block_context(fn_table_entry->fn_def_node, import->block_context);
         fn_table_entry->fn_def_node->data.fn_def.block_context = context;
src/codegen.cpp
@@ -3216,21 +3216,18 @@ static void do_code_gen(CodeGen *g) {
                 continue;
             }
 
-            unsigned tag;
-            unsigned arg_no;
             TypeTableEntry *gen_type;
             if (var->block_context->node->type == NodeTypeFnDef) {
-                tag = LLVMZigTag_DW_arg_variable();
-                arg_no = var->gen_arg_index + 1;
-
                 var->is_ptr = false;
                 assert(var->gen_arg_index >= 0);
                 var->value_ref = LLVMGetParam(fn, var->gen_arg_index);
 
                 gen_type = fn_table_entry->type_entry->data.fn.gen_param_info[var->src_arg_index].type;
+
+                var->di_loc_var = LLVMZigCreateParameterVariable(g->dbuilder, var->block_context->di_scope,
+                        buf_ptr(&var->name), import->di_file, var->decl_node->line + 1,
+                        gen_type->di_type, !g->strip_debug_symbols, 0, var->gen_arg_index + 1);
             } else {
-                tag = LLVMZigTag_DW_auto_variable();
-                arg_no = 0;
 
                 add_debug_source_node(g, var->decl_node);
                 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) {
                 LLVMSetAlignment(var->value_ref, align_bytes);
 
                 gen_type = var->type;
-            }
 
-            var->di_loc_var = LLVMZigCreateLocalVariable(g->dbuilder, tag,
-                    var->block_context->di_scope, buf_ptr(&var->name),
-                    import->di_file, var->decl_node->line + 1,
-                    gen_type->di_type, !g->strip_debug_symbols, 0, arg_no);
+                var->di_loc_var = LLVMZigCreateAutoVariable(g->dbuilder, var->block_context->di_scope,
+                        buf_ptr(&var->name), import->di_file, var->decl_node->line + 1,
+                        gen_type->di_type, !g->strip_debug_symbols, 0);
+            }
         }
 
         // create debug variable declarations for parameters
src/parseh.cpp
@@ -370,6 +370,17 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const
                     case BuiltinType::OCLImage1dBuffer:
                     case BuiltinType::OCLImage2d:
                     case BuiltinType::OCLImage2dArray:
+                    case BuiltinType::OCLImage2dArrayDepth:
+                    case BuiltinType::OCLImage2dDepth:
+                    case BuiltinType::OCLImage2dMSAA:
+                    case BuiltinType::OCLImage2dArrayMSAA:
+                    case BuiltinType::OCLImage2dMSAADepth:
+                    case BuiltinType::OCLImage2dArrayMSAADepth:
+                    case BuiltinType::OCLClkEvent:
+                    case BuiltinType::OCLQueue:
+                    case BuiltinType::OCLNDRange:
+                    case BuiltinType::OCLReserveID:
+                    case BuiltinType::OMPArraySection:
                     case BuiltinType::OCLImage3d:
                     case BuiltinType::OCLSampler:
                     case BuiltinType::OCLEvent:
@@ -626,6 +637,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const
         case Type::Complex:
         case Type::ObjCObjectPointer:
         case Type::Atomic:
+        case Type::Pipe:
             emit_warning(c, decl, "missed a '%s' type", ty->getTypeClassName());
             return c->codegen->builtin_types.entry_invalid;
     }
@@ -1598,9 +1610,9 @@ int parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const ch
     std::unique_ptr<ASTUnit> ast_unit(ASTUnit::LoadFromCommandLine(
             &clang_argv.at(0), &clang_argv.last(),
             pch_container_ops, diags, resources_path,
-            only_local_decls, capture_diagnostics, None, true, false, TU_Complete,
+            only_local_decls, capture_diagnostics, None, true, 0, TU_Complete,
             false, false, allow_pch_with_compiler_errors, skip_function_bodies,
-            user_files_are_volatile, false, &err_unit));
+            user_files_are_volatile, false, None, &err_unit));
 
 
     // Early failures in LoadFromCommandLine may return with ErrUnit unset.
src/target.cpp
@@ -12,12 +12,14 @@
 #include <stdio.h>
 
 static const ArchType arch_list[] = {
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_2a},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7k},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m},
     {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k},
@@ -29,6 +31,7 @@ static const ArchType arch_list[] = {
     {ZigLLVM_armeb, ZigLLVM_NoSubArch},
     {ZigLLVM_aarch64, ZigLLVM_NoSubArch},
     {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch},
+    {ZigLLVM_avr, ZigLLVM_NoSubArch},
     {ZigLLVM_bpfel, ZigLLVM_NoSubArch},
     {ZigLLVM_bpfeb, ZigLLVM_NoSubArch},
     {ZigLLVM_hexagon, ZigLLVM_NoSubArch},
@@ -84,6 +87,7 @@ static const ZigLLVM_VendorType vendor_list[] = {
     ZigLLVM_MipsTechnologies,
     ZigLLVM_NVIDIA,
     ZigLLVM_CSR,
+    ZigLLVM_Myriad,
 };
 
 static const ZigLLVM_OSType os_list[] = {
@@ -112,6 +116,9 @@ static const ZigLLVM_OSType os_list[] = {
     ZigLLVM_NVCL,
     ZigLLVM_AMDHSA,
     ZigLLVM_PS4,
+    ZigLLVM_ELFIAMCU,
+    ZigLLVM_TvOS,
+    ZigLLVM_WatchOS,
 };
 
 static const ZigLLVM_EnvironmentType environ_list[] = {
@@ -126,6 +133,8 @@ static const ZigLLVM_EnvironmentType environ_list[] = {
     ZigLLVM_MSVC,
     ZigLLVM_Itanium,
     ZigLLVM_Cygnus,
+    ZigLLVM_AMDOpenCL,
+    ZigLLVM_CoreCLR,
 };
 
 int target_arch_count(void) {
@@ -293,12 +302,13 @@ void resolve_target_object_format(ZigTarget *target) {
     target->oformat = ZigLLVM_ELF;
 }
 
-
+// See lib/Support/Triple.cpp in LLVM for the source of this data.
 static int get_arch_pointer_bit_width(ZigLLVM_ArchType arch) {
     switch (arch) {
         case ZigLLVM_UnknownArch:
             return 0;
 
+        case ZigLLVM_avr:
         case ZigLLVM_msp430:
             return 16;
 
@@ -408,6 +418,9 @@ int get_c_type_size_in_bits(const ZigTarget *target, CIntType id) {
         case ZigLLVM_NVCL:
         case ZigLLVM_AMDHSA:
         case ZigLLVM_PS4:
+        case ZigLLVM_ELFIAMCU:
+        case ZigLLVM_TvOS:
+        case ZigLLVM_WatchOS:
             zig_panic("TODO c type size in bits for this target");
     }
     zig_unreachable();
src/zig_llvm.cpp
@@ -307,7 +307,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type,
 }
 
 LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
-        LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags)
+        LLVMZigDIType **types_array, int types_array_len, unsigned flags)
 {
     SmallVector<Metadata *, 8> types;
     for (int i = 0; i < types_array_len; i += 1) {
@@ -316,7 +316,6 @@ LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
     }
     DIBuilder *dibuilder = reinterpret_cast<DIBuilder*>(dibuilder_wrapped);
     DISubroutineType *subroutine_type = dibuilder->createSubroutineType(
-            reinterpret_cast<DIFile*>(file),
             dibuilder->getOrCreateTypeArray(types),
             flags);
     DIType *ditype = subroutine_type;
@@ -351,12 +350,8 @@ unsigned LLVMZigLang_DW_LANG_C99(void) {
     return dwarf::DW_LANG_C99;
 }
 
-unsigned LLVMZigTag_DW_auto_variable(void) {
-    return dwarf::DW_TAG_auto_variable;
-}
-
-unsigned LLVMZigTag_DW_arg_variable(void) {
-    return dwarf::DW_TAG_arg_variable;
+unsigned LLVMZigTag_DW_variable(void) {
+    return dwarf::DW_TAG_variable;
 }
 
 unsigned LLVMZigTag_DW_structure_type(void) {
@@ -385,21 +380,34 @@ LLVMZigDILexicalBlock *LLVMZigCreateLexicalBlock(LLVMZigDIBuilder *dbuilder, LLV
     return reinterpret_cast<LLVMZigDILexicalBlock*>(result);
 }
 
+LLVMZigDILocalVariable *LLVMZigCreateAutoVariable(LLVMZigDIBuilder *dbuilder,
+        LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
+        LLVMZigDIType *type, bool always_preserve, unsigned flags)
+{
+    DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createAutoVariable(
+            reinterpret_cast<DIScope*>(scope),
+            name,
+            reinterpret_cast<DIFile*>(file),
+            line_no,
+            reinterpret_cast<DIType*>(type),
+            always_preserve,
+            flags);
+    return reinterpret_cast<LLVMZigDILocalVariable*>(result);
+}
 
-LLVMZigDILocalVariable *LLVMZigCreateLocalVariable(LLVMZigDIBuilder *dbuilder, unsigned tag,
+LLVMZigDILocalVariable *LLVMZigCreateParameterVariable(LLVMZigDIBuilder *dbuilder,
         LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
         LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no)
 {
-    DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createLocalVariable(
-            tag,
+    DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createParameterVariable(
             reinterpret_cast<DIScope*>(scope),
             name,
+            arg_no,
             reinterpret_cast<DIFile*>(file),
             line_no,
             reinterpret_cast<DIType*>(type),
             always_preserve,
-            flags,
-            arg_no);
+            flags);
     return reinterpret_cast<LLVMZigDILocalVariable*>(result);
 }
 
@@ -447,9 +455,8 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena
 LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
         const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno,
         LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line,
-        unsigned flags, bool is_optimized, LLVMValueRef function)
+        unsigned flags, bool is_optimized, LLVMZigDISubprogram *decl_subprogram)
 {
-    Function *unwrapped_function = reinterpret_cast<Function*>(unwrap(function));
     DISubroutineType *di_sub_type = static_cast<DISubroutineType*>(reinterpret_cast<DIType*>(fn_di_type));
     DISubprogram *result = reinterpret_cast<DIBuilder*>(dibuilder)->createFunction(
             reinterpret_cast<DIScope*>(scope),
@@ -457,7 +464,9 @@ LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigD
             reinterpret_cast<DIFile*>(file),
             lineno,
             di_sub_type,
-            is_local_to_unit, is_definition, scope_line, flags, is_optimized, unwrapped_function);
+            is_local_to_unit, is_definition, scope_line, flags, is_optimized,
+            nullptr,
+            reinterpret_cast<DISubprogram *>(decl_subprogram));
     return reinterpret_cast<LLVMZigDISubprogram*>(result);
 }
 
@@ -509,7 +518,7 @@ void LLVMZigSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state) {
     if (on_state) {
         FastMathFlags fmf;
         fmf.setUnsafeAlgebra();
-        unwrap(builder_wrapped)->SetFastMathFlags(fmf);
+        unwrap(builder_wrapped)->setFastMathFlags(fmf);
     } else {
         unwrap(builder_wrapped)->clearFastMathFlags();
     }
@@ -563,6 +572,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {
     switch (sub_arch) {
         case ZigLLVM_NoSubArch:
             return "(none)";
+        case ZigLLVM_ARMSubArch_v8_2a:
+            return "v8_2a";
         case ZigLLVM_ARMSubArch_v8_1a:
             return "v8_1a";
         case ZigLLVM_ARMSubArch_v8:
@@ -575,6 +586,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {
             return "v7m";
         case ZigLLVM_ARMSubArch_v7s:
             return "v7s";
+        case ZigLLVM_ARMSubArch_v7k:
+            return "v7k";
         case ZigLLVM_ARMSubArch_v6:
             return "v6";
         case ZigLLVM_ARMSubArch_v6m:
@@ -626,51 +639,8 @@ enum FloatAbi {
     FloatAbiSoftFp,
 };
 
-static int get_arm_sub_arch_version(const Triple &triple) {
-    return ARMTargetParser::parseArchVersion(triple.getArchName());
-}
-
 static FloatAbi get_float_abi(const Triple &triple) {
-    switch (triple.getOS()) {
-        case Triple::Darwin:
-        case Triple::MacOSX:
-        case Triple::IOS:
-            if (get_arm_sub_arch_version(triple) == 6 ||
-                get_arm_sub_arch_version(triple) == 7)
-            {
-                return FloatAbiSoftFp;
-            } else {
-                return FloatAbiSoft;
-            }
-        case Triple::Win32:
-            return FloatAbiHard;
-        case Triple::FreeBSD:
-            switch (triple.getEnvironment()) {
-                case Triple::GNUEABIHF:
-                    return FloatAbiHard;
-                default:
-                    return FloatAbiSoft;
-            }
-        default:
-            switch (triple.getEnvironment()) {
-                case Triple::GNUEABIHF:
-                    return FloatAbiHard;
-                case Triple::GNUEABI:
-                    return FloatAbiSoftFp;
-                case Triple::EABIHF:
-                    return FloatAbiHard;
-                case Triple::EABI:
-                    return FloatAbiSoftFp;
-                case Triple::Android:
-                    if (get_arm_sub_arch_version(triple) == 7) {
-                        return FloatAbiSoftFp;
-                    } else {
-                        return FloatAbiSoft;
-                    }
-                default:
-                    return FloatAbiSoft;
-            }
-    }
+    zig_panic("TODO implement get_float_abi for ARM");
 }
 
 Buf *get_dynamic_linker(LLVMTargetMachineRef target_machine_ref) {
src/zig_llvm.hpp
@@ -87,7 +87,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type,
         LLVMZigDIType **types_array, int types_array_len);
 
 LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
-        LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags);
+        LLVMZigDIType **types_array, int types_array_len, unsigned flags);
 
 unsigned LLVMZigEncoding_DW_ATE_unsigned(void);
 unsigned LLVMZigEncoding_DW_ATE_signed(void);
@@ -96,8 +96,7 @@ unsigned LLVMZigEncoding_DW_ATE_boolean(void);
 unsigned LLVMZigEncoding_DW_ATE_unsigned_char(void);
 unsigned LLVMZigEncoding_DW_ATE_signed_char(void);
 unsigned LLVMZigLang_DW_LANG_C99(void);
-unsigned LLVMZigTag_DW_auto_variable(void);
-unsigned LLVMZigTag_DW_arg_variable(void);
+unsigned LLVMZigTag_DW_variable(void);
 unsigned LLVMZigTag_DW_structure_type(void);
 
 LLVMZigDIBuilder *LLVMZigCreateDIBuilder(LLVMModuleRef module, bool allow_unresolved);
@@ -110,7 +109,11 @@ LLVMZigDIScope *LLVMZigFileToScope(LLVMZigDIFile *difile);
 LLVMZigDIScope *LLVMZigSubprogramToScope(LLVMZigDISubprogram *subprogram);
 LLVMZigDIScope *LLVMZigTypeToScope(LLVMZigDIType *type);
 
-LLVMZigDILocalVariable *LLVMZigCreateLocalVariable(LLVMZigDIBuilder *dbuilder, unsigned tag,
+LLVMZigDILocalVariable *LLVMZigCreateAutoVariable(LLVMZigDIBuilder *dbuilder,
+        LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
+        LLVMZigDIType *type, bool always_preserve, unsigned flags);
+
+LLVMZigDILocalVariable *LLVMZigCreateParameterVariable(LLVMZigDIBuilder *dbuilder,
         LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no,
         LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no);
 
@@ -127,7 +130,7 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena
 LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
         const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno,
         LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line,
-        unsigned flags, bool is_optimized, LLVMValueRef function);
+        unsigned flags, bool is_optimized, LLVMZigDISubprogram *decl_subprogram);
 
 void LLVMZigDIBuilderFinalize(LLVMZigDIBuilder *dibuilder);
 
@@ -152,6 +155,7 @@ enum ZigLLVM_ArchType {
   ZigLLVM_armeb,      // ARM (big endian): armeb
   ZigLLVM_aarch64,    // AArch64 (little endian): aarch64
   ZigLLVM_aarch64_be, // AArch64 (big endian): aarch64_be
+  ZigLLVM_avr,        // AVR: Atmel AVR microcontroller
   ZigLLVM_bpfel,      // eBPF or extended BPF or 64-bit BPF (little endian)
   ZigLLVM_bpfeb,      // eBPF or extended BPF or 64-bit BPF (big endian)
   ZigLLVM_hexagon,    // Hexagon: hexagon
@@ -177,8 +181,8 @@ enum ZigLLVM_ArchType {
   ZigLLVM_xcore,      // XCore: xcore
   ZigLLVM_nvptx,      // NVPTX: 32-bit
   ZigLLVM_nvptx64,    // NVPTX: 64-bit
-  ZigLLVM_le32,       // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten)
-  ZigLLVM_le64,       // le64: generic little-endian 64-bit CPU (PNaCl / Emscripten)
+  ZigLLVM_le32,       // le32: generic little-endian 32-bit CPU (PNaCl)
+  ZigLLVM_le64,       // le64: generic little-endian 64-bit CPU (PNaCl)
   ZigLLVM_amdil,      // AMDIL
   ZigLLVM_amdil64,    // AMDIL with 64-bit pointers
   ZigLLVM_hsail,      // AMD HSAIL
@@ -196,12 +200,14 @@ enum ZigLLVM_ArchType {
 enum ZigLLVM_SubArchType {
   ZigLLVM_NoSubArch,
 
+  ZigLLVM_ARMSubArch_v8_2a,
   ZigLLVM_ARMSubArch_v8_1a,
   ZigLLVM_ARMSubArch_v8,
   ZigLLVM_ARMSubArch_v7,
   ZigLLVM_ARMSubArch_v7em,
   ZigLLVM_ARMSubArch_v7m,
   ZigLLVM_ARMSubArch_v7s,
+  ZigLLVM_ARMSubArch_v7k,
   ZigLLVM_ARMSubArch_v6,
   ZigLLVM_ARMSubArch_v6m,
   ZigLLVM_ARMSubArch_v6k,
@@ -228,8 +234,9 @@ enum ZigLLVM_VendorType {
   ZigLLVM_MipsTechnologies,
   ZigLLVM_NVIDIA,
   ZigLLVM_CSR,
+  ZigLLVM_Myriad,
 
-  ZigLLVM_LastVendorType = ZigLLVM_CSR
+  ZigLLVM_LastVendorType = ZigLLVM_Myriad
 };
 enum ZigLLVM_OSType {
   ZigLLVM_UnknownOS,
@@ -258,8 +265,11 @@ enum ZigLLVM_OSType {
   ZigLLVM_NVCL,       // NVIDIA OpenCL
   ZigLLVM_AMDHSA,     // AMD HSA Runtime
   ZigLLVM_PS4,
+  ZigLLVM_ELFIAMCU,
+  ZigLLVM_TvOS,       // Apple tvOS
+  ZigLLVM_WatchOS,    // Apple watchOS
 
-  ZigLLVM_LastOSType = ZigLLVM_PS4
+  ZigLLVM_LastOSType = ZigLLVM_WatchOS
 };
 enum ZigLLVM_EnvironmentType {
   ZigLLVM_UnknownEnvironment,
@@ -276,8 +286,9 @@ enum ZigLLVM_EnvironmentType {
   ZigLLVM_MSVC,
   ZigLLVM_Itanium,
   ZigLLVM_Cygnus,
-
-  ZigLLVM_LastEnvironmentType = ZigLLVM_Cygnus,
+  ZigLLVM_AMDOpenCL,
+  ZigLLVM_CoreCLR,
+  ZigLLVM_LastEnvironmentType = ZigLLVM_CoreCLR
 };
 enum ZigLLVM_ObjectFormatType {
     ZigLLVM_UnknownObjectFormat,