[llvm] [AArch64][NFC] Add MCInstrAnalysis unittests (PR #155609)
Pavel Iliin via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 27 09:18:20 PDT 2025
================
@@ -0,0 +1,142 @@
+//===- MCInstrAnalysisTest.cpp - AArch64MCInstrAnalysis unit tests --------===//
+//
+// 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/MC/MCInstrAnalysis.h"
+#include "MCTargetDesc/AArch64MCTargetDesc.h"
+#include "Utils/AArch64BaseInfo.h"
+#include "llvm/MC/MCInstBuilder.h"
+#include "llvm/MC/TargetRegistry.h"
+#include "llvm/Support/TargetSelect.h"
+
+#include "gtest/gtest.h"
+
+#include <memory>
+
+using namespace llvm;
+
+namespace {
+
+class InstrAnalysisTest : public testing::TestWithParam<const char *> {
+protected:
+ std::unique_ptr<const MCInstrInfo> Info;
+ std::unique_ptr<const MCInstrAnalysis> Analysis;
+
+ static void SetUpTestSuite() {
+ LLVMInitializeAArch64TargetInfo();
+ LLVMInitializeAArch64Target();
+ LLVMInitializeAArch64TargetMC();
+ }
+
+ InstrAnalysisTest() {
+ std::string Error;
+ const Target *TheTarget =
+ TargetRegistry::lookupTarget(Triple::normalize(GetParam()), Error);
+ Info = std::unique_ptr<const MCInstrInfo>(TheTarget->createMCInstrInfo());
+ Analysis = std::unique_ptr<const MCInstrAnalysis>(
+ TheTarget->createMCInstrAnalysis(Info.get()));
+ }
+};
+
+} // namespace
+
+static MCInst beq() {
+ return MCInstBuilder(AArch64::Bcc).addImm(AArch64CC::EQ).addReg(AArch64::X0);
+}
+static MCInst tbz(unsigned Rt = AArch64::X0, unsigned Imm = 0,
+ unsigned Label = 32) {
+ return MCInstBuilder(AArch64::TBZX).addReg(Rt).addImm(Imm).addImm(Label);
+}
+static MCInst b() { return MCInstBuilder(AArch64::B).addImm(32); }
+static MCInst bl() { return MCInstBuilder(AArch64::BL).addImm(32); }
+static MCInst br(unsigned Rn = AArch64::X0) {
+ return MCInstBuilder(AArch64::BR).addReg(Rn);
+}
+static MCInst ret(unsigned Rn = AArch64::LR) {
+ return MCInstBuilder(AArch64::RET).addReg(Rn);
+}
+static MCInst hlt() { return MCInstBuilder(AArch64::HLT); }
+static MCInst brk() { return MCInstBuilder(AArch64::BRK); }
+
+TEST_P(InstrAnalysisTest, IsTerminator) {
+ EXPECT_TRUE(Analysis->isTerminator(beq()));
+ EXPECT_TRUE(Analysis->isTerminator(tbz()));
----------------
ilinpv wrote:
We might also consider adding tbnz, cbz, cbnz
https://github.com/llvm/llvm-project/pull/155609
More information about the llvm-commits
mailing list