[llvm] [CodeGen] Skip unsafe splits in RenameIndependentSubregs (PR #190925)
Karl Hylen via llvm-commits
llvm-commits at lists.llvm.org
Wed May 6 23:20:38 PDT 2026
================
@@ -0,0 +1,255 @@
+//===- RenameIndependentSubregsTest.cpp ----------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/CodeGen/RenameIndependentSubregs.h"
+#include "llvm/Analysis/CGSCCPassManager.h"
+#include "llvm/Analysis/LoopAnalysisManager.h"
+#include "llvm/CodeGen/LiveIntervals.h"
+#include "llvm/CodeGen/MIRParser/MIRParser.h"
+#include "llvm/CodeGen/MachineFunctionAnalysis.h"
+#include "llvm/CodeGen/MachineModuleInfo.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/IR/Module.h"
+#include "llvm/MC/TargetRegistry.h"
+#include "llvm/Passes/PassBuilder.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/TargetSelect.h"
+#include "llvm/Target/TargetMachine.h"
+#include "gtest/gtest.h"
+
+#include <memory>
+
+using namespace llvm;
+
+namespace {
+
+class RenameIndependentSubregsTest : public testing::Test {
+protected:
+ LLVMContext Context;
+ std::unique_ptr<TargetMachine> TM;
+ std::unique_ptr<Module> M;
+ std::unique_ptr<MachineModuleInfo> MMI;
+ std::unique_ptr<MIRParser> MIR;
+
+ LoopAnalysisManager LAM;
+ MachineFunctionAnalysisManager MFAM;
+ FunctionAnalysisManager FAM;
+ CGSCCAnalysisManager CGAM;
+ ModuleAnalysisManager MAM;
+
+ static void SetUpTestCase() {
+ InitializeAllTargets();
+ InitializeAllTargetMCs();
+ }
+
+ void SetUp() override {
+ auto &RegisteredOptions = cl::getRegisteredOptions();
+ auto It = RegisteredOptions.find("enable-subreg-liveness");
+ if (It == RegisteredOptions.end())
+ GTEST_SKIP();
+
+ // Force-enable subreg liveness tracking, as AArch64 doesn't enable it by
+ // default
+ if (It->second->addOccurrence(0, It->second->ArgStr, "", false))
+ GTEST_SKIP();
+
+ Triple TT("aarch64-none-linux-gnu");
+ std::string Error;
+ const Target *T = TargetRegistry::lookupTarget("", TT, Error);
+ if (!T)
+ GTEST_SKIP();
+
+ TargetOptions TMOptions;
+ TM.reset(
+ T->createTargetMachine(TT, "generic", "", TMOptions, std::nullopt));
+ if (!TM)
+ GTEST_SKIP();
+
+ MMI = std::make_unique<MachineModuleInfo>(TM.get());
+
+ PassBuilder PB(TM.get());
+ PB.registerModuleAnalyses(MAM);
+ PB.registerCGSCCAnalyses(CGAM);
+ PB.registerFunctionAnalyses(FAM);
+ PB.registerLoopAnalyses(LAM);
+ PB.registerMachineFunctionAnalyses(MFAM);
+ PB.crossRegisterProxies(LAM, FAM, CGAM, MAM, &MFAM);
+ MAM.registerPass([&] { return MachineModuleAnalysis(*MMI); });
+ }
+
+ bool parseMIR(StringRef MIRCode) {
+ std::unique_ptr<MemoryBuffer> MBuffer = MemoryBuffer::getMemBuffer(MIRCode);
+ MIR = createMIRParser(std::move(MBuffer), Context);
+ if (!MIR)
+ return false;
+
+ M = MIR->parseIRModule();
+ if (!M)
+ return false;
+ M->setDataLayout(TM->createDataLayout());
+
+ if (MIR->parseMachineFunctions(*M, MAM)) {
+ M.reset();
+ return false;
+ }
+ return true;
+ }
+
+ MachineFunction &getMF(StringRef Name) {
+ return FAM.getResult<MachineFunctionAnalysis>(*M->getFunction(Name))
+ .getMF();
+ }
+
+ static StringRef getTestMIR() {
+ return R"MIR(
+--- |
----------------
Hylen wrote:
Thanks, that makes sense. We'll try to provide such a solution instead.
https://github.com/llvm/llvm-project/pull/190925
More information about the llvm-commits
mailing list