From 790fdfa6a276602283e60cefc08739a651772019 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Fri, 1 Oct 2021 03:40:46 -0400 Subject: [PATCH 1/2] Ad -run-twice to dwarf-eh-prepare.ll --- llvm/test/CodeGen/X86/dwarf-eh-prepare.ll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/test/CodeGen/X86/dwarf-eh-prepare.ll b/llvm/test/CodeGen/X86/dwarf-eh-prepare.ll index 921f4f9a7d85f..c54fdfceea4b2 100644 --- a/llvm/test/CodeGen/X86/dwarf-eh-prepare.ll +++ b/llvm/test/CodeGen/X86/dwarf-eh-prepare.ll @@ -1,4 +1,4 @@ -; RUN: opt -mtriple=x86_64-linux-gnu -dwarfehprepare -simplifycfg-require-and-preserve-domtree=1 < %s -S | FileCheck %s +; RUN: opt -mtriple=x86_64-linux-gnu -dwarfehprepare -simplifycfg-require-and-preserve-domtree=1 -run-twice < %s -S | FileCheck %s ; Check basic functionality of IR-to-IR DWARF EH preparation. This should ; eliminate resumes. This pass requires a TargetMachine, so we put it under X86 From 270e1efc263e17c804685b539ff19cc3c886f698 Mon Sep 17 00:00:00 2001 From: Yaron Keren Date: Sun, 14 Sep 2014 20:36:28 +0000 Subject: [PATCH 2/2] In DwarfEHPrepare, after all passes are run, RewindFunction may be a dangling pointer to a dead function. To make sure it's valid, doFinalization nullptrs RewindFunction just like the constructor and so it will be found on next run. llvm-svn: 217737 --- llvm/lib/CodeGen/DwarfEHPrepare.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/llvm/lib/CodeGen/DwarfEHPrepare.cpp b/llvm/lib/CodeGen/DwarfEHPrepare.cpp index 5ca1e91cc5f41..fde7b942665d4 100644 --- a/llvm/lib/CodeGen/DwarfEHPrepare.cpp +++ b/llvm/lib/CodeGen/DwarfEHPrepare.cpp @@ -318,6 +318,11 @@ class DwarfEHPrepareLegacyPass : public FunctionPass { return prepareDwarfEH(OptLevel, RewindFunction, F, TLI, DT, TTI); } + bool doFinalization(Module &M) override { + RewindFunction = nullptr; + return false; + } + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired(); AU.addRequired();