Refactor lower handlers to use overloads. (#4120)

Renames Lower::Handle* to Lower::LowerFunctionInst. This allows writing
a templated handler for instructions, moving code out of the macro
expansion and removing some of the redundancy in things like
`HandleAddrOf(..., SemIR::AddrOf inst)`
This commit is contained in:
Jon Ross-Perkins
2024-07-11 22:12:04 +00:00
committed by GitHub
parent bb27a4f97b
commit 6d2d1cf7ca
6 changed files with 126 additions and 124 deletions
+10 -10
View File
@@ -7,8 +7,8 @@
namespace Carbon::Lower {
auto HandleBindValue(FunctionContext& context, SemIR::InstId inst_id,
SemIR::BindValue inst) -> void {
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
SemIR::BindValue inst) -> void {
switch (auto rep = SemIR::GetValueRepr(context.sem_ir(), inst.type_id);
rep.kind) {
case SemIR::ValueRepr::Unknown:
@@ -34,21 +34,21 @@ auto HandleBindValue(FunctionContext& context, SemIR::InstId inst_id,
}
}
auto HandleTemporary(FunctionContext& context, SemIR::InstId inst_id,
SemIR::Temporary inst) -> void {
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
SemIR::Temporary inst) -> void {
context.FinishInit(inst.type_id, inst.storage_id, inst.init_id);
context.SetLocal(inst_id, context.GetValue(inst.storage_id));
}
auto HandleTemporaryStorage(FunctionContext& context, SemIR::InstId inst_id,
SemIR::TemporaryStorage inst) -> void {
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
SemIR::TemporaryStorage inst) -> void {
context.SetLocal(inst_id,
context.builder().CreateAlloca(context.GetType(inst.type_id),
nullptr, "temp"));
}
auto HandleValueAsRef(FunctionContext& context, SemIR::InstId inst_id,
SemIR::ValueAsRef inst) -> void {
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
SemIR::ValueAsRef inst) -> void {
CARBON_CHECK(SemIR::GetExprCategory(context.sem_ir(), inst.value_id) ==
SemIR::ExprCategory::Value);
CARBON_CHECK(SemIR::GetValueRepr(context.sem_ir(), inst.type_id).kind ==
@@ -56,8 +56,8 @@ auto HandleValueAsRef(FunctionContext& context, SemIR::InstId inst_id,
context.SetLocal(inst_id, context.GetValue(inst.value_id));
}
auto HandleValueOfInitializer(FunctionContext& context, SemIR::InstId inst_id,
SemIR::ValueOfInitializer inst) -> void {
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
SemIR::ValueOfInitializer inst) -> void {
CARBON_CHECK(SemIR::GetExprCategory(context.sem_ir(), inst.init_id) ==
SemIR::ExprCategory::Initializing);
CARBON_CHECK(SemIR::GetValueRepr(context.sem_ir(), inst.type_id).kind ==