chore: import upstream snapshot with attribution
Lint / lint (push) Has been cancelled
CI / MacOS (push) Has been cancelled
CI / Windows (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:36:25 +08:00
commit 26446540fa
3151 changed files with 974126 additions and 0 deletions
+269
View File
@@ -0,0 +1,269 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
"""Code generation related functions."""
from tvm_ffi import Array
from . import _ffi_api
from .target import Target
def build_module(mod, target):
"""Build IRModule into Module.
Parameters
----------
mod : tvm.IRModule
The ir module.
target : str
The target module type.
Returns
-------
module : runtime.Module
The corressponding module.
"""
target = Target(target) if isinstance(target, str) else target
return _ffi_api.Build(mod, target)
def target_has_features(cpu_features, target=None):
"""Check CPU features for the target's `-mtriple` and `-mcpu` and `-mattr`.
Parameters
----------
target : Target
The TVM target.
cpu_features : str or Array
CPU Feature(s) to check.
Returns
-------
has_features : bool
True if target has the feature(s).
"""
assert isinstance(target, Target) or target is None
assert isinstance(cpu_features, Array | list | tuple | str)
has_feats = True
cpu_features = [cpu_features] if isinstance(cpu_features, str) else cpu_features
for feat in cpu_features:
has_feats &= _ffi_api.target_has_feature(feat, target)
return has_feats
def llvm_lookup_intrinsic_id(name):
"""Lookup LLVM intrinsic id by name.
Parameters
----------
name : str
The name of the intrinsic.
Returns
-------
intrin_id : int
The intrinsic id.
"""
return _ffi_api.llvm_lookup_intrinsic_id(name)
def llvm_get_intrinsic_name(intrin_id: int) -> str:
"""Get the name of an intrinsic for a given id.
Parameters
----------
intrin_id : int
The id of the intrinsic.
Returns
-------
name : str
The name of the intrinsic.
"""
return _ffi_api.llvm_get_intrinsic_name(intrin_id)
def llvm_get_system_x86_vendor():
"""Get system x86 vendor info.
Parameters
----------
Returns
-------
vendor : str
The current system's cpu vendor.
"""
return _ffi_api.llvm_get_system_x86_vendor()
def llvm_get_system_triple():
"""Get system host triple.
Parameters
----------
Returns
-------
triple : str
The current system's triple.
"""
return _ffi_api.llvm_get_system_triple()
def llvm_get_system_cpu():
"""Get system host cpu name.
Parameters
----------
Returns
-------
cpu_name : str
The current system's cpu name.
"""
return _ffi_api.llvm_get_system_cpu()
def llvm_get_targets():
"""Get LLVM target list.
Parameters
----------
Returns
-------
llvm_targets : list[str]
List of available LLVM targets.
"""
return _ffi_api.llvm_get_targets()
def llvm_get_cpu_archlist(target=None):
"""Get CPU architectures for the target's `-mtriple`.
Parameters
----------
target : Target
The TVM target.
Returns
-------
cpu_archlist : list[str]
List of available CPU architectures.
"""
assert isinstance(target, Target) or target is None
return _ffi_api.llvm_get_cpu_archlist(target)
def llvm_get_cpu_features(target=None):
"""Get CPU features for the target's `-mtriple` and `-mcpu` and considering `-mattr`.
Parameters
----------
target : Target
The TVM target.
Returns
-------
cpu_features : list[str]
List of available CPU features.
"""
assert isinstance(target, Target) or target is None
feature_map = _ffi_api.llvm_get_cpu_features(target)
return set(feature_map.keys())
def llvm_cpu_has_features(cpu_features, target=None):
"""Check CPU features for the target's `-mtriple` and `-mcpu` and considering `-mattr`.
Parameters
----------
target : Target
The TVM target.
cpu_features : str or Array
CPU Feature(s) to check.
Returns
-------
has_features : bool
True if target CPU has the feature(s).
"""
assert isinstance(target, Target) or target is None
assert isinstance(cpu_features, Array | list | tuple | str)
has_feats = True
cpu_features = [cpu_features] if isinstance(cpu_features, str) else cpu_features
for feat in cpu_features:
has_feats &= _ffi_api.llvm_cpu_has_feature(feat, target)
return has_feats
def llvm_get_vector_width(target=None):
"""Get vector width from LLVM target's `-mtriple` and `-mcpu` and considering `-mattr`.
Parameters
----------
target : Target
The TVM target.
Returns
-------
vector_width : int
Vector with of target in number of bits, -1 on error.
"""
assert isinstance(target, Target) or target is None
return _ffi_api.llvm_get_vector_width(target)
def llvm_is_valid_cpu(cpu, triple):
"""Check if a CPU name is valid for the given LLVM triple.
Parameters
----------
cpu : str
The CPU name to check (e.g. "apple-m1").
triple : str
The LLVM target triple (e.g. "arm64-apple-macos").
Returns
-------
is_valid : bool
True if the CPU name is recognized by LLVM for the given triple.
"""
return _ffi_api.llvm_is_valid_cpu(cpu, triple)
def llvm_version_major(allow_none=False):
"""Get the major LLVM version.
Parameters
----------
allow_none : bool
Whether do we allow none.
Returns
-------
major : int
The major LLVM version.
"""
try:
return _ffi_api.llvm_version_major()
except AttributeError:
if allow_none:
return None
raise RuntimeError("LLVM version is not available, please check if you built TVM with LLVM")