Remove the builtin IR, and instead define builtin types locally. (#3910)

We don't need it any more, and removing it simplifies a few things:

- One fewer predefined `File` and reserved ID.
- We now have simply `Builtin` instructions for builtins, instead of
having an `ImportRef` that indirectly references a `Builtin`.
- `ConstantId`s now always refer directly to a local constant, instead
of sometimes referring to an `ImportRef` for a constant in the builtins
IR.

---------

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
This commit is contained in:
Richard Smith
2024-04-24 18:32:59 +00:00
committed by GitHub
co-authored by Jon Ross-Perkins
parent 1349cc1e8e
commit 62fe0cd385
79 changed files with 600 additions and 671 deletions
+5 -7
View File
@@ -736,11 +736,10 @@ static auto ProcessNodeIds(Context& context, llvm::raw_ostream* vlog_stream,
static auto CheckParseTree(
llvm::DenseMap<const SemIR::File*, Parse::NodeLocConverter*>*
node_converters,
const SemIR::File& builtin_ir, UnitInfo& unit_info,
llvm::raw_ostream* vlog_stream) -> void {
UnitInfo& unit_info, llvm::raw_ostream* vlog_stream) -> void {
unit_info.unit->sem_ir->emplace(
*unit_info.unit->value_stores,
unit_info.unit->tokens->source().filename().str(), &builtin_ir);
unit_info.unit->tokens->source().filename().str());
// For ease-of-access.
SemIR::File& sem_ir = **unit_info.unit->sem_ir;
@@ -1041,8 +1040,7 @@ static auto BuildApiMapAndDiagnosePackaging(
return api_map;
}
auto CheckParseTrees(const SemIR::File& builtin_ir,
llvm::MutableArrayRef<Unit> units, bool prelude_import,
auto CheckParseTrees(llvm::MutableArrayRef<Unit> units, bool prelude_import,
llvm::raw_ostream* vlog_stream) -> void {
// Prepare diagnostic emitters in case we run into issues during package
// checking.
@@ -1103,7 +1101,7 @@ auto CheckParseTrees(const SemIR::File& builtin_ir,
for (int check_index = 0;
check_index < static_cast<int>(ready_to_check.size()); ++check_index) {
auto* unit_info = ready_to_check[check_index];
CheckParseTree(&node_converters, builtin_ir, *unit_info, vlog_stream);
CheckParseTree(&node_converters, *unit_info, vlog_stream);
for (auto* incoming_import : unit_info->incoming_imports) {
--incoming_import->imports_remaining;
if (incoming_import->imports_remaining == 0) {
@@ -1153,7 +1151,7 @@ auto CheckParseTrees(const SemIR::File& builtin_ir,
// incomplete imports.
for (auto& unit_info : unit_infos) {
if (unit_info.imports_remaining > 0) {
CheckParseTree(&node_converters, builtin_ir, unit_info, vlog_stream);
CheckParseTree(&node_converters, unit_info, vlog_stream);
}
}
}