Skip to content

Commit

Permalink
feat(IR): add Intrinsic
Browse files Browse the repository at this point in the history
  • Loading branch information
ApsarasX committed Oct 22, 2021
1 parent 3ab0be6 commit 403f747
Show file tree
Hide file tree
Showing 10 changed files with 610 additions and 7 deletions.
1 change: 1 addition & 0 deletions include/IR/IR.h
Expand Up @@ -36,5 +36,6 @@
#include "IR/IRBuilder.h"
#include "IR/DataLayout.h"
#include "IR/Verifier.h"
#include "IR/Intrinsic.h"

void InitIR(Napi::Env env, Napi::Object &exports);
8 changes: 8 additions & 0 deletions include/IR/Intrinsic.h
@@ -0,0 +1,8 @@
#pragma once

#include <napi.h>
#include <llvm/IR/Intrinsics.h>

namespace Intrinsic {
void Init(Napi::Env env, Napi::Object &exports);
}
5 changes: 4 additions & 1 deletion include/IR/Verifier.h
@@ -1,5 +1,8 @@
#pragma once

#include <napi.h>
#include <llvm/IR/Verifier.h>

void InitVerifier(Napi::Env env, Napi::Object &exports);
namespace Verifier {
void Init(Napi::Env env, Napi::Object &exports);
}
3 changes: 3 additions & 0 deletions include/Util/ErrMsg.h
Expand Up @@ -228,6 +228,9 @@ namespace ErrMsg {
static const char *linkModules = "Linker.linkModules needs to be called with (dest: Module, src: Module)";
}
}
namespace Namespace::Intrinsic {
static const char *getDeclaration = "Intrinsic.getDeclaration needs to be called with: (module: Module, id: number, types?: [])";
}
namespace Function {
static const char *WriteBitcodeToFile = "WriteBitcodeToFile needs to be called with: (module: Module, filename: string)";
static const char *verifyFunction = "verifyFunction needs to be called with (func: Function)";
Expand Down
269 changes: 269 additions & 0 deletions llvm-bindings.d.ts
Expand Up @@ -784,6 +784,275 @@ declare namespace llvm {
public ClearInsertionPoint(): void;
}

namespace Intrinsic {
const abs: number;
const addressofreturnaddress: number;
const adjust_trampoline: number;
const annotation: number;
const assume: number;
const bitreverse: number;
const bswap: number;
const call_preallocated_arg: number;
const call_preallocated_setup: number;
const call_preallocated_teardown: number;
const canonicalize: number;
const ceil: number;
const clear_cache: number;
const codeview_annotation: number;
const convert_from_fp16: number;
const convert_to_fp16: number;
const copysign: number;
const coro_alloc: number;
const coro_alloca_alloc: number;
const coro_alloca_free: number;
const coro_alloca_get: number;
const coro_async_context_alloc: number;
const coro_async_context_dealloc: number;
const coro_async_resume: number;
const coro_begin: number;
const coro_destroy: number;
const coro_done: number;
const coro_end: number;
const coro_end_async: number;
const coro_frame: number;
const coro_free: number;
const coro_id: number;
const coro_id_async: number;
const coro_id_retcon: number;
const coro_id_retcon_once: number;
const coro_noop: number;
const coro_param: number;
const coro_prepare_async: number;
const coro_prepare_retcon: number;
const coro_promise: number;
const coro_resume: number;
const coro_save: number;
const coro_size: number;
const coro_subfn_addr: number;
const coro_suspend: number;
const coro_suspend_async: number;
const coro_suspend_retcon: number;
const cos: number;
const ctlz: number;
const ctpop: number;
const cttz: number;
const dbg_addr: number;
const dbg_declare: number;
const dbg_label: number;
const dbg_value: number;
const debugtrap: number;
const donothing: number;
const eh_dwarf_cfa: number;
const eh_exceptioncode: number;
const eh_exceptionpointer: number;
const eh_recoverfp: number;
const eh_return_i32: number;
const eh_return_i64: number;
const eh_sjlj_callsite: number;
const eh_sjlj_functioncontext: number;
const eh_sjlj_longjmp: number;
const eh_sjlj_lsda: number;
const eh_sjlj_setjmp: number;
const eh_sjlj_setup_dispatch: number;
const eh_typeid_for: number;
const eh_unwind_init: number;
const exp: number;
const exp2: number;
const expect: number;
const expect_with_probability: number;
const fabs: number;
const floor: number;
const flt_rounds: number;
const fma: number;
const fmuladd: number;
const fptosi_sat: number;
const fptoui_sat: number;
const frameaddress: number;
const fshl: number;
const fshr: number;
const gcread: number;
const gcroot: number;
const gcwrite: number;
const get_active_lane_mask: number;
const get_dynamic_area_offset: number;
const hwasan_check_memaccess: number;
const hwasan_check_memaccess_shortgranules: number;
const icall_branch_funnel: number;
const init_trampoline: number;
const instrprof_increment: number;
const instrprof_increment_step: number;
const instrprof_value_profile: number;
const invariant_end: number;
const invariant_start: number;
const is_constant: number;
const launder_invariant_group: number;
const lifetime_end: number;
const lifetime_start: number;
const llrint: number;
const llround: number;
const load_relative: number;
const localaddress: number;
const localescape: number;
const localrecover: number;
const log: number;
const log10: number;
const log2: number;
const loop_decrement: number;
const loop_decrement_reg: number;
const lrint: number;
const lround: number;
const masked_compressstore: number;
const masked_expandload: number;
const masked_gather: number;
const masked_load: number;
const masked_scatter: number;
const masked_store: number;
const matrix_column_major_load: number;
const matrix_column_major_store: number;
const matrix_multiply: number;
const matrix_transpose: number;
const maximum: number;
const maxnum: number;
const memcpy: number;
const memcpy_element_unordered_atomic: number;
const memcpy_inline: number;
const memmove: number;
const memmove_element_unordered_atomic: number;
const memset: number;
const memset_element_unordered_atomic: number;
const minimum: number;
const minnum: number;
const nearbyint: number;
const objc_arc_annotation_bottomup_bbend: number;
const objc_arc_annotation_bottomup_bbstart: number;
const objc_arc_annotation_topdown_bbend: number;
const objc_arc_annotation_topdown_bbstart: number;
const objc_autorelease: number;
const objc_autoreleasePoolPop: number;
const objc_autoreleasePoolPush: number;
const objc_autoreleaseReturnValue: number;
const objc_clang_arc_use: number;
const objc_copyWeak: number;
const objc_destroyWeak: number;
const objc_initWeak: number;
const objc_loadWeak: number;
const objc_loadWeakRetained: number;
const objc_moveWeak: number;
const objc_release: number;
const objc_retain: number;
const objc_retain_autorelease: number;
const objc_retainAutorelease: number;
const objc_retainAutoreleaseReturnValue: number;
const objc_retainAutoreleasedReturnValue: number;
const objc_retainBlock: number;
const objc_retainedObject: number;
const objc_storeStrong: number;
const objc_storeWeak: number;
const objc_sync_enter: number;
const objc_sync_exit: number;
const objc_unretainedObject: number;
const objc_unretainedPointer: number;
const objc_unsafeClaimAutoreleasedReturnValue: number;
const objectsize: number;
const pcmarker: number;
const pow: number;
const powi: number;
const prefetch: number;
const preserve_array_access_index: number;
const preserve_struct_access_index: number;
const preserve_union_access_index: number;
const pseudoprobe: number;
const ptr_annotation: number;
const ptrmask: number;
const read_register: number;
const read_volatile_register: number;
const readcyclecounter: number;
const returnaddress: number;
const rint: number;
const round: number;
const roundeven: number;
const sadd_sat: number;
const sadd_with_overflow: number;
const sdiv_fix: number;
const sdiv_fix_sat: number;
const set_loop_iterations: number;
const sideeffect: number;
const sin: number;
const smax: number;
const smin: number;
const smul_fix: number;
const smul_fix_sat: number;
const smul_with_overflow: number;
const sponentry: number;
const sqrt: number;
const ssa_copy: number;
const sshl_sat: number;
const ssub_sat: number;
const ssub_with_overflow: number;
const stackguard: number;
const stackprotector: number;
const stackrestore: number;
const stacksave: number;
const start_loop_iterations: number;
const strip_invariant_group: number;
const test_set_loop_iterations: number;
const thread_pointer: number;
const trap: number;
const trunc: number;
const type_checked_load: number;
const type_test: number;
const uadd_sat: number;
const uadd_with_overflow: number;
const ubsantrap: number;
const udiv_fix: number;
const udiv_fix_sat: number;
const umax: number;
const umin: number;
const umul_fix: number;
const umul_fix_sat: number;
const umul_with_overflow: number;
const ushl_sat: number;
const usub_sat: number;
const usub_with_overflow: number;
const vacopy: number;
const vaend: number;
const vastart: number;
const var_annotation: number;
const vector_reduce_add: number;
const vector_reduce_and: number;
const vector_reduce_fadd: number;
const vector_reduce_fmax: number;
const vector_reduce_fmin: number;
const vector_reduce_fmul: number;
const vector_reduce_mul: number;
const vector_reduce_or: number;
const vector_reduce_smax: number;
const vector_reduce_smin: number;
const vector_reduce_umax: number;
const vector_reduce_umin: number;
const vector_reduce_xor: number;
const vp_add: number;
const vp_and: number;
const vp_ashr: number;
const vp_lshr: number;
const vp_mul: number;
const vp_or: number;
const vp_sdiv: number;
const vp_shl: number;
const vp_srem: number;
const vp_sub: number;
const vp_udiv: number;
const vp_urem: number;
const vp_xor: number;
const vscale: number;
const write_register: number;
const xray_customevent: number;
const xray_typedevent: number;

function getDeclaration(module: Module, id: number, types?: Type[]): Function;
}


function verifyFunction(func: Function): boolean;

function verifyModule(module: Module): boolean;
Expand Down
3 changes: 2 additions & 1 deletion src/IR/IR.cpp
Expand Up @@ -34,5 +34,6 @@ void InitIR(Napi::Env env, Napi::Object &exports) {
BasicBlock::Init(env, exports);
IRBuilder::Init(env, exports);
DataLayout::Init(env, exports);
InitVerifier(env, exports);
Verifier::Init(env, exports);
Intrinsic::Init(env, exports);
}

0 comments on commit 403f747

Please sign in to comment.