Directly convert from an initializer to a value where possible. (#3306)

If the initializing representation is the same as the value
representation, don't materialize a temporary and perform a value
binding. Instead, directly extract the value, using a new
`value_of_initializer` node.

This removes a lot of redundant `alloca`s from our generated LLVM IR.
This commit is contained in:
Richard Smith
2023-10-31 20:59:28 +00:00
committed by GitHub
parent bc8db9406d
commit 428d11323a
32 changed files with 214 additions and 290 deletions
+1
View File
@@ -695,6 +695,7 @@ class TypeCompleter {
case SemIR::TupleValue::Kind:
case SemIR::UnaryOperatorNot::Kind:
case SemIR::ValueAsReference::Kind:
case SemIR::ValueOfInitializer::Kind:
case SemIR::VarStorage::Kind:
CARBON_FATAL() << "Type refers to non-type node " << node;