Lowering of Branch / BranchIf / BranchWithArg / BlockArg. (#2904)

This gives us complete lowering of `if` expressions plus `and` and `or`.

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
This commit is contained in:
Richard Smith
2023-06-15 17:53:07 -07:00
committed by GitHub
co-authored by Jon Ross-Perkins
parent c27f41c94b
commit 0d4d392d12
44 changed files with 453 additions and 91 deletions
+5 -1
View File
@@ -285,7 +285,8 @@ class SemanticsNode {
SemanticsStringId /*name_id*/,
SemanticsNodeId /*node_id*/>;
using BlockArg = Factory<SemanticsNodeKind::BlockArg>;
using BlockArg =
Factory<SemanticsNodeKind::BlockArg, SemanticsNodeBlockId /*block_id*/>;
using BoolLiteral =
Factory<SemanticsNodeKind::BoolLiteral, SemanticsBoolValue /*value*/>;
@@ -450,6 +451,9 @@ struct SemanticsIdMapInfo {
// Support use of Id types as DenseMap/DenseSet keys.
template <>
struct llvm::DenseMapInfo<Carbon::SemanticsNodeBlockId>
: public Carbon::SemanticsIdMapInfo<Carbon::SemanticsNodeBlockId> {};
template <>
struct llvm::DenseMapInfo<Carbon::SemanticsNodeId>
: public Carbon::SemanticsIdMapInfo<Carbon::SemanticsNodeId> {};
template <>