diff options
author | vporpo <vporpodas@google.com> | 2024-09-13 11:18:42 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-13 11:18:42 -0700 |
commit | 9f738c84f05ff965b81e0be5cc725af3fa13cbf0 (patch) | |
tree | eb3a823ae251175b3698696b74d52e32c95789f7 /llvm/unittests | |
parent | d588e49a324b3d6039c19f3108d722a8b9fcd96e (diff) | |
download | llvm-9f738c84f05ff965b81e0be5cc725af3fa13cbf0.zip llvm-9f738c84f05ff965b81e0be5cc725af3fa13cbf0.tar.gz llvm-9f738c84f05ff965b81e0be5cc725af3fa13cbf0.tar.bz2 |
[SandboxIR] Implement GlobalObject (#108604)
This patch implements sandboxir::GlobalObject mirroring
llvm::GlobalObject.
Diffstat (limited to 'llvm/unittests')
-rw-r--r-- | llvm/unittests/SandboxIR/SandboxIRTest.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/llvm/unittests/SandboxIR/SandboxIRTest.cpp b/llvm/unittests/SandboxIR/SandboxIRTest.cpp index d883c18..b1f3a6c0 100644 --- a/llvm/unittests/SandboxIR/SandboxIRTest.cpp +++ b/llvm/unittests/SandboxIR/SandboxIRTest.cpp @@ -795,6 +795,70 @@ define void @foo() { EXPECT_EQ(GV->getVisibility(), OrigVisibility); } +TEST_F(SandboxIRTest, GlobalObject) { + parseIR(C, R"IR( +declare external void @bar() +define void @foo() { + call void @bar() + ret void +} +)IR"); + Function &LLVMF = *M->getFunction("foo"); + auto *LLVMBB = &*LLVMF.begin(); + auto LLVMIt = LLVMBB->begin(); + auto *LLVMCall = cast<llvm::CallInst>(&*LLVMIt++); + auto *LLVMGO = cast<llvm::GlobalObject>(LLVMCall->getCalledOperand()); + sandboxir::Context Ctx(C); + + auto &F = *Ctx.createFunction(&LLVMF); + auto *BB = &*F.begin(); + auto It = BB->begin(); + auto *Call = cast<sandboxir::CallInst>(&*It++); + // Check classof(), creation. + auto *GO = cast<sandboxir::GlobalObject>(Call->getCalledOperand()); + // Check getAlignment(). + EXPECT_EQ(GO->getAlignment(), LLVMGO->getAlignment()); + // Check getAlign(). + EXPECT_EQ(GO->getAlign(), LLVMGO->getAlign()); + // Check setAlignment(). + auto OrigMaybeAlign = GO->getAlign(); + auto NewMaybeAlign = MaybeAlign(128); + EXPECT_NE(NewMaybeAlign, OrigMaybeAlign); + GO->setAlignment(NewMaybeAlign); + EXPECT_EQ(GO->getAlign(), NewMaybeAlign); + GO->setAlignment(OrigMaybeAlign); + EXPECT_EQ(GO->getAlign(), OrigMaybeAlign); + // Check getGlobalObjectSubClassData(). + EXPECT_EQ(GO->getGlobalObjectSubClassData(), + LLVMGO->getGlobalObjectSubClassData()); + // Check setGlobalObjectSubClassData(). + auto OrigGOSCD = GO->getGlobalObjectSubClassData(); + auto NewGOSCD = 1u; + EXPECT_NE(NewGOSCD, OrigGOSCD); + GO->setGlobalObjectSubClassData(NewGOSCD); + EXPECT_EQ(GO->getGlobalObjectSubClassData(), NewGOSCD); + GO->setGlobalObjectSubClassData(OrigGOSCD); + EXPECT_EQ(GO->getGlobalObjectSubClassData(), OrigGOSCD); + // Check hasSection(). + EXPECT_EQ(GO->hasSection(), LLVMGO->hasSection()); + // Check getSection(). + EXPECT_EQ(GO->getSection(), LLVMGO->getSection()); + // Check setSection(). + auto OrigSection = GO->getSection(); + auto NewSection = ".some_section"; + EXPECT_NE(NewSection, OrigSection); + GO->setSection(NewSection); + EXPECT_EQ(GO->getSection(), NewSection); + GO->setSection(OrigSection); + EXPECT_EQ(GO->getSection(), OrigSection); + // Check hasComdat(). + EXPECT_EQ(GO->hasComdat(), LLVMGO->hasComdat()); + // Check getVCallVisibility(). + EXPECT_EQ(GO->getVCallVisibility(), LLVMGO->getVCallVisibility()); + // Check canIncreaseAlignment(). + EXPECT_EQ(GO->canIncreaseAlignment(), LLVMGO->canIncreaseAlignment()); +} + TEST_F(SandboxIRTest, BlockAddress) { parseIR(C, R"IR( define void @foo(ptr %ptr) { |