[llvm-dev] DICompileUnit duplication in LLVM 4.0.0?
Matthew O'Connor via llvm-dev
llvm-dev at lists.llvm.org
Tue Jun 13 12:18:44 PDT 2017
I am still seeing the same error with trunk.
On Tue, Jun 13, 2017 at 11:28 AM, Matthew O'Connor <thegreendragon at gmail.com
> wrote:
> I will have to get back to you on that. The APIs have changed enough in
> LLVM trunk that it will take me a bit to do the upgrade.
>
> On Mon, Jun 12, 2017 at 10:53 AM, Adrian Prantl <aprantl at apple.com> wrote:
>
>> I see that you are using the clang 4.0 release branch. Does this also
>> reproduce with the current LLVM trunk? We had a lot of churn in the debug
>> info handling in the function cloner in the last couple of weeks.
>>
>> -- adrian
>>
>> On Jun 8, 2017, at 3:07 PM, Matthew O'Connor via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>> All,
>>
>> I'm seeing duplication of DICompileUnits in a pass that worked in 3.8. I
>> assume I'm doing something wrong. Would someone be willing to point me in
>> the right direction?
>>
>> The below minimized pass reproduces my issue in 4.0 with the following
>> error:
>>
>> DICompileUnit not listed in llvm.dbg.cu
>> !1707 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
>> producer: "clang version 4.0.0 (tags/RELEASE_400/final)", isOptimized:
>> true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, imports: !1708)
>> dsc-opt: /home/moconnor/Source/carte.git/llvm-carte/llvm-4.0.0/llvm/lib/IR/Verifier.cpp:4500:
>> virtual bool {anonymous}::VerifierLegacyPass::doFinalization(llvm::Module&):
>> Assertion `!V->hasBrokenDebugInfo() && "Module contains invalid debug
>> info"' failed.
>>
>> Pass implementation:
>>
>> #define DEBUG_TYPE "dupl"
>> #include "llvm/Pass.h"
>> #include "llvm/Support/Debug.h"
>> #include "llvm/Support/raw_ostream.h"
>> #include "llvm/Transforms/Utils/Cloning.h"
>> #include <vector>
>> using namespace llvm;
>>
>> struct FunctionDuplication;
>>
>> namespace llvm {
>> void initializeFunctionDuplicationPass(PassRegistry &);
>> }
>>
>> struct FunctionDuplication : public ModulePass {
>> static char ID;
>> FunctionDuplication() : ModulePass(ID) {}
>>
>> virtual StringRef getPassName() const override {
>> return "Duplicate every function";
>> }
>>
>> virtual void getAnalysisUsage(AnalysisUsage &) const override;
>>
>> virtual bool runOnModule(Module &) override;
>>
>> Function *duplicate(Module &, Function &Old, FunctionType *NewTy) const;
>> };
>>
>> void FunctionDuplication::getAnalysisUsage(AnalysisUsage &AU) const {
>> ModulePass::getAnalysisUsage(AU);
>> }
>>
>> Function *FunctionDuplication::duplicate(Module &M, Function &Old,
>> FunctionType *NewTy) const {
>> Function *New = Function::Create(NewTy, Old.getLinkage(), "", &M);
>> New->setAttributes(Old.getAttributes());
>> New->setCallingConv(Old.getCallingConv());
>>
>> // Map old arguments to the new arguments.
>> ValueToValueMapTy VMap;
>> for (auto OldFI = Old.arg_begin(), OldFE = Old.arg_end(),
>> NewFI = New->arg_begin();
>> OldFI != OldFE; ++OldFI, ++NewFI) {
>> Argument &OldA = *OldFI;
>> Argument &NewA = *NewFI;
>> NewA.setName(OldA.getName());
>> VMap[&OldA] = &NewA;
>> }
>>
>> SmallVector<ReturnInst *, 16> Returns;
>> CloneAndPruneFunctionInto(New, &Old, VMap, true, Returns);
>>
>> return New;
>> }
>>
>> bool FunctionDuplication::runOnModule(Module &M) {
>> DataLayout const &DL = M.getDataLayout();
>> bool Modified = false;
>>
>> std::vector<Function *> Functions;
>> for (auto &Fn : M.functions()) {
>> Functions.push_back(&Fn);
>> }
>>
>> for (auto *F : Functions) {
>> if (F->size() > 0) {
>> dbgs() << "duplicating " << F->getName() << "\n";
>>
>> duplicate(M, *F, F->getFunctionType());
>> Modified = true;
>> }
>> }
>>
>> return Modified;
>> }
>>
>> char FunctionDuplication::ID = 0;
>> INITIALIZE_PASS(FunctionDuplication, "dupl", "Duplicate every function",
>> false,
>> false)
>> ModulePass *createFunctionDuplicationPass(void) {
>> return new FunctionDuplication();
>> }
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170613/e2769177/attachment.html>
More information about the llvm-dev
mailing list