MCPcopy Index your code
hub / github.com/apache/tvm / setPackedArguments

Method setPackedArguments

web/src/runtime.ts:2047–2128  ·  view source on GitHub ↗

* Set packed function arguments into the location indicated by argsValue and argsCode. * Allocate new temporary space from the stack if necessary. * * @param stack The call stack. * @param args The input arguments. * @param packedArgs The offset of packedArgs.

(
    stack: CachedCallStack,
    args: Array<any>,
    packedArgs: PtrOffset,
  )

Source from the content-addressed store, hash-verified

2045 * @param packedArgs The offset of packedArgs.
2046 */
2047 setPackedArguments(
2048 stack: CachedCallStack,
2049 args: Array<any>,
2050 packedArgs: PtrOffset,
2051 ): void {
2052 for (let i = 0; i < args.length; ++i) {
2053 let val = args[i];
2054 const tp = typeof val;
2055 const argOffset = packedArgs + i * SizeOf.TVMFFIAny;
2056 const argTypeIndexOffset = argOffset;
2057 const argZeroPaddingOffset = argOffset + SizeOf.I32;
2058 const argValueOffset = argOffset + SizeOf.I32 * 2;
2059
2060 // Convert string[] to a TVMArray of, hence treated as a TVMObject
2061 if (val instanceof Array && val.every(e => typeof e === "string")) {
2062 const tvmStringArray: string[] = [];
2063 val.forEach(e => { tvmStringArray.push(e) });
2064 val = this.makeTVMArray(tvmStringArray);
2065 }
2066
2067 // clear off the extra zero padding before ptr storage
2068 stack.storeI32(argZeroPaddingOffset, 0);
2069 // clear off the extra zero padding after ptr storage
2070 stack.storeI32(argValueOffset + SizeOf.I32, 0);
2071 if (val instanceof Tensor) {
2072 if (!val.isView) {
2073 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFITensor);
2074 stack.storePtr(argValueOffset, val.getHandle());
2075 } else {
2076 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIDLTensorPtr);
2077 stack.storePtr(argValueOffset, val.getHandle());
2078 }
2079 } else if (val instanceof Scalar) {
2080 if (val.dtype.startsWith("int") || val.dtype.startsWith("uint")) {
2081 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIInt);
2082 stack.storeI64(argValueOffset, val.value);
2083 } else if (val.dtype.startsWith("float")) {
2084 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIFloat);
2085 stack.storeF64(argValueOffset, val.value);
2086 } else {
2087 assert(val.dtype === "handle", "Expect handle");
2088 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIOpaquePtr);
2089 stack.storePtr(argValueOffset, val.value);
2090 }
2091 } else if (val instanceof DLDevice) {
2092 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIDevice);
2093 stack.storeI32(argValueOffset, val.deviceType);
2094 stack.storeI32(argValueOffset + SizeOf.I32, val.deviceId);
2095 } else if (tp === "boolean") {
2096 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIBool);
2097 stack.storeI64(argValueOffset, val ? 1 : 0);
2098 } else if (tp === "number") {
2099 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIFloat);
2100 stack.storeF64(argValueOffset, val);
2101 } else if (tp === "function" && val.hasOwnProperty("_tvmPackedCell")) {
2102 stack.storePtr(argValueOffset, val._tvmPackedCell.getHandle());
2103 stack.storeI32(argTypeIndexOffset, TypeIndex.kTVMFFIFunction);
2104 } else if (val === null || val === undefined) {

Callers 2

packedFuncMethod · 0.95

Calls 12

makeTVMArrayMethod · 0.95
toPackedFuncInternalMethod · 0.95
assertFunction · 0.90
storeI32Method · 0.80
storePtrMethod · 0.80
getHandleMethod · 0.80
storeI64Method · 0.80
storeF64Method · 0.80
allocThenSetArgStringMethod · 0.80
allocThenSetArgBytesMethod · 0.80
typeIndexMethod · 0.80
toStringMethod · 0.45

Tested by

no test coverage detected