Skip to content
Snippets Groups Projects
Commit ba914820 authored by Akash Kothari's avatar Akash Kothari
Browse files

Moved VISC to HPVM in the intrinsics table

parent f6227e16
No related branches found
No related tags found
No related merge requests found
//===- IntrinsicsVISC.td - Defines VISC intrinsics ---------*- tablegen -*-===//
//===- IntrinsicsHPVM.td - Defines HPVM intrinsics ---------*- tablegen -*-===//
//
// The LLVM Compiler Infrastructure
//
......@@ -7,268 +7,250 @@
//
//===----------------------------------------------------------------------===//
//
// This file defines all of the VISC-specific intrinsics.
// This file defines all of the HPVM-specific intrinsics.
//
//===----------------------------------------------------------------------===//
let TargetPrefix = "visc" in {
/* All intrinsics start with "llvm.visc."
let TargetPrefix = "hpvm" in {
/* All intrinsics start with "llvm.hpvm."
* As we do not want the compiler to mess with these intrinsics, we assume
* worst memory behavior for all these intrinsics.
*/
/* Initialization intrinsic -
* i8* llvm.visc.setup(function*);
* i8* llvm.hpvm.setup(function*);
*/
def int_visc_init : Intrinsic<[], [], []>;
def int_hpvm_init : Intrinsic<[], [], []>;
/* Launch intrinsic - with streaming argument
* i8* llvm.visc.launch(i8*, ArgList*, i1);
* i8* llvm.hpvm.launch(i8*, ArgList*, i1);
*/
def int_visc_launch : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_launch : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_ptr_ty, llvm_i1_ty], []>;
/* Push intrinsic - push data on streaming pipeline
* void llvm.visc.push(i8*, ArgList*);
* void llvm.hpvm.push(i8*, ArgList*);
*/
def int_visc_push : Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty], []>;
def int_hpvm_push : Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty], []>;
/* Pop intrinsic - pop data from streaming pipeline
* i8* llvm.visc.pop(i8*);
* i8* llvm.hpvm.pop(i8*);
*/
def int_visc_pop : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_pop : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Cleanup intrinsic -
* void llvm.visc.cleanup(i8*);
* void llvm.hpvm.cleanup(i8*);
*/
def int_visc_cleanup : Intrinsic<[], [], []>;
def int_hpvm_cleanup : Intrinsic<[], [], []>;
/* Wait intrinsic -
* void llvm.visc.wait(graphID*);
* void llvm.hpvm.wait(graphID*);
*/
def int_visc_wait : Intrinsic<[], [llvm_ptr_ty], []>;
def int_hpvm_wait : Intrinsic<[], [llvm_ptr_ty], []>;
/* Track memory intrinsic -
* void llvm.visc.trackMemory(i8*, i64);
* void llvm.hpvm.trackMemory(i8*, i64);
*/
def int_visc_trackMemory : Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
def int_hpvm_trackMemory : Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
/* Track memory intrinsic -
* void llvm.visc.untrackMemory(i8*);
* void llvm.hpvm.untrackMemory(i8*);
*/
def int_visc_untrackMemory : Intrinsic<[], [llvm_ptr_ty], []>;
def int_hpvm_untrackMemory : Intrinsic<[], [llvm_ptr_ty], []>;
/* Request memory intrinsic -
* void llvm.visc.requestMemory(i8*, i64);
* void llvm.hpvm.requestMemory(i8*, i64);
*/
def int_visc_requestMemory : Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
def int_hpvm_requestMemory : Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
/* Create Node intrinsic -
* i8* llvm.visc.createNode(function*);
* i8* llvm.hpvm.createNode(function*);
*/
def int_visc_createNode : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_createNode : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Create Node 1D array intrinsic -
* i8* llvm.visc.createNode1D(function*, i64);
* i8* llvm.hpvm.createNode1D(function*, i64);
*/
def int_visc_createNode1D : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_createNode1D : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_i64_ty], []>;
/* Create Node 2D array intrinsic -
* i8* llvm.visc.createNode2D(function*, i64, i64);
* i8* llvm.hpvm.createNode2D(function*, i64, i64);
*/
def int_visc_createNode2D : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_createNode2D : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_i64_ty, llvm_i64_ty], []>;
/* Create Node 3D array intrinsic -
* i8* llvm.visc.createNode2D(function*, i64, i64, i64);
* i8* llvm.hpvm.createNode2D(function*, i64, i64, i64);
*/
def int_visc_createNode3D : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_createNode3D : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_i64_ty, llvm_i64_ty, llvm_i64_ty],
[]>;
/* Create dataflow edge intrinsic -
* i8* llvm.visc.createEdge(i8*, i8*, i1, i32, i32, i1);
* i8* llvm.hpvm.createEdge(i8*, i8*, i1, i32, i32, i1);
*/
def int_visc_createEdge : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_ptr_ty,
def int_hpvm_createEdge : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_ptr_ty,
llvm_i1_ty, llvm_i32_ty, llvm_i32_ty,
llvm_i1_ty],
[]>;
/* Create bind input intrinsic -
* void llvm.visc.bind.input(i8*, i32, i32);
* void llvm.hpvm.bind.input(i8*, i32, i32);
*/
def int_visc_bind_input : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty,
def int_hpvm_bind_input : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty,
llvm_i32_ty, llvm_i1_ty], []>;
/* Create bind output intrinsic -
* void llvm.visc.bind.output(i8*, i32, i32);
* void llvm.hpvm.bind.output(i8*, i32, i32);
*/
def int_visc_bind_output : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty,
def int_hpvm_bind_output : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty,
llvm_i32_ty, llvm_i1_ty], []>;
/* Find associated dataflow node intrinsic -
* i8* llvm.visc.getNode();
* i8* llvm.hpvm.getNode();
*/
def int_visc_getNode : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
def int_hpvm_getNode : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
/* Find parent dataflow node intrinsic -
* i8* llvm.visc.getParentNode(i8*);
* i8* llvm.hpvm.getParentNode(i8*);
*/
def int_visc_getParentNode : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>;
def int_hpvm_getParentNode : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>;
/* Find the number of dimensions of a dataflow node intrinsic -
* i32 llvm.visc.getNumDims(i8*);
* i32 llvm.hpvm.getNumDims(i8*);
*/
def int_visc_getNumDims : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem]>;
def int_hpvm_getNumDims : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem]>;
/* Find the unique indentifier of a dataflow node (with respect to his parent
* node) in the specified dimension intrinsic -
*/
/* i64 llvm.visc.getNodeInstanceID.[xyz](i8*);
/* i64 llvm.hpvm.getNodeInstanceID.[xyz](i8*);
*/
def int_visc_getNodeInstanceID_x : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
def int_hpvm_getNodeInstanceID_x : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
[IntrNoMem]>;
def int_visc_getNodeInstanceID_y : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
def int_hpvm_getNodeInstanceID_y : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
[IntrNoMem]>;
def int_visc_getNodeInstanceID_z : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
def int_hpvm_getNodeInstanceID_z : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
[IntrNoMem]>;
/* Find the number of instances of a dataflow node in the specified dimension
* intrinsic -
*/
/* i64 llvm.visc.getNumNodeInstances.[xyz](i8*);
/* i64 llvm.hpvm.getNumNodeInstances.[xyz](i8*);
*/
def int_visc_getNumNodeInstances_x : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
def int_hpvm_getNumNodeInstances_x : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
[IntrNoMem]>;
def int_visc_getNumNodeInstances_y : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
def int_hpvm_getNumNodeInstances_y : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
[IntrNoMem]>;
def int_visc_getNumNodeInstances_z : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
def int_hpvm_getNumNodeInstances_z : Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
[IntrNoMem]>;
/* Local Barrier
* void llvm.visc.barrier();
* void llvm.hpvm.barrier();
*/
def int_visc_barrier : Intrinsic<[], [], []>;
def int_hpvm_barrier : Intrinsic<[], [], []>;
/* Memory allocation inside the graph
* i8* llvm.visc.malloc();
* i8* llvm.hpvm.malloc();
*/
def int_visc_malloc : Intrinsic<[llvm_ptr_ty], [llvm_i64_ty], []>;
def int_hpvm_malloc : Intrinsic<[llvm_ptr_ty], [llvm_i64_ty], []>;
/* Find the vector length supported by target architecture
* intrinsic -
* i32 llvm.visc.getVectorLength();
* i32 llvm.hpvm.getVectorLength();
*/
def int_visc_getVectorLength : Intrinsic<[llvm_i32_ty], [], []>;
def int_hpvm_getVectorLength : Intrinsic<[llvm_i32_ty], [], []>;
/* ============ Atomic intrinsics ============= */
// Atomic arithmetic operations
/* i32 llvm.visc.atomic.cmpxchg(i32*, i32)*/
def int_visc_atomic_cmpxchg: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty,
llvm_i32_ty], []>;
/* i32 llvm.visc.atomic.add(i32*, i32)*/
def int_visc_atomic_add: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
/* i32 llvm.hpvm.atomic.add(i32*, i32)*/
def int_hpvm_atomic_add: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.sub(i32*, i32)*/
def int_visc_atomic_sub: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
/* i32 llvm.hpvm.atomic.sub(i32*, i32)*/
def int_hpvm_atomic_sub: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.xchg(i32*, i32)*/
def int_visc_atomic_xchg: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
/* i32 llvm.hpvm.atomic.xchg(i32*, i32)*/
def int_hpvm_atomic_xchg: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.inc(i32*, i32)*/
def int_visc_atomic_inc: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty],
/* i32 llvm.hpvm.atomic.min(i32*, i32)*/
def int_hpvm_atomic_min: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.dec(i32*, i32)*/
def int_visc_atomic_dec: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty],
/* i32 llvm.hpvm.atomic.maxi32*, i32)*/
def int_hpvm_atomic_max: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.min(i32*, i32)*/
def int_visc_atomic_min: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
// Atomic bitwise operations
/* i32 llvm.visc.atomic.umin(i32*, i32)*/
def int_visc_atomic_umin: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
/* i32 llvm.hpvm.atomic.and(i32*, i32)*/
def int_hpvm_atomic_and: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.maxi32*, i32)*/
def int_visc_atomic_max: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
/* i32 llvm.hpvm.atomic.or(i32*, i32)*/
def int_hpvm_atomic_or: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.umaxi32*, i32)*/
def int_visc_atomic_umax: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
/* i32 llvm.hpvm.atomic.xor(i32*, i32)*/
def int_hpvm_atomic_xor: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
// Atomic bitwise operations
/* i32 llvm.visc.atomic.and(i32*, i32)*/
def int_visc_atomic_and: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.or(i32*, i32)*/
def int_visc_atomic_or: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/* i32 llvm.visc.atomic.xor(i32*, i32)*/
def int_visc_atomic_xor: Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[]>;
/***************************************************************************/
/***************************************************************************/
/* ApproxHPVM intrinsics */
/***************************************************************************/
/* Tensor add intrinsic
* i8* llvm.visc.tensor.add(i8*, i8*);
* i8* llvm.hpvm.tensor.add(i8*, i8*);
*/
def int_visc_tensor_add : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_add : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_ptr_ty], []>;
/* Tensor mul intrinsic
* i8* llvm.visc.tensor.mul(i8*, i8*);
* i8* llvm.hpvm.tensor.mul(i8*, i8*);
*/
def int_visc_tensor_mul : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_mul : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_ptr_ty], []>;
/* Tensor relu intrinsic
* i8* llvm.visc.tensor.relu(i8*);
* i8* llvm.hpvm.tensor.relu(i8*);
*/
def int_visc_tensor_relu : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_tensor_relu : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Tensor clipped relu intrinsic
* i8* llvm.visc.tensor.clipped.relu(i8*);
* i8* llvm.hpvm.tensor.clipped.relu(i8*);
*/
def int_visc_tensor_clipped_relu : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_tensor_clipped_relu : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Tensor tanh intrinsic
* i8* llvm.visc.tensor.tanh(i8*);
* i8* llvm.hpvm.tensor.tanh(i8*);
*/
def int_visc_tensor_tanh : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_tensor_tanh : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Tensor sigmoid intrinsic
* i8* llvm.visc.tensor.sigmoid(i8*);
* i8* llvm.hpvm.tensor.sigmoid(i8*);
*/
def int_visc_tensor_sigmoid : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_tensor_sigmoid : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Tensor softmax intrinsic
* i8* llvm.visc.tensor.softmax(i8*);
* i8* llvm.hpvm.tensor.softmax(i8*);
*/
def int_visc_tensor_softmax : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
def int_hpvm_tensor_softmax : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], []>;
/* Tensor convolution intrinsic
* i8* llvm.visc.tensor.convolution(i8*, i8*, i32, i32, i32, i32);
* i8* llvm.hpvm.tensor.convolution(i8*, i8*, i32, i32, i32, i32);
*/
def int_visc_tensor_convolution : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_convolution : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_ptr_ty,
llvm_i32_ty,
llvm_i32_ty,
......@@ -276,9 +258,9 @@ let TargetPrefix = "visc" in {
llvm_i32_ty], []>;
/* Tensor group convolution intrinsic
* i8* llvm.visc.tensor.group.convolution(i8*, i8*, i32, i32, i32, i32, i32, i32);
* i8* llvm.hpvm.tensor.group.convolution(i8*, i8*, i32, i32, i32, i32, i32, i32);
*/
def int_visc_tensor_group_convolution : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_group_convolution : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_ptr_ty,
llvm_i32_ty,
llvm_i32_ty,
......@@ -288,9 +270,9 @@ let TargetPrefix = "visc" in {
llvm_i32_ty], []>;
/* Tensor BatchNorm intrinsic
* i8* llvm.visc.tensor.batchnorm(i8*, i8*, i8*, i8*, i8*, double);
* i8* llvm.hpvm.tensor.batchnorm(i8*, i8*, i8*, i8*, i8*, double);
*/
def int_visc_tensor_batchnorm : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_batchnorm : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_ptr_ty,
llvm_ptr_ty,
llvm_ptr_ty,
......@@ -299,25 +281,25 @@ let TargetPrefix = "visc" in {
/* Tensor pool intrinsics: max, min, average
* i8* llvm.visc.tensor.pool.max(i8*, i32, i32, i32, i32, i32, i32);
* i8* llvm.visc.tensor.pool.min(i8*, i32, i32, i32, i32, i32, i32);
* i8* llvm.visc.tensor.pool.average(i8*, i32, i32, i32, i32, i32, i32);
* i8* llvm.hpvm.tensor.pool.max(i8*, i32, i32, i32, i32, i32, i32);
* i8* llvm.hpvm.tensor.pool.min(i8*, i32, i32, i32, i32, i32, i32);
* i8* llvm.hpvm.tensor.pool.average(i8*, i32, i32, i32, i32, i32, i32);
*/
def int_visc_tensor_pool_max : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_pool_max : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty], []>;
def int_visc_tensor_pool_min : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_pool_min : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty], []>;
def int_visc_tensor_pool_mean : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
def int_hpvm_tensor_pool_mean : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty,
llvm_i32_ty,
llvm_i32_ty,
llvm_i32_ty,
......@@ -325,7 +307,5 @@ let TargetPrefix = "visc" in {
llvm_i32_ty,
llvm_i32_ty], []>;
def int_visc_node_id : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], []>;
def int_hpvm_node_id : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], []>;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment