diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2017-01-18 20:02:31 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2017-01-18 20:02:31 +0000 |
commit | 10e3b12c7a41e05bc5611acb02e44d3c2c9e098a (patch) | |
tree | 78640c8623cf6e12859f9c3a1009638f78220c79 /llvm/unittests/Transforms/Utils/Cloning.cpp | |
parent | 44a87c9f1b330d243eae87c60151711c5b0b486a (diff) | |
download | bcm5719-llvm-10e3b12c7a41e05bc5611acb02e44d3c2c9e098a.tar.gz bcm5719-llvm-10e3b12c7a41e05bc5611acb02e44d3c2c9e098a.zip |
Cloning: Copy comdats when cloning globals.
Differential Revision: https://reviews.llvm.org/D28838
llvm-svn: 292430
Diffstat (limited to 'llvm/unittests/Transforms/Utils/Cloning.cpp')
-rw-r--r-- | llvm/unittests/Transforms/Utils/Cloning.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/unittests/Transforms/Utils/Cloning.cpp b/llvm/unittests/Transforms/Utils/Cloning.cpp index 216bd32c50d..634aa9e7e65 100644 --- a/llvm/unittests/Transforms/Utils/Cloning.cpp +++ b/llvm/unittests/Transforms/Utils/Cloning.cpp @@ -405,10 +405,14 @@ protected: void SetupModule() { OldM = new Module("", C); } void CreateOldModule() { + auto *CD = OldM->getOrInsertComdat("comdat"); + CD->setSelectionKind(Comdat::ExactMatch); + auto GV = new GlobalVariable( *OldM, Type::getInt32Ty(C), false, GlobalValue::ExternalLinkage, ConstantInt::get(Type::getInt32Ty(C), 1), "gv"); GV->addMetadata(LLVMContext::MD_type, *MDNode::get(C, {})); + GV->setComdat(CD); DIBuilder DBuilder(*OldM); IRBuilder<> IBuilder(C); @@ -419,6 +423,7 @@ protected: auto *F = Function::Create(FuncType, GlobalValue::PrivateLinkage, "f", OldM); F->setPersonalityFn(PersFn); + F->setComdat(CD); // Create debug info auto *File = DBuilder.createFile("filename.c", "/file/dir/"); @@ -472,4 +477,15 @@ TEST_F(CloneModule, GlobalMetadata) { GlobalVariable *NewGV = NewM->getGlobalVariable("gv"); EXPECT_NE(nullptr, NewGV->getMetadata(LLVMContext::MD_type)); } + +TEST_F(CloneModule, Comdat) { + GlobalVariable *NewGV = NewM->getGlobalVariable("gv"); + auto *CD = NewGV->getComdat(); + ASSERT_NE(nullptr, CD); + EXPECT_EQ("comdat", CD->getName()); + EXPECT_EQ(Comdat::ExactMatch, CD->getSelectionKind()); + + Function *NewF = NewM->getFunction("f"); + EXPECT_EQ(CD, NewF->getComdat()); +} } |