Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

176 lines
5.7 KiB
C++

//===- llvm/unittest/CodeGen/DIETest.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/DIE.h"
#include "TestAsmPrinter.h"
#include "llvm/CodeGen/AsmPrinter.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/Testing/Support/Error.h"
using namespace llvm;
using testing::_;
using testing::SaveArg;
namespace {
using DIETestParams =
std::tuple<unsigned, dwarf::DwarfFormat, dwarf::Form, unsigned>;
class DIEFixtureBase : public testing::TestWithParam<DIETestParams> {
protected:
void SetUp() override {
unsigned Version;
dwarf::DwarfFormat Format;
std::tie(Version, Format, Form, Size) = GetParam();
auto ExpectedTestPrinter =
TestAsmPrinter::create("x86_64-pc-linux", Version, Format);
ASSERT_THAT_EXPECTED(ExpectedTestPrinter, Succeeded());
TestPrinter = std::move(ExpectedTestPrinter.get());
if (!TestPrinter)
GTEST_SKIP();
}
dwarf::Form Form;
unsigned Size;
std::unique_ptr<TestAsmPrinter> TestPrinter;
};
struct DIEExprFixture : public DIEFixtureBase {
void SetUp() override {
DIEFixtureBase::SetUp();
if (!TestPrinter)
return;
Val = MCConstantExpr::create(42, TestPrinter->getCtx());
}
const MCExpr *Val = nullptr;
};
TEST_P(DIEExprFixture, SizeOf) {
DIEExpr Tst(Val);
EXPECT_EQ(Size, Tst.sizeOf(TestPrinter->getAP()->getDwarfFormParams(), Form));
}
TEST_P(DIEExprFixture, EmitValue) {
DIEExpr Tst(Val);
EXPECT_CALL(TestPrinter->getMS(), emitValueImpl(Val, Size, _));
Tst.emitValue(TestPrinter->getAP(), Form);
}
INSTANTIATE_TEST_SUITE_P(
DIETestParams, DIEExprFixture,
testing::Values(
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_sec_offset, 4u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_sec_offset, 8u}));
struct DIELabelFixture : public DIEFixtureBase {
void SetUp() override {
DIEFixtureBase::SetUp();
if (!TestPrinter)
return;
Val = TestPrinter->getCtx().createTempSymbol();
}
const MCSymbol *Val = nullptr;
};
TEST_P(DIELabelFixture, SizeOf) {
DIELabel Tst(Val);
EXPECT_EQ(Size, Tst.sizeOf(TestPrinter->getAP()->getDwarfFormParams(), Form));
}
TEST_P(DIELabelFixture, EmitValue) {
DIELabel Tst(Val);
const MCExpr *Arg0 = nullptr;
EXPECT_CALL(TestPrinter->getMS(), emitValueImpl(_, Size, _))
.WillOnce(SaveArg<0>(&Arg0));
Tst.emitValue(TestPrinter->getAP(), Form);
const MCSymbolRefExpr *ActualArg0 = dyn_cast_or_null<MCSymbolRefExpr>(Arg0);
ASSERT_NE(ActualArg0, nullptr);
EXPECT_EQ(&(ActualArg0->getSymbol()), Val);
}
INSTANTIATE_TEST_SUITE_P(
DIETestParams, DIELabelFixture,
testing::Values(
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_sec_offset, 4u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_strp, 4u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_addr, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_sec_offset, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_strp, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_addr, 8u}));
struct DIEDeltaFixture : public DIEFixtureBase {
void SetUp() override {
DIEFixtureBase::SetUp();
if (!TestPrinter)
return;
Hi = TestPrinter->getCtx().createTempSymbol();
Lo = TestPrinter->getCtx().createTempSymbol();
}
const MCSymbol *Hi = nullptr;
const MCSymbol *Lo = nullptr;
};
TEST_P(DIEDeltaFixture, SizeOf) {
DIEDelta Tst(Hi, Lo);
EXPECT_EQ(Size, Tst.sizeOf(TestPrinter->getAP()->getDwarfFormParams(), Form));
}
TEST_P(DIEDeltaFixture, EmitValue) {
DIEDelta Tst(Hi, Lo);
EXPECT_CALL(TestPrinter->getMS(), emitAbsoluteSymbolDiff(Hi, Lo, Size));
Tst.emitValue(TestPrinter->getAP(), Form);
}
INSTANTIATE_TEST_SUITE_P(
DIETestParams, DIEDeltaFixture,
testing::Values(
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_sec_offset, 4u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_sec_offset, 8u}));
struct DIELocListFixture : public DIEFixtureBase {
void SetUp() override { DIEFixtureBase::SetUp(); }
};
TEST_P(DIELocListFixture, SizeOf) {
DIELocList Tst(999);
EXPECT_EQ(Size, Tst.sizeOf(TestPrinter->getAP()->getDwarfFormParams(), Form));
}
INSTANTIATE_TEST_SUITE_P(
DIETestParams, DIELocListFixture,
testing::Values(
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_loclistx, 2u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_data4, 4u},
DIETestParams{4, dwarf::DWARF32, dwarf::DW_FORM_sec_offset, 4u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_loclistx, 2u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_data8, 8u},
DIETestParams{4, dwarf::DWARF64, dwarf::DW_FORM_sec_offset, 8u}));
} // end namespace