Skip to content

Commit

Permalink
[CodegenC] Updated unit test for sorted CodegenC output (apache#14949)
Browse files Browse the repository at this point in the history
* [Bugfix][TIR][VTA] Update host-side target, even without device func

This resolves an issue introduced by the combination of
apache#14918 and
apache#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. apache#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. apache#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
  • Loading branch information
Lunderberg authored and junrushao committed Jun 22, 2023
1 parent 84f7b49 commit d252c74
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion tests/cpp/c_codegen_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -121,5 +121,11 @@ TEST(CCodegen, FunctionOrder) {
auto module = build(inputs, Target());
Array<String> func_array = module->GetFunction("get_func_names", false)();
std::vector<std::string> functions{func_array.begin(), func_array.end()};
EXPECT_THAT(functions, ElementsAre(StrEq("op_1"), _, StrEq("op_2"), _));
// The entry point is handled separately from the other functions.
functions.erase(std::remove_if(functions.begin(), functions.end(),
[](const std::string& name) {
return name == tvm::runtime::symbol::tvm_module_main;
}),
functions.end());
EXPECT_TRUE(std::is_sorted(functions.begin(), functions.end()));
}

0 comments on commit d252c74

Please sign in to comment.