From 005354b1f4fc896d70c2c5139f6c512ca8a8926b Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Fri, 12 Jun 2015 03:25:05 +0000 Subject: [PATCH] LowerBitSets: Give names to aliases of unnamed bitset element objects. It is valid for globals to be unnamed, but aliases must have a name. To avoid creating invalid IR, we need to assign names to any aliases we create that point to unnamed objects that have been moved into combined globals. llvm-svn: 239590 --- llvm/lib/Transforms/IPO/LowerBitSets.cpp | 5 +++-- llvm/test/Transforms/LowerBitSets/unnamed.ll | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 llvm/test/Transforms/LowerBitSets/unnamed.ll diff --git a/llvm/lib/Transforms/IPO/LowerBitSets.cpp b/llvm/lib/Transforms/IPO/LowerBitSets.cpp index bffeebb..dec583b 100644 --- a/llvm/lib/Transforms/IPO/LowerBitSets.cpp +++ b/llvm/lib/Transforms/IPO/LowerBitSets.cpp @@ -556,8 +556,9 @@ void LowerBitSets::buildBitSetsFromGlobals( } else { GlobalAlias *GAlias = GlobalAlias::create(Globals[I]->getType(), Globals[I]->getLinkage(), - "", CombinedGlobalElemPtr, M); - GAlias->takeName(Globals[I]); + "data", CombinedGlobalElemPtr, M); + if (Globals[I]->hasName()) + GAlias->takeName(Globals[I]); Globals[I]->replaceAllUsesWith(GAlias); } Globals[I]->eraseFromParent(); diff --git a/llvm/test/Transforms/LowerBitSets/unnamed.ll b/llvm/test/Transforms/LowerBitSets/unnamed.ll new file mode 100644 index 0000000..5ff04533 --- /dev/null +++ b/llvm/test/Transforms/LowerBitSets/unnamed.ll @@ -0,0 +1,19 @@ +; RUN: opt -S -lowerbitsets < %s | FileCheck %s + +target datalayout = "e-p:32:32" + +; CHECK: @data ={{.*}} alias +@0 = constant i32 1 +@1 = constant [2 x i32] [i32 2, i32 3] + +!0 = !{!"bitset1", i32* @0, i32 0} +!1 = !{!"bitset1", [2 x i32]* @1, i32 4} + +!llvm.bitsets = !{ !0, !1 } + +declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone + +define i1 @foo(i8* %p) { + %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset1") + ret i1 %x +} -- 2.7.4