From 6c7cecc81a4c7e06e26027e21edd2cfd95a37a0b Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Sun, 9 Aug 2026 00:27:27 +0800 Subject: [CodeGen] Implement machine liveness analysis --- backend/lib/CodeGen/TargetRegisterInfo.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'backend/lib/CodeGen/TargetRegisterInfo.cpp') diff --git a/backend/lib/CodeGen/TargetRegisterInfo.cpp b/backend/lib/CodeGen/TargetRegisterInfo.cpp index 42ae935..7ddf676 100644 --- a/backend/lib/CodeGen/TargetRegisterInfo.cpp +++ b/backend/lib/CodeGen/TargetRegisterInfo.cpp @@ -135,6 +135,7 @@ Expected TargetRegisterInfo::create(TargetRegisterInfoDesc D } std::unordered_set ReferencedUnits; + std::unordered_map UnitLaneCardinalities; for (const PhysicalRegisterDesc &Register : Result.Description.PhysicalRegisters) { if (Register.Units.empty()) return invalidDescription("physical register must reference at least one register unit"); @@ -147,6 +148,12 @@ Expected TargetRegisterInfo::create(TargetRegisterInfoDesc D return invalidDescription( "physical register has an unknown, empty-lane, or duplicate register unit"); } + const int Cardinality = std::popcount(Unit.Lanes.rawValue()); + const auto [Position, Inserted] = UnitLaneCardinalities.emplace(Unit.Unit, Cardinality); + if (!Inserted && Position->second != Cardinality) { + return invalidDescription( + "every physical-register view of a register unit must have the same lane count"); + } ReferencedUnits.insert(Unit.Unit); RegisterLanes = RegisterLanes | Unit.Lanes; } -- cgit v1.2.3