I am dumping C code for super_resolution_0.2.onnx using relay.build(ā¦) and want to understand how the loop bounds(224) are computed? Is it from the tensor shapes and compiler doing constant folding?
target = "c"
dev=tvm.cpu()
mod, params = relay.frontend.from_onnx(onnx_model,shape_dict,freeze_params=True)
with tvm.transform.PassContext(opt_level=3, config={"tir.disable_vectorize": True}):
graph , lib , params = relay.build(mod, target=target, params=None)
print(lib.get_source())
#ifdef __cplusplus
extern "C"
#endif
TVM_DLL int32_t tvmgen_default_fused_layout_transform(void* args, void* arg_type_ids, int32_t num_args, void* out_ret_value, void* out_ret_tcode, void* resource_handle) {
void* arg0 = (((TVMValue*)args)[0].v_handle);
int32_t arg0_code = ((int32_t*)arg_type_ids)[(0)];
void* arg1 = (((TVMValue*)args)[1].v_handle);
int32_t arg1_code = ((int32_t*)arg_type_ids)[(1)];
void* placeholder = (((DLTensor*)arg0)[0].data);
void* arg0_shape = (((DLTensor*)arg0)[0].shape);
void* arg0_strides = (((DLTensor*)arg0)[0].strides);
int32_t dev_id = (((DLTensor*)arg0)[0].device.device_id);
void* T_layout_trans = (((DLTensor*)arg1)[0].data);
void* arg1_shape = (((DLTensor*)arg1)[0].shape);
void* arg1_strides = (((DLTensor*)arg1)[0].strides);
if (!(arg0_strides == NULL)) {
}
if (!(arg1_strides == NULL)) {
}
for (int32_t ax0_ax1_fused_ax2_fused = 0; ax0_ax1_fused_ax2_fused < **224**; ++ax0_ax1_fused_ax2_fused) {
for (int32_t ax3 = 0; ax3 < **224**; ++ax3) {
((float*)T_layout_trans)[(((ax0_ax1_fused_ax2_fused * 224) + ax3))] = ((float*)placeholder)[(((ax0_ax1_fused_ax2_fused * 224) + ax3))];
}
}
return 0;
}