Skip to content

Commit af5a6c4

Browse files
authored
[CodegenC] Updated unit test for sorted CodegenC output (#14949)
* [Bugfix][TIR][VTA] Update host-side target, even without device func This resolves an issue introduced by the combination of #14918 and #14945. The bug occurred for targets that do not require device-side codegen, but do require a `device_type` other than `kDLCPU`. It wasn't caught by CI, as the issue only occurred with the combination of both PRs. 1. #14918 updated `SplitHostDevice` to only modify the `"target"` attribute when a device-side function has been extracted. 2. For VTA, there is no device-side function, as everything is done through host-side API calls. 3. From (1) and (2), the VTA examples kept the target `T.target("ext_dev", host="llvm")` after the `SplitHostDevice` pass, instead of being updated to `T.target("llvm")`. 4. #14945 restricted CombineContextCall to only apply to host-side passes. 5. From (4) and (5), the `CombineContextCall` pass was no longer applied to the VTA context calls. This PR fixes `SplitHostDevice`, updating the target from `T.target("ext_dev", host="llvm")` to `T.target("llvm")`, even if no device sections have been extracted from the function. * [CodegenC] Updated unit test for sorted CodegenC output Previously, this unit test generated a `Map<tvm::Target, IRModule>` whose default iteration order was not sorted by function name, built the `Map` of modules, then validated whether the resulting C code was a sorted list of 4 elements. However, this condition was stricter than necessary, as it depended on the number of items added to the `Map` until it was unsorted. This commit updates the test to instead validate that `std::is_sorted` returns true. * Ignore __tvm_main__ in unit test
1 parent 521465e commit af5a6c4

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

tests/cpp/c_codegen_test.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,5 +121,11 @@ TEST(CCodegen, FunctionOrder) {
121121
auto module = build(inputs, Target());
122122
Array<String> func_array = module->GetFunction("get_func_names", false)();
123123
std::vector<std::string> functions{func_array.begin(), func_array.end()};
124-
EXPECT_THAT(functions, ElementsAre(StrEq("op_1"), _, StrEq("op_2"), _));
124+
// The entry point is handled separately from the other functions.
125+
functions.erase(std::remove_if(functions.begin(), functions.end(),
126+
[](const std::string& name) {
127+
return name == tvm::runtime::symbol::tvm_module_main;
128+
}),
129+
functions.end());
130+
EXPECT_TRUE(std::is_sorted(functions.begin(), functions.end()));
125131
}

0 commit comments

Comments
 (0)