authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-12-31 17:54:12+01:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-01-02 18:57:09+01:00
log435528a7c53adb9a8c4094d8cecacccb8228d17b
tree43734a0ffb42ff9a6dc99301ed309438d4264f26
parente99209baf04f97dfdb9df92752224b49fc275d67

Use the LLVM C++ API


3 files changed, 142 insertions(+), 54 deletions(-)

src/codegen.cpp+41-51
...@@ -262,76 +262,66 @@ static const char *get_mangled_name(CodeGen *g, const char *original_name, bool...@@ -262,76 +262,66 @@ static const char *get_mangled_name(CodeGen *g, const char *original_name, bool
262 }262 }
263}263}
264264
265static LLVMCallConv get_llvm_cc(CodeGen *g, CallingConvention cc) {265static ZigLLVM_CallingConv get_llvm_cc(CodeGen *g, CallingConvention cc) {
266 switch (cc) {266 switch (cc) {
267 case CallingConventionUnspecified: return LLVMFastCallConv;267 case CallingConventionUnspecified:
268 case CallingConventionC: return LLVMCCallConv;268 return ZigLLVM_Fast;
269 case CallingConventionC:
270 return ZigLLVM_C;
269 case CallingConventionCold:271 case CallingConventionCold:
270 // cold calling convention only works on x86.272 if ((g->zig_target->arch == ZigLLVM_x86 ||
271 if (g->zig_target->arch == ZigLLVM_x86 ||273 g->zig_target->arch == ZigLLVM_x86_64) &&
272 g->zig_target->arch == ZigLLVM_x86_64)274 g->zig_target->os != OsWindows)
273 {275 return ZigLLVM_Cold;
274 // cold calling convention is not supported on windows276 return ZigLLVM_C;
275 if (g->zig_target->os == OsWindows) {
276 return LLVMCCallConv;
277 } else {
278 return LLVMColdCallConv;
279 }
280 } else {
281 return LLVMCCallConv;
282 }
283 break;
284 case CallingConventionNaked:277 case CallingConventionNaked:
285 zig_unreachable();278 zig_unreachable();
286 case CallingConventionStdcall:279 case CallingConventionStdcall:
287 if (g->zig_target->arch == ZigLLVM_x86)280 if (g->zig_target->arch == ZigLLVM_x86)
288 return LLVMX86StdcallCallConv;281 return ZigLLVM_X86_StdCall;
289 return LLVMCCallConv;282 return ZigLLVM_C;
290 case CallingConventionFastcall:283 case CallingConventionFastcall:
291 if (g->zig_target->arch == ZigLLVM_x86)284 if (g->zig_target->arch == ZigLLVM_x86)
292 return LLVMX86FastcallCallConv;285 return ZigLLVM_X86_FastCall;
293 return LLVMCCallConv;286 return ZigLLVM_C;
294 case CallingConventionVectorcall:287 case CallingConventionVectorcall:
295 if (g->zig_target->arch == ZigLLVM_x86)288 if (g->zig_target->arch == ZigLLVM_x86)
296 return LLVMX86VectorCallCallConv;289 return ZigLLVM_X86_VectorCall;
297 // XXX Enable this when the C API exports this enum member too
298#if 0
299 if (target_is_arm(g->zig_target) &&290 if (target_is_arm(g->zig_target) &&
300 target_arch_pointer_bit_width(g->zig_target->arch) == 64)291 target_arch_pointer_bit_width(g->zig_target->arch) == 64)
301 return LLVMAARCH64VectorCallCallConv;292 return ZigLLVM_AArch64_VectorCall;
302#endif293 return ZigLLVM_C;
303 return LLVMCCallConv;
304 case CallingConventionThiscall:294 case CallingConventionThiscall:
305 if (g->zig_target->arch == ZigLLVM_x86)295 if (g->zig_target->arch == ZigLLVM_x86)
306 return LLVMX86ThisCallCallConv;296 return ZigLLVM_X86_ThisCall;
307 return LLVMCCallConv;297 return ZigLLVM_C;
308 case CallingConventionAsync:298 case CallingConventionAsync:
309 return LLVMFastCallConv;299 return ZigLLVM_Fast;
310 case CallingConventionAPCS:300 case CallingConventionAPCS:
311 if (target_is_arm(g->zig_target))301 if (target_is_arm(g->zig_target))
312 return LLVMARMAPCSCallConv;302 return ZigLLVM_ARM_APCS;
313 return LLVMCCallConv;303 return ZigLLVM_C;
314 case CallingConventionAAPCS:304 case CallingConventionAAPCS:
315 if (target_is_arm(g->zig_target))305 if (target_is_arm(g->zig_target))
316 return LLVMARMAAPCSCallConv;306 return ZigLLVM_ARM_AAPCS;
317 return LLVMCCallConv;307 return ZigLLVM_C;
318 case CallingConventionAAPCSVFP:308 case CallingConventionAAPCSVFP:
319 if (target_is_arm(g->zig_target))309 if (target_is_arm(g->zig_target))
320 return LLVMARMAAPCSVFPCallConv;310 return ZigLLVM_ARM_AAPCS_VFP;
321 return LLVMCCallConv;311 return ZigLLVM_C;
322 case CallingConventionInterrupt:312 case CallingConventionInterrupt:
323 if (g->zig_target->arch == ZigLLVM_x86 ||313 if (g->zig_target->arch == ZigLLVM_x86 ||
324 g->zig_target->arch == ZigLLVM_x86_64)314 g->zig_target->arch == ZigLLVM_x86_64)
325 return LLVMX86INTRCallConv;315 return ZigLLVM_X86_INTR;
326 if (g->zig_target->arch == ZigLLVM_avr)316 if (g->zig_target->arch == ZigLLVM_avr)
327 return LLVMAVRINTRCallConv;317 return ZigLLVM_AVR_INTR;
328 if (g->zig_target->arch == ZigLLVM_msp430)318 if (g->zig_target->arch == ZigLLVM_msp430)
329 return LLVMMSP430INTRCallConv;319 return ZigLLVM_MSP430_INTR;
330 return LLVMCCallConv;320 return ZigLLVM_C;
331 case CallingConventionSignal:321 case CallingConventionSignal:
332 if (g->zig_target->arch == ZigLLVM_avr)322 if (g->zig_target->arch == ZigLLVM_avr)
333 return LLVMAVRSIGNALCallConv;323 return ZigLLVM_AVR_SIGNAL;
334 return LLVMCCallConv;324 return ZigLLVM_C;
335 }325 }
336 zig_unreachable();326 zig_unreachable();
337}327}
...@@ -528,7 +518,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {...@@ -528,7 +518,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
528 if (cc == CallingConventionNaked) {518 if (cc == CallingConventionNaked) {
529 addLLVMFnAttr(llvm_fn, "naked");519 addLLVMFnAttr(llvm_fn, "naked");
530 } else {520 } else {
531 LLVMSetFunctionCallConv(llvm_fn, get_llvm_cc(g, fn_type->data.fn.fn_type_id.cc));521 ZigLLVMFunctionSetCallingConv(llvm_fn, get_llvm_cc(g, fn_type->data.fn.fn_type_id.cc));
532 }522 }
533523
534 bool want_cold = fn->is_cold || cc == CallingConventionCold;524 bool want_cold = fn->is_cold || cc == CallingConventionCold;
...@@ -1023,7 +1013,7 @@ static void gen_panic(CodeGen *g, LLVMValueRef msg_arg, LLVMValueRef stack_trace...@@ -1023,7 +1013,7 @@ static void gen_panic(CodeGen *g, LLVMValueRef msg_arg, LLVMValueRef stack_trace
1023{1013{
1024 assert(g->panic_fn != nullptr);1014 assert(g->panic_fn != nullptr);
1025 LLVMValueRef fn_val = fn_llvm_value(g, g->panic_fn);1015 LLVMValueRef fn_val = fn_llvm_value(g, g->panic_fn);
1026 LLVMCallConv llvm_cc = get_llvm_cc(g, g->panic_fn->type_entry->data.fn.fn_type_id.cc);1016 ZigLLVM_CallingConv llvm_cc = get_llvm_cc(g, g->panic_fn->type_entry->data.fn.fn_type_id.cc);
1027 if (stack_trace_arg == nullptr) {1017 if (stack_trace_arg == nullptr) {
1028 stack_trace_arg = LLVMConstNull(get_llvm_type(g, ptr_to_stack_trace_type(g)));1018 stack_trace_arg = LLVMConstNull(get_llvm_type(g, ptr_to_stack_trace_type(g)));
1029 }1019 }
...@@ -1134,7 +1124,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {...@@ -1134,7 +1124,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) {
1134 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);1124 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
1135 addLLVMFnAttr(fn_val, "alwaysinline");1125 addLLVMFnAttr(fn_val, "alwaysinline");
1136 LLVMSetLinkage(fn_val, LLVMInternalLinkage);1126 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
1137 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));1127 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1138 addLLVMFnAttr(fn_val, "nounwind");1128 addLLVMFnAttr(fn_val, "nounwind");
1139 add_uwtable_attr(g, fn_val);1129 add_uwtable_attr(g, fn_val);
1140 // Error return trace memory is in the stack, which is impossible to be at address 01130 // Error return trace memory is in the stack, which is impossible to be at address 0
...@@ -1215,7 +1205,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {...@@ -1215,7 +1205,7 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) {
1215 addLLVMFnAttr(fn_val, "noinline"); // so that we can look at return address1205 addLLVMFnAttr(fn_val, "noinline"); // so that we can look at return address
1216 addLLVMFnAttr(fn_val, "cold");1206 addLLVMFnAttr(fn_val, "cold");
1217 LLVMSetLinkage(fn_val, LLVMInternalLinkage);1207 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
1218 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));1208 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1219 addLLVMFnAttr(fn_val, "nounwind");1209 addLLVMFnAttr(fn_val, "nounwind");
1220 add_uwtable_attr(g, fn_val);1210 add_uwtable_attr(g, fn_val);
1221 if (codegen_have_frame_pointer(g)) {1211 if (codegen_have_frame_pointer(g)) {
...@@ -1299,7 +1289,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {...@@ -1299,7 +1289,7 @@ static LLVMValueRef get_safety_crash_err_fn(CodeGen *g) {
1299 addLLVMFnAttr(fn_val, "noreturn");1289 addLLVMFnAttr(fn_val, "noreturn");
1300 addLLVMFnAttr(fn_val, "cold");1290 addLLVMFnAttr(fn_val, "cold");
1301 LLVMSetLinkage(fn_val, LLVMInternalLinkage);1291 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
1302 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));1292 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
1303 addLLVMFnAttr(fn_val, "nounwind");1293 addLLVMFnAttr(fn_val, "nounwind");
1304 add_uwtable_attr(g, fn_val);1294 add_uwtable_attr(g, fn_val);
1305 if (codegen_have_frame_pointer(g)) {1295 if (codegen_have_frame_pointer(g)) {
...@@ -2195,7 +2185,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {...@@ -2195,7 +2185,7 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) {
2195 const char *fn_name = get_mangled_name(g, "__zig_merge_error_return_traces", false);2185 const char *fn_name = get_mangled_name(g, "__zig_merge_error_return_traces", false);
2196 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);2186 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
2197 LLVMSetLinkage(fn_val, LLVMInternalLinkage);2187 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
2198 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));2188 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
2199 addLLVMFnAttr(fn_val, "nounwind");2189 addLLVMFnAttr(fn_val, "nounwind");
2200 add_uwtable_attr(g, fn_val);2190 add_uwtable_attr(g, fn_val);
2201 addLLVMArgAttr(fn_val, (unsigned)0, "noalias");2191 addLLVMArgAttr(fn_val, (unsigned)0, "noalias");
...@@ -2372,7 +2362,7 @@ static LLVMValueRef gen_resume(CodeGen *g, LLVMValueRef fn_val, LLVMValueRef tar...@@ -2372,7 +2362,7 @@ static LLVMValueRef gen_resume(CodeGen *g, LLVMValueRef fn_val, LLVMValueRef tar
2372 LLVMValueRef arg_val = LLVMConstSub(LLVMConstAllOnes(usize_type_ref),2362 LLVMValueRef arg_val = LLVMConstSub(LLVMConstAllOnes(usize_type_ref),
2373 LLVMConstInt(usize_type_ref, resume_id, false));2363 LLVMConstInt(usize_type_ref, resume_id, false));
2374 LLVMValueRef args[] = {target_frame_ptr, arg_val};2364 LLVMValueRef args[] = {target_frame_ptr, arg_val};
2375 return ZigLLVMBuildCall(g->builder, fn_val, args, 2, LLVMFastCallConv, ZigLLVM_CallAttrAuto, "");2365 return ZigLLVMBuildCall(g->builder, fn_val, args, 2, ZigLLVM_Fast, ZigLLVM_CallAttrAuto, "");
2376}2366}
23772367
2378static LLVMBasicBlockRef gen_suspend_begin(CodeGen *g, const char *name_hint) {2368static LLVMBasicBlockRef gen_suspend_begin(CodeGen *g, const char *name_hint) {
...@@ -4262,7 +4252,7 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr...@@ -4262,7 +4252,7 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr
4262 break;4252 break;
4263 }4253 }
42644254
4265 LLVMCallConv llvm_cc = get_llvm_cc(g, cc);4255 ZigLLVM_CallingConv llvm_cc = get_llvm_cc(g, cc);
4266 LLVMValueRef result;4256 LLVMValueRef result;
42674257
4268 if (callee_is_async) {4258 if (callee_is_async) {
...@@ -4972,7 +4962,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {...@@ -4972,7 +4962,7 @@ static LLVMValueRef get_enum_tag_name_function(CodeGen *g, ZigType *enum_type) {
4972 buf_ptr(buf_sprintf("__zig_tag_name_%s", buf_ptr(&enum_type->name))), false);4962 buf_ptr(buf_sprintf("__zig_tag_name_%s", buf_ptr(&enum_type->name))), false);
4973 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);4963 LLVMValueRef fn_val = LLVMAddFunction(g->module, fn_name, fn_type_ref);
4974 LLVMSetLinkage(fn_val, LLVMInternalLinkage);4964 LLVMSetLinkage(fn_val, LLVMInternalLinkage);
4975 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));4965 ZigLLVMFunctionSetCallingConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
4976 addLLVMFnAttr(fn_val, "nounwind");4966 addLLVMFnAttr(fn_val, "nounwind");
4977 add_uwtable_attr(g, fn_val);4967 add_uwtable_attr(g, fn_val);
4978 if (codegen_have_frame_pointer(g)) {4968 if (codegen_have_frame_pointer(g)) {
src/zig_llvm.cpp+51-2
...@@ -273,10 +273,10 @@ ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref) {...@@ -273,10 +273,10 @@ ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref) {
273}273}
274274
275LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args,275LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args,
276 unsigned NumArgs, unsigned CC, ZigLLVM_CallAttr attr, const char *Name)276 unsigned NumArgs, ZigLLVM_CallingConv CC, ZigLLVM_CallAttr attr, const char *Name)
277{277{
278 CallInst *call_inst = CallInst::Create(unwrap(Fn), makeArrayRef(unwrap(Args), NumArgs), Name);278 CallInst *call_inst = CallInst::Create(unwrap(Fn), makeArrayRef(unwrap(Args), NumArgs), Name);
279 call_inst->setCallingConv(CC);279 call_inst->setCallingConv(static_cast<CallingConv::ID>(CC));
280 switch (attr) {280 switch (attr) {
281 case ZigLLVM_CallAttrAuto:281 case ZigLLVM_CallAttrAuto:
282 break;282 break;
...@@ -932,6 +932,9 @@ void ZigLLVMFunctionSetPrefixData(LLVMValueRef function, LLVMValueRef data) {...@@ -932,6 +932,9 @@ void ZigLLVMFunctionSetPrefixData(LLVMValueRef function, LLVMValueRef data) {
932 unwrap<Function>(function)->setPrefixData(unwrap<Constant>(data));932 unwrap<Function>(function)->setPrefixData(unwrap<Constant>(data));
933}933}
934934
935void ZigLLVMFunctionSetCallingConv(LLVMValueRef function, ZigLLVM_CallingConv cc) {
936 unwrap<Function>(function)->setCallingConv(static_cast<CallingConv::ID>(cc));
937}
935938
936class MyOStream: public raw_ostream {939class MyOStream: public raw_ostream {
937 public:940 public:
...@@ -1315,3 +1318,49 @@ static_assert((Triple::ObjectFormatType)ZigLLVM_ELF == Triple::ELF, "");...@@ -1315,3 +1318,49 @@ static_assert((Triple::ObjectFormatType)ZigLLVM_ELF == Triple::ELF, "");
1315static_assert((Triple::ObjectFormatType)ZigLLVM_MachO == Triple::MachO, "");1318static_assert((Triple::ObjectFormatType)ZigLLVM_MachO == Triple::MachO, "");
1316static_assert((Triple::ObjectFormatType)ZigLLVM_Wasm == Triple::Wasm, "");1319static_assert((Triple::ObjectFormatType)ZigLLVM_Wasm == Triple::Wasm, "");
1317static_assert((Triple::ObjectFormatType)ZigLLVM_XCOFF == Triple::XCOFF, "");1320static_assert((Triple::ObjectFormatType)ZigLLVM_XCOFF == Triple::XCOFF, "");
1321
1322static_assert((CallingConv::ID)ZigLLVM_C == llvm::CallingConv::C, "");
1323static_assert((CallingConv::ID)ZigLLVM_Fast == llvm::CallingConv::Fast, "");
1324static_assert((CallingConv::ID)ZigLLVM_Cold == llvm::CallingConv::Cold, "");
1325static_assert((CallingConv::ID)ZigLLVM_GHC == llvm::CallingConv::GHC, "");
1326static_assert((CallingConv::ID)ZigLLVM_HiPE == llvm::CallingConv::HiPE, "");
1327static_assert((CallingConv::ID)ZigLLVM_WebKit_JS == llvm::CallingConv::WebKit_JS, "");
1328static_assert((CallingConv::ID)ZigLLVM_AnyReg == llvm::CallingConv::AnyReg, "");
1329static_assert((CallingConv::ID)ZigLLVM_PreserveMost == llvm::CallingConv::PreserveMost, "");
1330static_assert((CallingConv::ID)ZigLLVM_PreserveAll == llvm::CallingConv::PreserveAll, "");
1331static_assert((CallingConv::ID)ZigLLVM_Swift == llvm::CallingConv::Swift, "");
1332static_assert((CallingConv::ID)ZigLLVM_CXX_FAST_TLS == llvm::CallingConv::CXX_FAST_TLS, "");
1333static_assert((CallingConv::ID)ZigLLVM_FirstTargetCC == llvm::CallingConv::FirstTargetCC, "");
1334static_assert((CallingConv::ID)ZigLLVM_X86_StdCall == llvm::CallingConv::X86_StdCall, "");
1335static_assert((CallingConv::ID)ZigLLVM_X86_FastCall == llvm::CallingConv::X86_FastCall, "");
1336static_assert((CallingConv::ID)ZigLLVM_ARM_APCS == llvm::CallingConv::ARM_APCS, "");
1337static_assert((CallingConv::ID)ZigLLVM_ARM_AAPCS == llvm::CallingConv::ARM_AAPCS, "");
1338static_assert((CallingConv::ID)ZigLLVM_ARM_AAPCS_VFP == llvm::CallingConv::ARM_AAPCS_VFP, "");
1339static_assert((CallingConv::ID)ZigLLVM_MSP430_INTR == llvm::CallingConv::MSP430_INTR, "");
1340static_assert((CallingConv::ID)ZigLLVM_X86_ThisCall == llvm::CallingConv::X86_ThisCall, "");
1341static_assert((CallingConv::ID)ZigLLVM_PTX_Kernel == llvm::CallingConv::PTX_Kernel, "");
1342static_assert((CallingConv::ID)ZigLLVM_PTX_Device == llvm::CallingConv::PTX_Device, "");
1343static_assert((CallingConv::ID)ZigLLVM_SPIR_FUNC == llvm::CallingConv::SPIR_FUNC, "");
1344static_assert((CallingConv::ID)ZigLLVM_SPIR_KERNEL == llvm::CallingConv::SPIR_KERNEL, "");
1345static_assert((CallingConv::ID)ZigLLVM_Intel_OCL_BI == llvm::CallingConv::Intel_OCL_BI, "");
1346static_assert((CallingConv::ID)ZigLLVM_X86_64_SysV == llvm::CallingConv::X86_64_SysV, "");
1347static_assert((CallingConv::ID)ZigLLVM_Win64 == llvm::CallingConv::Win64, "");
1348static_assert((CallingConv::ID)ZigLLVM_X86_VectorCall == llvm::CallingConv::X86_VectorCall, "");
1349static_assert((CallingConv::ID)ZigLLVM_HHVM == llvm::CallingConv::HHVM, "");
1350static_assert((CallingConv::ID)ZigLLVM_HHVM_C == llvm::CallingConv::HHVM_C, "");
1351static_assert((CallingConv::ID)ZigLLVM_X86_INTR == llvm::CallingConv::X86_INTR, "");
1352static_assert((CallingConv::ID)ZigLLVM_AVR_INTR == llvm::CallingConv::AVR_INTR, "");
1353static_assert((CallingConv::ID)ZigLLVM_AVR_SIGNAL == llvm::CallingConv::AVR_SIGNAL, "");
1354static_assert((CallingConv::ID)ZigLLVM_AVR_BUILTIN == llvm::CallingConv::AVR_BUILTIN, "");
1355static_assert((CallingConv::ID)ZigLLVM_AMDGPU_VS == llvm::CallingConv::AMDGPU_VS, "");
1356static_assert((CallingConv::ID)ZigLLVM_AMDGPU_GS == llvm::CallingConv::AMDGPU_GS, "");
1357static_assert((CallingConv::ID)ZigLLVM_AMDGPU_PS == llvm::CallingConv::AMDGPU_PS, "");
1358static_assert((CallingConv::ID)ZigLLVM_AMDGPU_CS == llvm::CallingConv::AMDGPU_CS, "");
1359static_assert((CallingConv::ID)ZigLLVM_AMDGPU_KERNEL == llvm::CallingConv::AMDGPU_KERNEL, "");
1360static_assert((CallingConv::ID)ZigLLVM_X86_RegCall == llvm::CallingConv::X86_RegCall, "");
1361static_assert((CallingConv::ID)ZigLLVM_AMDGPU_HS == llvm::CallingConv::AMDGPU_HS, "");
1362static_assert((CallingConv::ID)ZigLLVM_MSP430_BUILTIN == llvm::CallingConv::MSP430_BUILTIN, "");
1363static_assert((CallingConv::ID)ZigLLVM_AMDGPU_LS == llvm::CallingConv::AMDGPU_LS, "");
1364static_assert((CallingConv::ID)ZigLLVM_AMDGPU_ES == llvm::CallingConv::AMDGPU_ES, "");
1365static_assert((CallingConv::ID)ZigLLVM_AArch64_VectorCall == llvm::CallingConv::AArch64_VectorCall, "");
1366static_assert((CallingConv::ID)ZigLLVM_MaxID == llvm::CallingConv::MaxID, "");
src/zig_llvm.h+50-1
...@@ -64,6 +64,54 @@ ZIG_EXTERN_C LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, co...@@ -64,6 +64,54 @@ ZIG_EXTERN_C LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, co
6464
65ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref);65ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref);
6666
67enum ZigLLVM_CallingConv {
68 ZigLLVM_C = 0,
69 ZigLLVM_Fast = 8,
70 ZigLLVM_Cold = 9,
71 ZigLLVM_GHC = 10,
72 ZigLLVM_HiPE = 11,
73 ZigLLVM_WebKit_JS = 12,
74 ZigLLVM_AnyReg = 13,
75 ZigLLVM_PreserveMost = 14,
76 ZigLLVM_PreserveAll = 15,
77 ZigLLVM_Swift = 16,
78 ZigLLVM_CXX_FAST_TLS = 17,
79 ZigLLVM_FirstTargetCC = 64,
80 ZigLLVM_X86_StdCall = 64,
81 ZigLLVM_X86_FastCall = 65,
82 ZigLLVM_ARM_APCS = 66,
83 ZigLLVM_ARM_AAPCS = 67,
84 ZigLLVM_ARM_AAPCS_VFP = 68,
85 ZigLLVM_MSP430_INTR = 69,
86 ZigLLVM_X86_ThisCall = 70,
87 ZigLLVM_PTX_Kernel = 71,
88 ZigLLVM_PTX_Device = 72,
89 ZigLLVM_SPIR_FUNC = 75,
90 ZigLLVM_SPIR_KERNEL = 76,
91 ZigLLVM_Intel_OCL_BI = 77,
92 ZigLLVM_X86_64_SysV = 78,
93 ZigLLVM_Win64 = 79,
94 ZigLLVM_X86_VectorCall = 80,
95 ZigLLVM_HHVM = 81,
96 ZigLLVM_HHVM_C = 82,
97 ZigLLVM_X86_INTR = 83,
98 ZigLLVM_AVR_INTR = 84,
99 ZigLLVM_AVR_SIGNAL = 85,
100 ZigLLVM_AVR_BUILTIN = 86,
101 ZigLLVM_AMDGPU_VS = 87,
102 ZigLLVM_AMDGPU_GS = 88,
103 ZigLLVM_AMDGPU_PS = 89,
104 ZigLLVM_AMDGPU_CS = 90,
105 ZigLLVM_AMDGPU_KERNEL = 91,
106 ZigLLVM_X86_RegCall = 92,
107 ZigLLVM_AMDGPU_HS = 93,
108 ZigLLVM_MSP430_BUILTIN = 94,
109 ZigLLVM_AMDGPU_LS = 95,
110 ZigLLVM_AMDGPU_ES = 96,
111 ZigLLVM_AArch64_VectorCall = 97,
112 ZigLLVM_MaxID = 1023,
113};
114
67enum ZigLLVM_CallAttr {115enum ZigLLVM_CallAttr {
68 ZigLLVM_CallAttrAuto,116 ZigLLVM_CallAttrAuto,
69 ZigLLVM_CallAttrNeverTail,117 ZigLLVM_CallAttrNeverTail,
...@@ -72,7 +120,7 @@ enum ZigLLVM_CallAttr {...@@ -72,7 +120,7 @@ enum ZigLLVM_CallAttr {
72 ZigLLVM_CallAttrAlwaysInline,120 ZigLLVM_CallAttrAlwaysInline,
73};121};
74ZIG_EXTERN_C LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args,122ZIG_EXTERN_C LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args,
75 unsigned NumArgs, unsigned CC, enum ZigLLVM_CallAttr attr, const char *Name);123 unsigned NumArgs, enum ZigLLVM_CallingConv CC, enum ZigLLVM_CallAttr attr, const char *Name);
76124
77ZIG_EXTERN_C LLVMValueRef ZigLLVMBuildMemCpy(LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign,125ZIG_EXTERN_C LLVMValueRef ZigLLVMBuildMemCpy(LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign,
78 LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size, bool isVolatile);126 LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size, bool isVolatile);
...@@ -215,6 +263,7 @@ ZIG_EXTERN_C struct ZigLLVMDILocation *ZigLLVMGetDebugLoc(unsigned line, unsigne...@@ -215,6 +263,7 @@ ZIG_EXTERN_C struct ZigLLVMDILocation *ZigLLVMGetDebugLoc(unsigned line, unsigne
215ZIG_EXTERN_C void ZigLLVMSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state);263ZIG_EXTERN_C void ZigLLVMSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state);
216ZIG_EXTERN_C void ZigLLVMSetTailCall(LLVMValueRef Call);264ZIG_EXTERN_C void ZigLLVMSetTailCall(LLVMValueRef Call);
217ZIG_EXTERN_C void ZigLLVMFunctionSetPrefixData(LLVMValueRef fn, LLVMValueRef data);265ZIG_EXTERN_C void ZigLLVMFunctionSetPrefixData(LLVMValueRef fn, LLVMValueRef data);
266ZIG_EXTERN_C void ZigLLVMFunctionSetCallingConv(LLVMValueRef function, enum ZigLLVM_CallingConv cc);
218267
219ZIG_EXTERN_C void ZigLLVMAddFunctionAttr(LLVMValueRef fn, const char *attr_name, const char *attr_value);268ZIG_EXTERN_C void ZigLLVMAddFunctionAttr(LLVMValueRef fn, const char *attr_name, const char *attr_value);
220ZIG_EXTERN_C void ZigLLVMAddByValAttr(LLVMValueRef fn_ref, unsigned ArgNo, LLVMTypeRef type_val);269ZIG_EXTERN_C void ZigLLVMAddByValAttr(LLVMValueRef fn_ref, unsigned ArgNo, LLVMTypeRef type_val);