This is an automated email from the ASF dual-hosted git repository.
kparzysz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new 6def53aeaa [Target] Only append default keys if target doesn't have
any yet (#12474)
6def53aeaa is described below
commit 6def53aeaa51b4c24290909500057b3166fbeeea
Author: Krzysztof Parzyszek <[email protected]>
AuthorDate: Thu Aug 18 18:11:23 2022 -0500
[Target] Only append default keys if target doesn't have any yet (#12474)
* [Target] Only append default keys if target doesn't have any yet
This allows target parsers to provide their own target keys. Without this
change, the default keys would always be appended, which may or may not
be desirable.
* Add "cpu" to ARM CPU keys
* Add "cpu" to the keys in the mprofile target parser
* Restore the mprofile cpptest, since the "cpu" key is back
* So the -device attribute is actually needed...
---
python/tvm/target/target.py | 32 +++++++++++++++----------------
src/target/parsers/mprofile.cc | 10 ++++++----
src/target/target.cc | 11 +++++++----
tests/cpp/target/parsers/mprofile_test.cc | 3 ++-
tests/cpp/target_test.cc | 3 +--
5 files changed, 32 insertions(+), 27 deletions(-)
diff --git a/python/tvm/target/target.py b/python/tvm/target/target.py
index aee4aa31a7..e0e5f0177b 100644
--- a/python/tvm/target/target.py
+++ b/python/tvm/target/target.py
@@ -531,7 +531,7 @@ def arm_cpu(model="unknown", options=None):
}
pre_defined_opt = trans_table.get(model, ["-model=%s" % model])
- opts = ["-device=arm_cpu"] + pre_defined_opt
+ opts = ["-keys=arm_cpu,cpu", "-device=arm_cpu"] + pre_defined_opt
opts = _merge_opts(opts, options)
return Target(" ".join(["llvm"] + opts))
@@ -612,7 +612,7 @@ def riscv_cpu(model="sifive-u54", options=None):
}
pre_defined_opt = trans_table.get(model, ["-model=%s" % model])
- opts = ["-device=arm_cpu"] + pre_defined_opt
+ opts = ["-keys=arm_cpu,cpu", "-device=arm_cpu"] + pre_defined_opt
opts = _merge_opts(opts, options)
return Target(" ".join(["llvm"] + opts))
@@ -762,22 +762,22 @@ def hexagon(cpu_ver="v66", **kwargs):
STM32_SUPPORTED_SERIES = {
# High-Performance
- "stm32H7xx": ["-device=arm_cpu", "-mcpu=cortex-m7", "-march=armv7e-m"],
- "stm32F7xx": ["-device=arm_cpu", "-mcpu=cortex-m7"],
- "stm32F4xx": ["-device=arm_cpu", "-mcpu=cortex-m4"],
- "stm32F2xx": ["-device=arm_cpu", "-mcpu=cortex-m3"],
+ "stm32H7xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m7",
"-march=armv7e-m"],
+ "stm32F7xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m7"],
+ "stm32F4xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m4"],
+ "stm32F2xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m3"],
# Mainstream
- "stm32G0xx": ["-device=arm_cpu", "-mcpu=cortex-m0+"],
- "stm32F0xx": ["-device=arm_cpu", "-mcpu=cortex-m0"],
- "stm32F1xx": ["-device=arm_cpu", "-mcpu=cortex-m3"],
- "stm32G4xx": ["-device=arm_cpu", "-mcpu=cortex-m4"],
- "stm32F3xx": ["-device=arm_cpu", "-mcpu=cortex-m4"],
+ "stm32G0xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m0+"],
+ "stm32F0xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m0"],
+ "stm32F1xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m3"],
+ "stm32G4xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m4"],
+ "stm32F3xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m4"],
# Low-power
- "stm32U5xx": ["-device=arm_cpu", "-mcpu=cortex-m33"],
- "stm32L5xx": ["-device=arm_cpu", "-mcpu=cortex-m33"],
- "stm32L4xx": ["-device=arm_cpu", "-mcpu=cortex-m4"],
- "stm32L1xx": ["-device=arm_cpu", "-mcpu=cortex-m3"],
- "stm32L0xx": ["-device=arm_cpu", "-mcpu=cortex-m0+"],
+ "stm32U5xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m33"],
+ "stm32L5xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m33"],
+ "stm32L4xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m4"],
+ "stm32L1xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m3"],
+ "stm32L0xx": ["-keys=arm_cpu,cpu", "-device=arm_cpu", "-mcpu=cortex-m0+"],
}
diff --git a/src/target/parsers/mprofile.cc b/src/target/parsers/mprofile.cc
index 7fb61ff893..9bcf2c9078 100644
--- a/src/target/parsers/mprofile.cc
+++ b/src/target/parsers/mprofile.cc
@@ -105,15 +105,17 @@ static TargetFeatures GetFeatures(TargetJSON target) {
}
static Array<String> MergeKeys(Optional<Array<String>> existing_keys) {
- const String kExtraKey = "arm_cpu";
+ const Array<String> kExtraKeys = {"arm_cpu", "cpu"};
if (!existing_keys) {
- return {kExtraKey};
+ return kExtraKeys;
}
Array<String> keys = existing_keys.value();
- if (std::find(keys.begin(), keys.end(), kExtraKey) == keys.end()) {
- keys.push_back(kExtraKey);
+ for (String key : kExtraKeys) {
+ if (std::find(keys.begin(), keys.end(), key) == keys.end()) {
+ keys.push_back(key);
+ }
}
return keys;
}
diff --git a/src/target/target.cc b/src/target/target.cc
index 6124cedc72..e3e9354a61 100644
--- a/src/target/target.cc
+++ b/src/target/target.cc
@@ -885,7 +885,8 @@ ObjectPtr<Object> TargetInternal::FromConfig(Map<String,
ObjectRef> config) {
// parse "keys"
{
std::vector<String> keys;
- if (config.count(kKeys)) {
+ bool has_user_keys = config.count(kKeys);
+ if (has_user_keys) {
// user provided keys
if (const auto* cfg_keys = config[kKeys].as<ArrayNode>()) {
for (const ObjectRef& e : *cfg_keys) {
@@ -909,9 +910,11 @@ ObjectPtr<Object> TargetInternal::FromConfig(Map<String,
ObjectRef> config) {
keys.push_back(GetRef<String>(device));
}
}
- // add default keys
- for (const auto& key : target->kind->default_keys) {
- keys.push_back(key);
+ if (!has_user_keys) {
+ // add default keys
+ for (const auto& key : target->kind->default_keys) {
+ keys.push_back(key);
+ }
}
// de-duplicate keys
target->keys = DeduplicateKeys(keys);
diff --git a/tests/cpp/target/parsers/mprofile_test.cc
b/tests/cpp/target/parsers/mprofile_test.cc
index 0dcc23141d..97fb227e41 100644
--- a/tests/cpp/target/parsers/mprofile_test.cc
+++ b/tests/cpp/target/parsers/mprofile_test.cc
@@ -69,8 +69,9 @@ TEST(MProfileParser, ParseTarget) {
TargetJSON target = ParseTarget({});
TargetFeatures features = Downcast<TargetFeatures>(target.at("features"));
Array<String> keys = Downcast<Array<String>>(target.at("keys"));
- ASSERT_EQ(keys.size(), 1);
+ ASSERT_EQ(keys.size(), 2);
ASSERT_EQ(keys[0], "arm_cpu");
+ ASSERT_EQ(keys[1], "cpu");
ASSERT_EQ(Downcast<Bool>(features.at("has_mve")), false);
ASSERT_EQ(Downcast<Bool>(features.at("has_dsp")), false);
diff --git a/tests/cpp/target_test.cc b/tests/cpp/target_test.cc
index 4b4de2b5f4..694a9226ed 100644
--- a/tests/cpp/target_test.cc
+++ b/tests/cpp/target_test.cc
@@ -170,9 +170,8 @@ TEST(TargetCreationFail, TargetKindNotFound) {
TEST(TargetCreation, TargetParser) {
Target test_target("TestTargetParser -mcpu=woof");
ASSERT_EQ(test_target->GetAttr<String>("mcpu").value(), "super_woof");
- ASSERT_EQ(test_target->keys.size(), 2);
+ ASSERT_EQ(test_target->keys.size(), 1);
ASSERT_EQ(test_target->keys[0], "super");
- ASSERT_EQ(test_target->keys[1], "cpu");
}
TEST(TargetCreation, TargetFeatures) {