[clang] fdc0bf6 - Revert "[codegen] Add StackFrameLayoutAnalysisPass"

Paul Kirth via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 13 15:00:39 PST 2023


Author: Paul Kirth
Date: 2023-01-13T22:59:36Z
New Revision: fdc0bf6adceeb7f800ec152486f26a6bed8d2ccb

URL: https://github.com/llvm/llvm-project/commit/fdc0bf6adceeb7f800ec152486f26a6bed8d2ccb
DIFF: https://github.com/llvm/llvm-project/commit/fdc0bf6adceeb7f800ec152486f26a6bed8d2ccb.diff

LOG: Revert "[codegen] Add StackFrameLayoutAnalysisPass"

This breaks on some AArch64 bots

This reverts commit 0a652c540556a118bbd9386ed3ab7fd9e60a9754.

Added: 
    

Modified: 
    clang/docs/ReleaseNotes.rst
    clang/include/clang/Basic/DiagnosticGroups.td
    llvm/include/llvm/CodeGen/Passes.h
    llvm/include/llvm/InitializePasses.h
    llvm/lib/CodeGen/CMakeLists.txt
    llvm/lib/CodeGen/CodeGen.cpp
    llvm/lib/CodeGen/TargetPassConfig.cpp
    llvm/test/CodeGen/AArch64/O0-pipeline.ll
    llvm/test/CodeGen/AArch64/O3-pipeline.ll
    llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
    llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
    llvm/test/CodeGen/ARM/O3-pipeline.ll
    llvm/test/CodeGen/Generic/llc-start-stop.ll
    llvm/test/CodeGen/PowerPC/O0-pipeline.ll
    llvm/test/CodeGen/PowerPC/O3-pipeline.ll
    llvm/test/CodeGen/RISCV/O0-pipeline.ll
    llvm/test/CodeGen/RISCV/O3-pipeline.ll
    llvm/test/CodeGen/X86/O0-pipeline.ll
    llvm/test/CodeGen/X86/opt-pipeline.ll

Removed: 
    clang/test/Frontend/stack-layout-remark.c
    llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp
    llvm/test/CodeGen/ARM/stack-frame-layout-remarks.ll
    llvm/test/CodeGen/X86/stack-frame-layout-remarks.ll


################################################################################
diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index fe69f500f5ced..e8b61db26a860 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -540,11 +540,6 @@ New Compiler Flags
       int b[0]; // NOT a flexible array member.
     };
 
-- Added ``-Rpass-analysis=stack-frame-layout`` which will emit new diagnostic
-  information about the layout of stack frames through the remarks
-  infrastructure. Since it uses remarks the diagnostic information is available
-  both on the CLI, and in a machine readable format.
-
 Deprecated Compiler Flags
 -------------------------
 - ``-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang``

diff  --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index a606aca163241..f71bb401e9a10 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -1268,25 +1268,7 @@ def OpenMP : DiagGroup<"openmp", [
 // Backend warnings.
 def BackendInlineAsm : DiagGroup<"inline-asm">;
 def BackendSourceMgr : DiagGroup<"source-mgr">;
-def BackendFrameLargerThan : DiagGroup<"frame-larger-than">{
- code Documentation = [{
-More fine grained information about the stack layout is available by adding the
-`-Rpass-analysis=stack-frame-layout` command-line flag to the compiler
-invocation.
-
-The diagnostic information can be saved to a file in a machine readable format,
-like YAML by adding the `-foptimization-record-file=<file>` command-line flag.
-
-Results can be filtered by function name by passing 
-`-mllvm -filter-print-funcs=foo`, where `foo` is the target function's name.
-
-   .. code-block: console
-      clang -c a.cpp -Rpass-analysis=stack-frame-layout -mllvm -filter-print-funcs=foo
-
-   .. code-block: console
-      clang -c a.cpp -Rpass-analysis=stack-frame-layout -foptimization-record-file=<file>
-}];
-}
+def BackendFrameLargerThan : DiagGroup<"frame-larger-than">;
 // Compatibility flag name from old versions of Clang.
 def : DiagGroup<"frame-larger-than=", [BackendFrameLargerThan]>;
 def BackendPlugin : DiagGroup<"backend-plugin">;

diff  --git a/clang/test/Frontend/stack-layout-remark.c b/clang/test/Frontend/stack-layout-remark.c
deleted file mode 100644
index 1a3c12bf5bdc0..0000000000000
--- a/clang/test/Frontend/stack-layout-remark.c
+++ /dev/null
@@ -1,308 +0,0 @@
-// Check that backend stack layout diagnostics are working correctly with and
-// without debug information, and when optimizations are enabled
-//
-// REQUIRES: x86-registered-target
-//
-// RUN: rm -rf %t
-// RUN: mkdir -p %t
-// RUN: %clang_cc1 %s -emit-codegen-only -triple x86_64-unknown-linux-gnu -target-cpu corei7 -Rpass-analysis=stack-frame-layout -o /dev/null  -O0  2>&1 | FileCheck %s --check-prefix=O0-NODEBUG
-// RUN: %clang_cc1 %s -emit-codegen-only -triple x86_64-unknown-linux-gnu -target-cpu corei7 -Rpass-analysis=stack-frame-layout -o /dev/null  -O0  -debug-info-kind=constructor  -dwarf-version=5 -debugger-tuning=gdb 2>&1 | FileCheck %s --check-prefix=O0-DEBUG
-// RUN: %clang_cc1 %s -emit-codegen-only -triple x86_64-unknown-linux-gnu -target-cpu corei7 -funwind-tables=2 -O3 -Rpass-analysis=stack-frame-layout   -debug-info-kind=constructor  -dwarf-version=5 -debugger-tuning=gdb -opt-record-file %t/stack-layout-remark.c.yml -opt-record-passes stack-frame-layout 2>&1 | FileCheck %s --check-prefix=O3-DEBUG
-// RUN: cat %t/stack-layout-remark.c.yml | FileCheck %s --check-prefix=YAML
-
-#define NULL (void*)0
-
-extern void* allocate(unsigned size);
-extern void deallocate(void* ptr);
-extern int work(char *ary, int size);
-extern int rand(void);
-
-// Test YAML Ouput
-// YAML: --- !Analysis
-// YAML: Pass:            stack-frame-layout
-// YAML: Name:            StackLayout
-// YAML: DebugLoc:        { File: '{{.*}}stack-layout-remark.c', Line: [[# @LINE + 24]],
-// YAML: Function:        foo
-// YAML: Args:
-// YAML:   - Offset:          '-40'
-// YAML:   - Type:            Variable
-// YAML:   - Align:           '16'
-// YAML:   - Size:            '32'
-// YAML:   - DataLoc:         'a @ {{.*}}stack-layout-remark.c:[[# @LINE + 19]]'
-// YAML:   - DataLoc:         'f @ {{.*}}stack-layout-remark.c:[[# @LINE + 21]]'
-
-//      O0-NODEBUG: Function: foo
-// O0-NODEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 16, Size: 32
-// O0-NODEBUG-NEXT: Offset: [SP-72], Type: Variable, Align: 16, Size: 32
-//
-//      O0-DEBUG: Function: foo
-// O0-DEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 16, Size: 32
-// O0-DEBUG-NEXT:     a @ {{.*}}stack-layout-remark.c:[[# @LINE + 10]]
-// O0-DEBUG-NEXT: Offset: [SP-72], Type: Variable, Align: 16, Size: 32
-// O0-DEBUG-NEXT:     f @ {{.*}}stack-layout-remark.c:[[# @LINE + 11]]
-
-//      O3-DEBUG: Function: foo
-// O3-DEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 16, Size: 32
-// O3-DEBUG-NEXT:     a @ {{.*}}stack-layout-remark.c:[[# @LINE + 4]]
-// O3-DEBUG-NEXT:     f @ {{.*}}stack-layout-remark.c:[[# @LINE + 6]]
-void foo() {
-  {
-    char a[32] = {0};
-    work(a, sizeof(a));
-  }
-  char f[32] = {0};
-  work(f, sizeof(f));
-}
-//      O0-NODEBUG: Function: bar
-// O0-NODEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 16, Size: 32
-// O0-NODEBUG-NEXT: Offset: [SP-72], Type: Variable, Align: 16, Size: 32
-
-//      O0-DEBUG: Function: bar
-// O0-DEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 16, Size: 32
-// O0-DEBUG-NEXT:     f @ {{.*}}stack-layout-remark.c:[[# @LINE + 10]]
-// O0-DEBUG-NEXT: Offset: [SP-72], Type: Variable, Align: 16, Size: 32
-// O0-DEBUG-NEXT:     a @ {{.*}}stack-layout-remark.c:[[# @LINE + 10]]
-
-//      O3-DEBUG: Function: bar
-// O3-DEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 16, Size: 32
-// O3-DEBUG-NEXT:     f @ {{.*}}stack-layout-remark.c:[[# @LINE + 4]]
-// O3-DEBUG-NEXT: Offset: [SP-72], Type: Variable, Align: 16, Size: 32
-// O3-DEBUG-NEXT:     a @ {{.*}}stack-layout-remark.c:[[# @LINE + 4]]
-void bar() {
-  char f[32] = {0};
-  {
-    char a[32] = {0};
-    work(a, sizeof(a));
-  }
-  work(f, sizeof(f));
-}
-
-struct Array {
-  int *data;
-  int size;
-};
-
-struct Result {
-  struct Array *data;
-  int sum;
-};
-
-//      O0-NODEBUG: Function: cleanup_array
-// O0-NODEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 8, Size: 8
-
-//      O0-DEBUG: Function: cleanup_array
-// O0-DEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     a @ {{.*}}stack-layout-remark.c:[[# @LINE + 5]]
-
-//      O3-DEBUG: Function: cleanup_array
-//      O3-DEBUG: Function: cleanup_result
-// O3-DEBUG-NEXT: Offset: [SP-8], Type: Spill, Align: 16, Size: 8
-void cleanup_array(struct Array *a) {
-  if (!a)
-    return;
-  if (!a->data)
-    return;
-  deallocate(a->data);
-}
-
-//      O0-NODEBUG: Function: cleanup_result
-// O0-NODEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 8, Size: 8
-
-//      O0-DEBUG: Function: cleanup_result
-// O0-DEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     res @ {{.*}}stack-layout-remark.c:[[# @LINE + 1]]
-void cleanup_result(struct Result *res) {
-  if (!res)
-    return;
-  if (!res->data)
-    return;
-  cleanup_array(res->data);
-  deallocate(res->data);
-}
-
-extern void use_dot_vector(struct Array *data);
-
-//      O0-NODEBUG: Function: do_work
-// O0-NODEBUG-NEXT: Offset: [SP-4], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-16], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-24], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-32], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-36], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-48], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-52], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-56], Type: Variable, Align: 4, Size: 4
-
-//      O0-DEBUG: Function: do_work
-// O0-DEBUG-NEXT: Offset: [SP-4], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT: Offset: [SP-16], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     A @ {{.*}}stack-layout-remark.c:[[# @LINE + 20]]
-// O0-DEBUG-NEXT: Offset: [SP-24], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     B @ {{.*}}stack-layout-remark.c:[[# @LINE + 18]]
-// O0-DEBUG-NEXT: Offset: [SP-32], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     out @ {{.*}}stack-layout-remark.c:[[# @LINE + 16]]
-// O0-DEBUG-NEXT: Offset: [SP-36], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     len @ {{.*}}stack-layout-remark.c:[[# @LINE + 19]]
-// O0-DEBUG-NEXT: Offset: [SP-48], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     AB @ {{.*}}stack-layout-remark.c:[[# @LINE + 18]]
-// O0-DEBUG-NEXT: Offset: [SP-52], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     sum @ {{.*}}stack-layout-remark.c:[[# @LINE + 32]]
-// O0-DEBUG-NEXT: Offset: [SP-56], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     i @ {{.*}}stack-layout-remark.c:[[# @LINE + 31]]
-
-//      O3-DEBUG: Function: do_work
-// O3-DEBUG-NEXT: Offset: [SP-8], Type: Spill, Align: 16, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-16], Type: Spill, Align: 8, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-24], Type: Spill, Align: 16, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-32], Type: Spill, Align: 8, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-40], Type: Spill, Align: 16, Size: 8
-int do_work(struct Array *A, struct Array *B, struct Result *out) {
-  if (!A || !B)
-    return -1;
-  if (A->size != B->size)
-    return -1;
-  const int len = A->size;
-  struct Array *AB;
-  if (out->data == NULL) {
-    AB = (struct Array *)allocate(sizeof(struct Array));
-    AB->data = NULL;
-    AB->size = 0;
-    out->data = AB;
-  } else {
-    AB = out->data;
-  }
-
-  if (AB->data)
-    deallocate(AB->data);
-
-  AB->data = (int *)allocate(len * sizeof(int));
-  AB->size = len;
-
-  int sum = 0;
-  for (int i = 0; i < len; ++i) {
-    AB->data[i] = A->data[i] * B->data[i];
-    sum += AB->data[i];
-  }
-  return sum;
-}
-
-//      O0-NODEBUG: Function: gen_array
-// O0-NODEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-12], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-24], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-28], Type: Variable, Align: 4, Size: 4
-
-//      O0-DEBUG: Function: gen_array
-// O0-DEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT: Offset: [SP-12], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     size @ {{.*}}stack-layout-remark.c:[[# @LINE + 10]]
-// O0-DEBUG-NEXT: Offset: [SP-24], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     res @ {{.*}}stack-layout-remark.c:[[# @LINE + 11]]
-// O0-DEBUG-NEXT: Offset: [SP-28], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     i @ {{.*}}stack-layout-remark.c:[[# @LINE + 13]]
-
-//      O3-DEBUG: Function: gen_array
-// O3-DEBUG-NEXT: Offset: [SP-8], Type: Spill, Align: 16, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-16], Type: Spill, Align: 8, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-24], Type: Spill, Align: 16, Size: 8
-struct Array *gen_array(int size) {
-  if (size < 0)
-    return NULL;
-  struct Array *res = (struct Array *)allocate(sizeof(struct Array));
-  res->size = size;
-  res->data = (int *)allocate(size * sizeof(int));
-
-  for (int i = 0; i < size; ++i) {
-    res->data[i] = rand();
-  }
-
-  return res;
-}
-
-// YAML: --- !Analysis
-// YAML: Pass:            stack-frame-layout
-// YAML: Name:            StackLayout
-// YAML: DebugLoc:        { File: '{{.*}}stack-layout-remark.c', Line: [[# @LINE + 59]]
-// YAML: Function:        caller
-// YAML: Args:
-// YAML:   - Offset:          '-8'
-// YAML:   - Type:            Spill
-// YAML:   - Align:           '16'
-// YAML:   - Size:            '8'
-// YAML:   - Offset:          '-16'
-// YAML:   - Type:            Spill
-// YAML:   - Align:           '8'
-// YAML:   - Size:            '8'
-// YAML:   - Offset:          '-24'
-// YAML:   - Type:            Spill
-// YAML:   - Align:           '16'
-// YAML:   - Size:            '8'
-// YAML:   - Offset:          '-32'
-// YAML:   - Type:            Spill
-// YAML:   - Align:           '8'
-// YAML:   - Size:            '8'
-// YAML:   - Offset:          '-40'
-// YAML:   - Type:            Spill
-// YAML:   - Align:           '16'
-// YAML:   - Size:            '8'
-// YAML:   - Offset:          '-48'
-// YAML:   - Type:            Spill
-// YAML:   - Align:           '8'
-// YAML:   - Size:            '8'
-
-//      O0-NODEBUG: Function: caller
-// O0-NODEBUG-NEXT: Offset: [SP-4], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-16], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-24], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-32], Type: Variable, Align: 8, Size: 8
-// O0-NODEBUG-NEXT: Offset: [SP-36], Type: Variable, Align: 4, Size: 4
-// O0-NODEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 4, Size: 4
-
-//      O0-DEBUG: Function: caller
-// O0-DEBUG-NEXT: Offset: [SP-4], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT: Offset: [SP-8], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     size @ {{.*}}stack-layout-remark.c:[[# @LINE + 20]]
-// O0-DEBUG-NEXT: Offset: [SP-16], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     A @ {{.*}}stack-layout-remark.c:[[# @LINE + 19]]
-// O0-DEBUG-NEXT: Offset: [SP-24], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     B @ {{.*}}stack-layout-remark.c:[[# @LINE + 18]]
-// O0-DEBUG-NEXT: Offset: [SP-32], Type: Variable, Align: 8, Size: 8
-// O0-DEBUG-NEXT:     res @ {{.*}}stack-layout-remark.c:[[# @LINE + 17]]
-// O0-DEBUG-NEXT: Offset: [SP-36], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     ret @ {{.*}}stack-layout-remark.c:[[# @LINE + 16]]
-// O0-DEBUG-NEXT: Offset: [SP-40], Type: Variable, Align: 4, Size: 4
-// O0-DEBUG-NEXT:     err @ {{.*}}stack-layout-remark.c:[[# @LINE + 16]]
-
-//      O3-DEBUG: Function: caller
-// O3-DEBUG-NEXT: Offset: [SP-8], Type: Spill, Align: 16, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-16], Type: Spill, Align: 8, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-24], Type: Spill, Align: 16, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-32], Type: Spill, Align: 8, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-40], Type: Spill, Align: 16, Size: 8
-// O3-DEBUG-NEXT: Offset: [SP-48], Type: Spill, Align: 8, Size: 8
-int caller() {
-  const int size = 100;
-  struct Array *A = gen_array(size);
-  struct Array *B = gen_array(size);
-  struct Result *res = (struct Result *)allocate(sizeof(struct Result));
-  int ret = -1;
-
-  int err = do_work(A, B, res);
-  if (err == -1) {
-    goto cleanup;
-  }
-
-  ret = res->sum;
-  if (ret == -1)
-    return caller();
-
-  use_dot_vector(res->data);
-
-cleanup:
-  cleanup_array(A);
-  cleanup_array(B);
-  cleanup_result(res);
-
-  return ret;
-}
-

diff  --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index b331c9a19fd12..3f79ce379212d 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -63,10 +63,6 @@ namespace llvm {
   createMachineFunctionPrinterPass(raw_ostream &OS,
                                    const std::string &Banner ="");
 
-  /// StackFramePrinter pass - This pass prints out the machine function's
-  /// stack frame to the given stream as a debugging tool.
-  MachineFunctionPass *createStackFrameLayoutAnalysisPass();
-
   /// MIRPrinting pass - this pass prints out the LLVM IR into the given stream
   /// using the MIR serialization format.
   MachineFunctionPass *createPrintMIRPass(raw_ostream &OS);
@@ -268,10 +264,6 @@ namespace llvm {
   /// It merges disjoint allocas to reduce the stack size.
   extern char &StackColoringID;
 
-  /// StackFramePrinter - This pass prints the stack frame layout and variable
-  /// mappings.
-  extern char &StackFrameLayoutAnalysisPassID;
-
   /// IfConverter - This pass performs machine code if conversion.
   extern char &IfConverterID;
 

diff  --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index 1164cd872eb96..8494692f2a94e 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -378,7 +378,6 @@ void initializeSlotIndexesPass(PassRegistry&);
 void initializeSpeculativeExecutionLegacyPassPass(PassRegistry&);
 void initializeSpillPlacementPass(PassRegistry&);
 void initializeStackColoringPass(PassRegistry&);
-void initializeStackFrameLayoutAnalysisPassPass(PassRegistry &);
 void initializeStackMapLivenessPass(PassRegistry&);
 void initializeStackProtectorPass(PassRegistry&);
 void initializeStackSafetyGlobalInfoWrapperPassPass(PassRegistry &);

diff  --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt
index cac16e59a51d1..275ee8019b14e 100644
--- a/llvm/lib/CodeGen/CMakeLists.txt
+++ b/llvm/lib/CodeGen/CMakeLists.txt
@@ -213,7 +213,6 @@ add_llvm_component_library(LLVMCodeGen
   SpillPlacement.cpp
   SplitKit.cpp
   StackColoring.cpp
-  StackFrameLayoutAnalysisPass.cpp
   StackMapLivenessAnalysis.cpp
   StackMaps.cpp
   StackProtector.cpp

diff  --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 398ff56f737c4..b1f080a2a9300 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -122,7 +122,6 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeSjLjEHPreparePass(Registry);
   initializeSlotIndexesPass(Registry);
   initializeStackColoringPass(Registry);
-  initializeStackFrameLayoutAnalysisPassPass(Registry);
   initializeStackMapLivenessPass(Registry);
   initializeStackProtectorPass(Registry);
   initializeStackSlotColoringPass(Registry);

diff  --git a/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp b/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp
deleted file mode 100644
index ddac093423fa6..0000000000000
--- a/llvm/lib/CodeGen/StackFrameLayoutAnalysisPass.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-//===-- StackFrameLayoutAnalysisPass.cpp
-//------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// StackFrameLayoutAnalysisPass implementation. Outputs information about the
-// layout of the stack frame, using the remarks interface. On the CLI it prints
-// a textual representation of the stack frame. When possible it prints the
-// values that occupy a stack slot using any available debug information. Since
-// output is remarks based, it is also available in a machine readable file
-// format, such as YAML.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Analysis/OptimizationRemarkEmitter.h"
-#include "llvm/CodeGen/MachineFrameInfo.h"
-#include "llvm/CodeGen/MachineFunction.h"
-#include "llvm/CodeGen/MachineFunctionPass.h"
-#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
-#include "llvm/CodeGen/Passes.h"
-#include "llvm/CodeGen/SlotIndexes.h"
-#include "llvm/CodeGen/StackProtector.h"
-#include "llvm/CodeGen/TargetFrameLowering.h"
-#include "llvm/CodeGen/TargetSubtargetInfo.h"
-#include "llvm/IR/DebugInfoMetadata.h"
-#include "llvm/IR/PrintPasses.h"
-#include "llvm/InitializePasses.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/FormatVariadic.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <sstream>
-
-using namespace llvm;
-
-#define DEBUG_TYPE "stack-frame-layout"
-
-namespace {
-
-/// StackFrameLayoutAnalysisPass - This is a pass to dump the stack frame of a
-/// MachineFunction.
-///
-struct StackFrameLayoutAnalysisPass : public MachineFunctionPass {
-  using SlotDbgMap =
-      SmallDenseMap<int, SmallPtrSet<const DILocalVariable *, 4>>;
-  static char ID;
-
-  enum SlotType {
-    Spill,          // a Spill slot
-    StackProtector, // Stack Protector slot
-    Variable,       // a slot used to store a local data (could be a tmp)
-    Invalid         // It's an error for a slot to have this type
-  };
-
-  struct SlotData {
-    int Slot;
-    int Size;
-    int Align;
-    int Offset;
-    SlotType SlotTy;
-
-    SlotData(const MachineFrameInfo &MFI, const int ValOffset, const int Idx)
-        : Slot(Idx), Size(MFI.getObjectSize(Idx)),
-          Align(MFI.getObjectAlign(Idx).value()),
-          Offset(MFI.getObjectOffset(Idx) - ValOffset), SlotTy(Invalid) {
-      if (MFI.isSpillSlotObjectIndex(Idx))
-        SlotTy = SlotType::Spill;
-      else if (Idx == MFI.getStackProtectorIndex())
-        SlotTy = SlotType::StackProtector;
-      else
-        SlotTy = SlotType::Variable;
-    }
-
-    // we use this to sort in reverse order, so that the layout is displayed
-    // correctly
-    bool operator<(const SlotData &Rhs) const { return Offset > Rhs.Offset; }
-  };
-
-  StackFrameLayoutAnalysisPass() : MachineFunctionPass(ID) {}
-
-  StringRef getPassName() const override {
-    return "Stack Frame Layout Analysis";
-  }
-
-  void getAnalysisUsage(AnalysisUsage &AU) const override {
-    AU.setPreservesAll();
-    MachineFunctionPass::getAnalysisUsage(AU);
-    AU.addRequired<MachineOptimizationRemarkEmitterPass>();
-  }
-
-  bool runOnMachineFunction(MachineFunction &MF) override {
-    // TODO: We should implement a similar filter for remarks:
-    //   -Rpass-func-filter=<regex>
-    if (!isFunctionInPrintList(MF.getName()))
-      return false;
-
-    LLVMContext &Ctx = MF.getFunction().getContext();
-    if (!Ctx.getDiagHandlerPtr()->isAnalysisRemarkEnabled(DEBUG_TYPE))
-      return false;
-
-    MachineOptimizationRemarkAnalysis Rem(DEBUG_TYPE, "StackLayout",
-                                          MF.getFunction().getSubprogram(),
-                                          &MF.front());
-    Rem << ("\nFunction: " + MF.getName()).str();
-    emitStackFrameLayoutRemarks(MF, Rem);
-    getAnalysis<MachineOptimizationRemarkEmitterPass>().getORE().emit(Rem);
-    return false;
-  }
-
-  std::string getTypeString(SlotType Ty) {
-    switch (Ty) {
-    case SlotType::Spill:
-      return "Spill";
-    case SlotType::StackProtector:
-      return "Protector";
-    case SlotType::Variable:
-      return "Variable";
-    default:
-      llvm_unreachable("bad slot type for stack layout");
-    }
-  }
-
-  void emitStackSlotRemark(const MachineFunction &MF, const SlotData &D,
-                           MachineOptimizationRemarkAnalysis &Rem) {
-    // To make it easy to understand the stack layout from the CLI, we want to
-    // print each slot like the following:
-    //
-    //   Offset: [SP+8], Type: Spill, Align: 8, Size: 16
-    //       foo @ /path/to/file.c:25
-    //       bar @ /path/to/file.c:35
-    //
-    // Which prints the size, alignment, and offset from the SP at function
-    // entry.
-    //
-    // But we also want the machine readable remarks data to be nicely
-    // organized. So we print some additional data as strings for the CLI
-    // output, but maintain more structured data for the YAML.
-    //
-    // For example we store the Offset in YAML as:
-    //    ...
-    //    - Offset: -8
-    //
-    // But we print it to the CLI as
-    //   Offset: [SP-8]
-
-    // Negative offsets will print a leading `-`, so only add `+`
-    std::string Prefix =
-        formatv("\nOffset: [SP{0}", (D.Offset < 0) ? "" : "+").str();
-    Rem << Prefix << ore::NV("Offset", D.Offset)
-        << "], Type: " << ore::NV("Type", getTypeString(D.SlotTy))
-        << ", Align: " << ore::NV("Align", D.Align)
-        << ", Size: " << ore::NV("Size", D.Size);
-  }
-
-  void emitSourceLocRemark(const MachineFunction &MF, const DILocalVariable *N,
-                           MachineOptimizationRemarkAnalysis &Rem) {
-    std::string Loc =
-        formatv("{0} @ {1}:{2}", N->getName(), N->getFilename(), N->getLine())
-            .str();
-    Rem << "\n    " << ore::NV("DataLoc", Loc);
-  }
-
-  void emitStackFrameLayoutRemarks(MachineFunction &MF,
-                                   MachineOptimizationRemarkAnalysis &Rem) {
-    const MachineFrameInfo &MFI = MF.getFrameInfo();
-    if (!MFI.hasStackObjects())
-      return;
-
-    // ValOffset is the offset to the local area from the SP at function entry.
-    // To display the true offset from SP, we need to subtract ValOffset from
-    // MFI's ObjectOffset.
-    const TargetFrameLowering *FI = MF.getSubtarget().getFrameLowering();
-    const int ValOffset = (FI ? FI->getOffsetOfLocalArea() : 0);
-
-    LLVM_DEBUG(dbgs() << "getStackProtectorIndex =="
-                      << MFI.getStackProtectorIndex() << "\n");
-
-    std::vector<SlotData> SlotInfo;
-    SmallDenseMap<int, int> SlotOffsetMap;
-
-    const unsigned int NumObj = MFI.getNumObjects();
-    SlotInfo.reserve(NumObj);
-    SlotOffsetMap.reserve(NumObj);
-    // initialize slot info
-    for (int Idx = MFI.getObjectIndexBegin(), EndIdx = MFI.getObjectIndexEnd();
-         Idx != EndIdx; ++Idx) {
-      if (MFI.isDeadObjectIndex(Idx))
-        continue;
-      auto &Inserted = SlotInfo.emplace_back(MFI, ValOffset, Idx);
-      SlotOffsetMap[Inserted.Slot] = Inserted.Offset;
-    }
-
-    // sort the ordering, to match the actual layout in memory
-    llvm::sort(SlotInfo);
-
-    SlotDbgMap SlotMap = genSlotDbgMapping(MF);
-
-    for (const SlotData &Info : SlotInfo) {
-      emitStackSlotRemark(MF, Info, Rem);
-      for (const DILocalVariable *N : SlotMap[Info.Slot])
-        emitSourceLocRemark(MF, N, Rem);
-    }
-  }
-
-  // We need to generate a mapping of slots to the values that are stored to
-  // them. This information is lost by the time we need to print out the frame,
-  // so we reconstruct it here by walking the CFG, and generating the mapping.
-  SlotDbgMap genSlotDbgMapping(MachineFunction &MF) {
-    SlotDbgMap SlotDebugMap;
-
-    // add variables to the map
-    for (MachineFunction::VariableDbgInfo &DI : MF.getVariableDbgInfo())
-      SlotDebugMap[DI.Slot].insert(DI.Var);
-
-    // Then add all the spills that have debug data
-    for (MachineBasicBlock &MBB : MF) {
-      for (MachineInstr &MI : MBB) {
-        for (MachineMemOperand *MO : MI.memoperands()) {
-          if (!MO->isStore())
-            continue;
-          auto *FI = dyn_cast_or_null<FixedStackPseudoSourceValue>(
-              MO->getPseudoValue());
-          if (!FI)
-            continue;
-          int FrameIdx = FI->getFrameIndex();
-          SmallVector<MachineInstr *> Dbg;
-          MI.collectDebugValues(Dbg);
-
-          for (MachineInstr *MI : Dbg)
-            SlotDebugMap[FrameIdx].insert(MI->getDebugVariable());
-        }
-      }
-    }
-
-    return SlotDebugMap;
-  }
-};
-
-char StackFrameLayoutAnalysisPass::ID = 0;
-} // namespace
-
-char &llvm::StackFrameLayoutAnalysisPassID = StackFrameLayoutAnalysisPass::ID;
-INITIALIZE_PASS(StackFrameLayoutAnalysisPass, "stack-frame-layout",
-                "Stack Frame Layout", false, false)
-
-namespace llvm {
-/// Returns a newly-created StackFrameLayout pass.
-MachineFunctionPass *createStackFrameLayoutAnalysisPass() {
-  return new StackFrameLayoutAnalysisPass();
-}
-
-} // namespace llvm

diff  --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index 3127328c363e8..115f266a71506 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -1270,8 +1270,6 @@ void TargetPassConfig::addMachinePasses() {
   if (!DisableCFIFixup && TM->Options.EnableCFIFixup)
     addPass(createCFIFixup());
 
-  PM->add(createStackFrameLayoutAnalysisPass());
-
   // Add passes that directly emit MI after all other MI passes.
   addPreEmitPass2();
 

diff  --git a/llvm/test/CodeGen/AArch64/O0-pipeline.ll b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
index f1779086dbaf3..8d4556c6bda1c 100644
--- a/llvm/test/CodeGen/AArch64/O0-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
@@ -73,9 +73,6 @@
 ; CHECK-NEXT:       Live DEBUG_VALUE analysis
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
 ; CHECK-NEXT:       Insert CFI remember/restore state instructions
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       Unpack machine instruction bundles
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
 ; CHECK-NEXT:       Machine Optimization Remark Emitter

diff  --git a/llvm/test/CodeGen/AArch64/O3-pipeline.ll b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
index 704352ee291e7..1e77970721f65 100644
--- a/llvm/test/CodeGen/AArch64/O3-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O3-pipeline.ll
@@ -224,9 +224,6 @@
 ; CHECK-NEXT:     Machine Outliner
 ; CHECK-NEXT:     FunctionPass Manager
 ; CHECK-NEXT:       Insert CFI remember/restore state instructions
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       Unpack machine instruction bundles
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
 ; CHECK-NEXT:       Machine Optimization Remark Emitter

diff  --git a/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll b/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
index 9295897dd22d3..755025ecb692f 100644
--- a/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
@@ -38,12 +38,6 @@
 ; HOTNESS-NEXT: Freeing Pass 'Insert CFI remember/restore state instructions' on Function 'empty_func'
 ; HOTNESS-NEXT: Executing Pass 'Verify generated machine code'
 ; HOTNESS-NEXT: Freeing Pass 'Verify generated machine code'
-; HOTNESS-NEXT: Executing Pass 'Lazy Machine Block Frequency Analysis'
-; HOTNESS-NEXT: Executing Pass 'Machine Optimization Remark Emitter'
-; HOTNESS:      Executing Pass 'Stack Frame Layout Analysis'
-; HOTNESS-NEXT: Freeing Pass 'Machine Optimization Remark Emitter'
-; HOTNESS-NEXT: Freeing Pass 'Lazy Machine Block Frequency Analysis'
-; HOTNESS-NEXT: Freeing Pass 'Stack Frame Layout Analysis'
 ; HOTNESS-NEXT: Executing Pass 'Unpack machine instruction bundles'
 ; HOTNESS-NEXT: Freeing Pass 'Unpack machine instruction bundles'
 ; HOTNESS-NEXT: Executing Pass 'Verify generated machine code'
@@ -69,12 +63,6 @@
 ; NO_HOTNESS-NEXT: Freeing Pass 'Insert CFI remember/restore state instructions' on Function 'empty_func'
 ; NO_HOTNESS-NEXT: Executing Pass 'Verify generated machine code'
 ; NO_HOTNESS-NEXT: Freeing Pass 'Verify generated machine code'
-; NO_HOTNESS-NEXT: Executing Pass 'Lazy Machine Block Frequency Analysis'
-; NO_HOTNESS-NEXT: Executing Pass 'Machine Optimization Remark Emitter'
-; NO_HOTNESS:      Executing Pass 'Stack Frame Layout Analysis'
-; NO_HOTNESS-NEXT: Freeing Pass 'Machine Optimization Remark Emitter'
-; NO_HOTNESS-NEXT: Freeing Pass 'Lazy Machine Block Frequency Analysis'
-; NO_HOTNESS-NEXT: Freeing Pass 'Stack Frame Layout Analysis'
 ; NO_HOTNESS-NEXT: Executing Pass 'Unpack machine instruction bundles'
 ; NO_HOTNESS-NEXT: Freeing Pass 'Unpack machine instruction bundles'
 ; NO_HOTNESS-NEXT: Executing Pass 'Verify generated machine code'

diff  --git a/llvm/test/CodeGen/AMDGPU/llc-pipeline.ll b/llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
index 90088e4ad16c6..6710668b9ebb2 100644
--- a/llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
+++ b/llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
@@ -143,9 +143,6 @@
 ; GCN-O0-NEXT:        Register Usage Information Collector Pass
 ; GCN-O0-NEXT:        Live DEBUG_VALUE analysis
 ; GCN-O0-NEXT:        Machine Sanitizer Binary Metadata
-; GCN-O0-NEXT:        Lazy Machine Block Frequency Analysis
-; GCN-O0-NEXT:        Machine Optimization Remark Emitter
-; GCN-O0-NEXT:        Stack Frame Layout Analysis
 ; GCN-O0-NEXT:    Function register usage analysis
 ; GCN-O0-NEXT:    FunctionPass Manager
 ; GCN-O0-NEXT:      Lazy Machine Block Frequency Analysis
@@ -414,9 +411,6 @@
 ; GCN-O1-NEXT:        Register Usage Information Collector Pass
 ; GCN-O1-NEXT:        Live DEBUG_VALUE analysis
 ; GCN-O1-NEXT:        Machine Sanitizer Binary Metadata
-; GCN-O1-NEXT:        Lazy Machine Block Frequency Analysis
-; GCN-O1-NEXT:        Machine Optimization Remark Emitter
-; GCN-O1-NEXT:        Stack Frame Layout Analysis
 ; GCN-O1-NEXT:    Function register usage analysis
 ; GCN-O1-NEXT:    FunctionPass Manager
 ; GCN-O1-NEXT:      Lazy Machine Block Frequency Analysis
@@ -717,9 +711,6 @@
 ; GCN-O1-OPTS-NEXT:        Register Usage Information Collector Pass
 ; GCN-O1-OPTS-NEXT:        Live DEBUG_VALUE analysis
 ; GCN-O1-OPTS-NEXT:        Machine Sanitizer Binary Metadata
-; GCN-O1-OPTS-NEXT:        Lazy Machine Block Frequency Analysis
-; GCN-O1-OPTS-NEXT:        Machine Optimization Remark Emitter
-; GCN-O1-OPTS-NEXT:        Stack Frame Layout Analysis
 ; GCN-O1-OPTS-NEXT:    Function register usage analysis
 ; GCN-O1-OPTS-NEXT:    FunctionPass Manager
 ; GCN-O1-OPTS-NEXT:      Lazy Machine Block Frequency Analysis
@@ -1023,9 +1014,6 @@
 ; GCN-O2-NEXT:        Register Usage Information Collector Pass
 ; GCN-O2-NEXT:        Live DEBUG_VALUE analysis
 ; GCN-O2-NEXT:        Machine Sanitizer Binary Metadata
-; GCN-O2-NEXT:        Lazy Machine Block Frequency Analysis
-; GCN-O2-NEXT:        Machine Optimization Remark Emitter
-; GCN-O2-NEXT:        Stack Frame Layout Analysis
 ; GCN-O2-NEXT:    Function register usage analysis
 ; GCN-O2-NEXT:    FunctionPass Manager
 ; GCN-O2-NEXT:      Lazy Machine Block Frequency Analysis
@@ -1339,9 +1327,6 @@
 ; GCN-O3-NEXT:        Register Usage Information Collector Pass
 ; GCN-O3-NEXT:        Live DEBUG_VALUE analysis
 ; GCN-O3-NEXT:        Machine Sanitizer Binary Metadata
-; GCN-O3-NEXT:        Lazy Machine Block Frequency Analysis
-; GCN-O3-NEXT:        Machine Optimization Remark Emitter
-; GCN-O3-NEXT:        Stack Frame Layout Analysis
 ; GCN-O3-NEXT:    Function register usage analysis
 ; GCN-O3-NEXT:    FunctionPass Manager
 ; GCN-O3-NEXT:      Lazy Machine Block Frequency Analysis

diff  --git a/llvm/test/CodeGen/ARM/O3-pipeline.ll b/llvm/test/CodeGen/ARM/O3-pipeline.ll
index 24c47c2674a5f..2031158017d6b 100644
--- a/llvm/test/CodeGen/ARM/O3-pipeline.ll
+++ b/llvm/test/CodeGen/ARM/O3-pipeline.ll
@@ -194,9 +194,6 @@
 ; CHECK-NEXT:      Machine Sanitizer Binary Metadata
 ; CHECK-NEXT:    Machine Outliner
 ; CHECK-NEXT:    FunctionPass Manager
-; CHECK-NEXT:      Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:      Machine Optimization Remark Emitter
-; CHECK-NEXT:      Stack Frame Layout Analysis
 ; CHECK-NEXT:      ReachingDefAnalysis
 ; CHECK-NEXT:      ARM fix for Cortex-A57 AES Erratum 1742098
 ; CHECK-NEXT:      ARM Branch Targets

diff  --git a/llvm/test/CodeGen/ARM/stack-frame-layout-remarks.ll b/llvm/test/CodeGen/ARM/stack-frame-layout-remarks.ll
deleted file mode 100644
index ead889f300660..0000000000000
--- a/llvm/test/CodeGen/ARM/stack-frame-layout-remarks.ll
+++ /dev/null
@@ -1,329 +0,0 @@
-; Test remark output for stack-frame-layout
-
-; ensure basic output works
-; RUN: llc -mtriple=arm-eabi -O1 -pass-remarks-analysis=stack-frame-layout < %s 2>&1 >/dev/null | FileCheck %s
-
-; check additional slots are displayed when stack is not optimized
-; RUN: llc -mtriple=arm-eabi -O0  -pass-remarks-analysis=stack-frame-layout < %s 2>&1 >/dev/null | FileCheck %s --check-prefix=NO_COLORING
-
-; check more complex cases
-; RUN: llc %s  -pass-remarks-analysis=stack-frame-layout -o /dev/null --march=arm -mcpu=cortex-m1 2>&1 | FileCheck %s --check-prefix=BOTH --check-prefix=DEBUG
-
-; check output without debug info
-; RUN: opt %s -passes=strip -S | llc   -pass-remarks-analysis=stack-frame-layout -o /dev/null --march=arm -mcpu=cortex-m1 2>&1 | FileCheck %s --check-prefix=BOTH --check-prefix=STRIPPED
-
-target triple = "x86_64-unknown-linux-gnu"
-
- at .str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
-declare i32 @printf(ptr, ...)
-
-; CHECK: Function: stackSizeWarning
-; CHECK: [SP-4]{{.*}}Spill{{.*}}4{{.*}}4
-; CHECK: [SP-96]{{.*}}16{{.*}}80
-; CHECK:    buffer @ frame-diags.c:30
-; NO_COLORING: [SP-176]{{.*}}16{{.*}}80
-; CHECK:    buffer2 @ frame-diags.c:33
-
-; BOTH: Function: stackSizeWarning
-; BOTH: [SP-4]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-8]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-12]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-16]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-96]{{.*}}16{{.*}}80
-; DEBUG: buffer @ frame-diags.c:30
-; STRIPPED-NOT: buffer @ frame-diags.c:30
-; BOTH: [SP-176]{{.*}}16{{.*}}80
-; DEBUG: buffer2 @ frame-diags.c:33
-; STRIPPED-NOT: buffer2 @ frame-diags.c:33
-define void @stackSizeWarning() {
-entry:
-  %buffer = alloca [80 x i8], align 16
-  %buffer2 = alloca [80 x i8], align 16
-  call void @llvm.dbg.declare(metadata ptr %buffer, metadata !25, metadata !DIExpression()), !dbg !39
-  call void @llvm.dbg.declare(metadata ptr %buffer2, metadata !31, metadata !DIExpression()), !dbg !40
-  ret void
-}
-
-; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
-declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
-
-; BOTH: Function: cleanup_array
-; BOTH:  [SP-8]{{.+}}8{{.+}}4
-; DEBUG: a @ dot.c:13
-; STRIPPED-NOT: a @ dot.c:13
-define void @cleanup_array(ptr %0) #1 {
-  %2 = alloca ptr, align 8
-  store ptr %0, ptr %2, align 8
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !41, metadata !DIExpression()), !dbg !46
-  ret void
-}
-
-; BOTH: Function: cleanup_result
-; BOTH:  [SP-8]{{.+}}8{{.+}}4
-; DEBUG: res @ dot.c:21
-; STRIPPED-NOT: res @ dot.c:21
-define void @cleanup_result(ptr %0) #1 {
-  %2 = alloca ptr, align 8
-  store ptr %0, ptr %2, align 8
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !47, metadata !DIExpression()), !dbg !51
-  ret void
-}
-
-; BOTH: Function: do_work
-; BOTH:  [SP-4]{{.+}}4{{.+}}4
-; BOTH:  [SP-8]{{.+}}8{{.+}}4
-; DEBUG: A @ dot.c:32
-; STRIPPED-NOT: A @ dot.c:32
-; BOTH:  [SP-16]{{.+}}8{{.+}}4
-; DEBUG: B @ dot.c:32
-; STRIPPED-NOT: B @ dot.c:32
-; BOTH:  [SP-24]{{.+}}8{{.+}}4
-; DEBUG: out @ dot.c:32
-; STRIPPED-NOT: out @ dot.c:32
-; BOTH:  [SP-28]{{.+}}4{{.+}}4
-; DEBUG: len @ dot.c:37
-; STRIPPED-NOT: len @ dot.c:37
-; BOTH:  [SP-32]{{.+}}8{{.+}}4
-; DEBUG: AB @ dot.c:38
-; STRIPPED-NOT: AB @ dot.c:38
-; BOTH:  [SP-36]{{.+}}4{{.+}}4
-; DEBUG: sum @ dot.c:54
-; STRIPPED-NOT: sum @ dot.c:54
-; BOTH:  [SP-40]{{.+}}4{{.+}}4
-; DEBUG: i @ dot.c:55
-; STRIPPED-NOT: i @ dot.c:55
-define i32 @do_work(ptr %0, ptr %1, ptr %2) #1 {
-  %4 = alloca i32, align 4
-  %5 = alloca ptr, align 8
-  %6 = alloca ptr, align 8
-  %7 = alloca ptr, align 8
-  %8 = alloca i32, align 4
-  %9 = alloca ptr, align 8
-  %10 = alloca i32, align 4
-  %11 = alloca i32, align 4
-  store ptr %0, ptr %5, align 8
-  call void @llvm.dbg.declare(metadata ptr %5, metadata !52, metadata !DIExpression()), !dbg !56
-  call void @llvm.dbg.declare(metadata ptr %6, metadata !57, metadata !DIExpression()), !dbg !58
-  store ptr %2, ptr %7, align 8
-  call void @llvm.dbg.declare(metadata ptr %7, metadata !59, metadata !DIExpression()), !dbg !60
-  call void @llvm.dbg.declare(metadata ptr %8, metadata !61, metadata !DIExpression()), !dbg !63
-  call void @llvm.dbg.declare(metadata ptr %9, metadata !64, metadata !DIExpression()), !dbg !65
-  store ptr null, ptr %9, align 8
-  store ptr null, ptr null, align 8
-  store i32 0, ptr %9, align 8
-  %12 = load i32, ptr %8, align 4
-  store i32 %12, ptr null, align 8
-  call void @llvm.dbg.declare(metadata ptr %10, metadata !66, metadata !DIExpression()), !dbg !67
-  call void @llvm.dbg.declare(metadata ptr %11, metadata !68, metadata !DIExpression()), !dbg !70
-  store i32 0, ptr %11, align 4
-  br label %13
-
-13:                                               ; preds = %16, %3
-  %14 = load i32, ptr %11, align 4
-  %15 = icmp slt i32 %14, 0
-  br i1 %15, label %16, label %18
-
-16:                                               ; preds = %13
-  %17 = load i32, ptr %6, align 4
-  store i32 %17, ptr null, align 4
-  br label %13
-
-18:                                               ; preds = %13
-  store i32 0, ptr %4, align 4
-  ret i32 0
-}
-
-; BOTH: Function: gen_array
-; BOTH:  [SP-8]{{.+}}8{{.+}}4
-; BOTH:  [SP-12]{{.+}}4{{.+}}4
-; DEBUG: size @ dot.c:62
-; STRIPPED-NOT: size @ dot.c:65
-; BOTH:  [SP-16]{{.+}}8{{.+}}4
-; DEBUG: res @ dot.c:65
-; STRIPPED-NOT: res @ dot.c:65
-; BOTH:  [SP-20]{{.+}}4{{.*}}4
-; DEBUG: i @ dot.c:69
-; STRIPPED-NOT: i @ dot.c:69
-define ptr @gen_array(i32 %0) #1 {
-  %2 = alloca ptr, align 8
-  %3 = alloca i32, align 4
-  %4 = alloca ptr, align 8
-  %5 = alloca i32, align 4
-  store i32 %0, ptr %3, align 4
-  call void @llvm.dbg.declare(metadata ptr %3, metadata !71, metadata !DIExpression()), !dbg !75
-  call void @llvm.dbg.declare(metadata ptr %4, metadata !76, metadata !DIExpression()), !dbg !77
-  store ptr null, ptr %4, align 8
-  call void @llvm.dbg.declare(metadata ptr %5, metadata !78, metadata !DIExpression()), !dbg !80
-  store i32 0, ptr %5, align 4
-  ret ptr null
-}
-
-
-; BOTH: Function: caller
-; BOTH: [SP-4]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-8]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-12]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-16]{{.*}}Spill{{.*}}4{{.*}}4
-; BOTH: [SP-20]{{.*}}4{{.*}}4
-; BOTH: [SP-24]{{.*}}4{{.*}}4
-; DEBUG: size @ dot.c:77
-; STRIPPED-NOT: size @ dot.c:77
-; BOTH: [SP-32]{{.*}}8{{.*}}4
-; DEBUG: A @ dot.c:78
-; STRIPPED-NOT: A @ dot.c:78
-; BOTH: [SP-40]{{.*}}8{{.*}}4
-; DEBUG: B @ dot.c:79
-; STRIPPED-NOT: B @ dot.c:79
-; BOTH: [SP-48]{{.*}}8{{.*}}4
-; DEBUG: res @ dot.c:80
-; STRIPPED-NOT: res @ dot.c:80
-; BOTH: [SP-52]{{.*}}4{{.*}}4
-; DEBUG: ret @ dot.c:81
-; STRIPPED-NOT: ret @ dot.c:81
-; BOTH: [SP-56]{{.*}}4{{.*}}4
-; DEBUG: err @ dot.c:83
-; STRIPPED-NOT: err @ dot.c:83
-define i32 @caller() #1 {
-  %1 = alloca i32, align 4
-  %2 = alloca i32, align 4
-  %3 = alloca ptr, align 8
-  %4 = alloca ptr, align 8
-  %5 = alloca ptr, align 8
-  %6 = alloca i32, align 4
-  %7 = alloca i32, align 4
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !81, metadata !DIExpression()), !dbg !85
-  call void @llvm.dbg.declare(metadata ptr %3, metadata !86, metadata !DIExpression()), !dbg !87
-  call void @llvm.dbg.declare(metadata ptr %4, metadata !88, metadata !DIExpression()), !dbg !89
-  store ptr null, ptr %4, align 8
-  call void @llvm.dbg.declare(metadata ptr %5, metadata !90, metadata !DIExpression()), !dbg !91
-  call void @llvm.dbg.declare(metadata ptr %6, metadata !92, metadata !DIExpression()), !dbg !93
-  call void @llvm.dbg.declare(metadata ptr %7, metadata !94, metadata !DIExpression()), !dbg !95
-  %8 = call i32 @do_work(ptr %3, ptr null, ptr null)
-  store i32 0, ptr %6, align 4
-  store i32 0, ptr %1, align 4
-  call void @cleanup_result(ptr %5)
-  ret i32 0
-}
-
-; test29b: An array of [5 x i8] and a requested ssp-buffer-size of 5.
-; Requires protector.
-; Function Attrs: ssp stack-protector-buffer-size=5
-; BOTH: Function: test29b
-; BOTH:  [SP-4]{{.+}}Spill{{.*}}4{{.+}}4
-; BOTH:  [SP-8]{{.+}}Spill{{.*}}4{{.+}}4
-; BOTH:  [SP-12]{{.+}}Protector{{.*}}4{{.+}}4
-; BOTH:  [SP-20]{{.+}}4{{.+}}5
-define i32 @test29b() #2 {
-entry:
-  %test = alloca [5 x i8], align 1
-  %call = call i32 (ptr, ...) @printf(ptr @.str, ptr %test)
-  ret i32 %call
-}
-
-
-; uselistorder directives
-uselistorder ptr @llvm.dbg.declare, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 18 }
-
-attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
-attributes #1 = { "frame-pointer"="all" }
-attributes #2 = { ssp "stack-protector-buffer-size"="5" "frame-pointer"="all" }
-
-!llvm.dbg.cu = !{!0, !2}
-!llvm.module.flags = !{!18, !19, !20, !21, !22, !23, !24}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
-!1 = !DIFile(filename: "frame-diags.c", directory: "")
-!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: !4, splitDebugInlining: false, nameTableKind: None)
-!3 = !DIFile(filename: "dot.c", directory: "")
-!4 = !{!5, !6, !10, !13}
-!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
-!6 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64)
-!7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Array", file: !3, line: 3, size: 128, elements: !8)
-!8 = !{!9, !12}
-!9 = !DIDerivedType(tag: DW_TAG_member, name: "data", scope: !7, file: !3, line: 4, baseType: !10, size: 64)
-!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64)
-!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!12 = !DIDerivedType(tag: DW_TAG_member, name: "size", scope: !7, file: !3, line: 5, baseType: !11, size: 32, offset: 64)
-!13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64)
-!14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Result", file: !3, line: 8, size: 128, elements: !15)
-!15 = !{!16, !17}
-!16 = !DIDerivedType(tag: DW_TAG_member, name: "data", scope: !14, file: !3, line: 9, baseType: !6, size: 64)
-!17 = !DIDerivedType(tag: DW_TAG_member, name: "sum", scope: !14, file: !3, line: 10, baseType: !11, size: 32, offset: 64)
-!18 = !{i32 7, !"Dwarf Version", i32 5}
-!19 = !{i32 2, !"Debug Info Version", i32 3}
-!20 = !{i32 1, !"wchar_size", i32 4}
-!21 = !{i32 8, !"PIC Level", i32 2}
-!22 = !{i32 7, !"PIE Level", i32 2}
-!23 = !{i32 7, !"uwtable", i32 2}
-!24 = !{i32 7, !"frame-pointer", i32 2}
-!25 = !DILocalVariable(name: "buffer", scope: !26, file: !1, line: 30, type: !32)
-!26 = distinct !DILexicalBlock(scope: !27, file: !1, line: 29, column: 3)
-!27 = distinct !DISubprogram(name: "stackSizeWarning", scope: !1, file: !1, line: 28, type: !28, scopeLine: 28, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !30)
-!28 = !DISubroutineType(types: !29)
-!29 = !{null}
-!30 = !{!25, !31, !36, !37}
-!31 = !DILocalVariable(name: "buffer2", scope: !27, file: !1, line: 33, type: !32)
-!32 = !DICompositeType(tag: DW_TAG_array_type, baseType: !33, size: 640, elements: !34)
-!33 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
-!34 = !{!35}
-!35 = !DISubrange(count: 80)
-!36 = !DILocalVariable(name: "a", scope: !27, file: !1, line: 34, type: !11)
-!37 = !DILocalVariable(name: "b", scope: !27, file: !1, line: 35, type: !38)
-!38 = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
-!39 = !DILocation(line: 30, column: 10, scope: !26)
-!40 = !DILocation(line: 33, column: 8, scope: !27)
-!41 = !DILocalVariable(name: "a", arg: 1, scope: !42, file: !3, line: 13, type: !6)
-!42 = distinct !DISubprogram(name: "cleanup_array", scope: !3, file: !3, line: 13, type: !43, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!43 = !DISubroutineType(types: !44)
-!44 = !{null, !6}
-!45 = !{}
-!46 = !DILocation(line: 13, column: 34, scope: !42)
-!47 = !DILocalVariable(name: "res", arg: 1, scope: !48, file: !3, line: 21, type: !13)
-!48 = distinct !DISubprogram(name: "cleanup_result", scope: !3, file: !3, line: 21, type: !49, scopeLine: 21, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!49 = !DISubroutineType(types: !50)
-!50 = !{null, !13}
-!51 = !DILocation(line: 21, column: 36, scope: !48)
-!52 = !DILocalVariable(name: "A", arg: 1, scope: !53, file: !3, line: 32, type: !6)
-!53 = distinct !DISubprogram(name: "do_work", scope: !3, file: !3, line: 32, type: !54, scopeLine: 32, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!54 = !DISubroutineType(types: !55)
-!55 = !{!11, !6, !6, !13}
-!56 = !DILocation(line: 32, column: 27, scope: !53)
-!57 = !DILocalVariable(name: "B", arg: 2, scope: !53, file: !3, line: 32, type: !6)
-!58 = !DILocation(line: 32, column: 44, scope: !53)
-!59 = !DILocalVariable(name: "out", arg: 3, scope: !53, file: !3, line: 32, type: !13)
-!60 = !DILocation(line: 32, column: 62, scope: !53)
-!61 = !DILocalVariable(name: "len", scope: !53, file: !3, line: 37, type: !62)
-!62 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !11)
-!63 = !DILocation(line: 37, column: 13, scope: !53)
-!64 = !DILocalVariable(name: "AB", scope: !53, file: !3, line: 38, type: !6)
-!65 = !DILocation(line: 38, column: 17, scope: !53)
-!66 = !DILocalVariable(name: "sum", scope: !53, file: !3, line: 54, type: !11)
-!67 = !DILocation(line: 54, column: 7, scope: !53)
-!68 = !DILocalVariable(name: "i", scope: !69, file: !3, line: 55, type: !11)
-!69 = distinct !DILexicalBlock(scope: !53, file: !3, line: 55, column: 3)
-!70 = !DILocation(line: 55, column: 12, scope: !69)
-!71 = !DILocalVariable(name: "size", arg: 1, scope: !72, file: !3, line: 62, type: !11)
-!72 = distinct !DISubprogram(name: "gen_array", scope: !3, file: !3, line: 62, type: !73, scopeLine: 62, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!73 = !DISubroutineType(types: !74)
-!74 = !{!6, !11}
-!75 = !DILocation(line: 62, column: 29, scope: !72)
-!76 = !DILocalVariable(name: "res", scope: !72, file: !3, line: 65, type: !6)
-!77 = !DILocation(line: 65, column: 17, scope: !72)
-!78 = !DILocalVariable(name: "i", scope: !79, file: !3, line: 69, type: !11)
-!79 = distinct !DILexicalBlock(scope: !72, file: !3, line: 69, column: 3)
-!80 = !DILocation(line: 69, column: 12, scope: !79)
-!81 = !DILocalVariable(name: "size", scope: !82, file: !3, line: 77, type: !62)
-!82 = distinct !DISubprogram(name: "caller", scope: !3, file: !3, line: 76, type: !83, scopeLine: 76, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!83 = !DISubroutineType(types: !84)
-!84 = !{!11}
-!85 = !DILocation(line: 77, column: 13, scope: !82)
-!86 = !DILocalVariable(name: "A", scope: !82, file: !3, line: 78, type: !6)
-!87 = !DILocation(line: 78, column: 17, scope: !82)
-!88 = !DILocalVariable(name: "B", scope: !82, file: !3, line: 79, type: !6)
-!89 = !DILocation(line: 79, column: 17, scope: !82)
-!90 = !DILocalVariable(name: "res", scope: !82, file: !3, line: 80, type: !13)
-!91 = !DILocation(line: 80, column: 18, scope: !82)
-!92 = !DILocalVariable(name: "ret", scope: !82, file: !3, line: 81, type: !11)
-!93 = !DILocation(line: 81, column: 7, scope: !82)
-!94 = !DILocalVariable(name: "err", scope: !82, file: !3, line: 83, type: !11)
-!95 = !DILocation(line: 83, column: 7, scope: !82)

diff  --git a/llvm/test/CodeGen/Generic/llc-start-stop.ll b/llvm/test/CodeGen/Generic/llc-start-stop.ll
index b02472473a00c..db5146d4cba5c 100644
--- a/llvm/test/CodeGen/Generic/llc-start-stop.ll
+++ b/llvm/test/CodeGen/Generic/llc-start-stop.ll
@@ -8,9 +8,6 @@
 ; STOP-AFTER: Dominator Tree Construction
 ; STOP-AFTER: Loop Strength Reduction
 ; STOP-AFTER-NEXT: Verify generated machine code
-; STOP-AFTER-NEXT: Lazy Machine Block Frequency Analysis
-; STOP-AFTER-NEXT: Machine Optimization Remark Emitter
-; STOP-AFTER-NEXT: Stack Frame Layout Analysis
 ; STOP-AFTER-NEXT: MIR Printing Pass
 
 ; RUN: llc < %s -debug-pass=Structure -stop-before=loop-reduce -o /dev/null 2>&1 | FileCheck %s -check-prefix=STOP-BEFORE

diff  --git a/llvm/test/CodeGen/PowerPC/O0-pipeline.ll b/llvm/test/CodeGen/PowerPC/O0-pipeline.ll
index 2f37b69bc3ef9..08340b9f95f9a 100644
--- a/llvm/test/CodeGen/PowerPC/O0-pipeline.ll
+++ b/llvm/test/CodeGen/PowerPC/O0-pipeline.ll
@@ -63,9 +63,6 @@
 ; CHECK-NEXT:       StackMap Liveness Analysis
 ; CHECK-NEXT:       Live DEBUG_VALUE analysis
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       PowerPC Expand Atomic
 ; CHECK-NEXT:       PowerPC Branch Selector
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis

diff  --git a/llvm/test/CodeGen/PowerPC/O3-pipeline.ll b/llvm/test/CodeGen/PowerPC/O3-pipeline.ll
index c6445e345de3d..b4419e629bd2a 100644
--- a/llvm/test/CodeGen/PowerPC/O3-pipeline.ll
+++ b/llvm/test/CodeGen/PowerPC/O3-pipeline.ll
@@ -209,9 +209,6 @@
 ; CHECK-NEXT:       StackMap Liveness Analysis
 ; CHECK-NEXT:       Live DEBUG_VALUE analysis
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       PowerPC Expand Atomic
 ; CHECK-NEXT:       PowerPC Branch Selector
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis

diff  --git a/llvm/test/CodeGen/RISCV/O0-pipeline.ll b/llvm/test/CodeGen/RISCV/O0-pipeline.ll
index befa17be8c0c7..beb2ace4b809e 100644
--- a/llvm/test/CodeGen/RISCV/O0-pipeline.ll
+++ b/llvm/test/CodeGen/RISCV/O0-pipeline.ll
@@ -58,9 +58,6 @@
 ; CHECK-NEXT:       StackMap Liveness Analysis
 ; CHECK-NEXT:       Live DEBUG_VALUE analysis
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       RISCV pseudo instruction expansion pass
 ; CHECK-NEXT:       RISCV atomic pseudo instruction expansion pass
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis

diff  --git a/llvm/test/CodeGen/RISCV/O3-pipeline.ll b/llvm/test/CodeGen/RISCV/O3-pipeline.ll
index 5a0f78bc125cd..76173bf8bc92d 100644
--- a/llvm/test/CodeGen/RISCV/O3-pipeline.ll
+++ b/llvm/test/CodeGen/RISCV/O3-pipeline.ll
@@ -169,9 +169,6 @@
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
 ; CHECK-NEXT:     Machine Outliner
 ; CHECK-NEXT:     FunctionPass Manager
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       RISCV pseudo instruction expansion pass
 ; CHECK-NEXT:       RISCV atomic pseudo instruction expansion pass
 ; CHECK-NEXT:       Lazy Machine Block Frequency Analysis

diff  --git a/llvm/test/CodeGen/X86/O0-pipeline.ll b/llvm/test/CodeGen/X86/O0-pipeline.ll
index 3e7bb90d46239..959add648245f 100644
--- a/llvm/test/CodeGen/X86/O0-pipeline.ll
+++ b/llvm/test/CodeGen/X86/O0-pipeline.ll
@@ -73,9 +73,6 @@
 ; CHECK-NEXT:       StackMap Liveness Analysis
 ; CHECK-NEXT:       Live DEBUG_VALUE analysis
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       X86 Speculative Execution Side Effect Suppression
 ; CHECK-NEXT:       X86 Indirect Thunks
 ; CHECK-NEXT:       X86 Return Thunks

diff  --git a/llvm/test/CodeGen/X86/opt-pipeline.ll b/llvm/test/CodeGen/X86/opt-pipeline.ll
index 2ebe9ee0f309d..144c2da7afb29 100644
--- a/llvm/test/CodeGen/X86/opt-pipeline.ll
+++ b/llvm/test/CodeGen/X86/opt-pipeline.ll
@@ -208,9 +208,6 @@
 ; CHECK-NEXT:       StackMap Liveness Analysis
 ; CHECK-NEXT:       Live DEBUG_VALUE analysis
 ; CHECK-NEXT:       Machine Sanitizer Binary Metadata
-; CHECK-NEXT:       Lazy Machine Block Frequency Analysis
-; CHECK-NEXT:       Machine Optimization Remark Emitter
-; CHECK-NEXT:       Stack Frame Layout Analysis
 ; CHECK-NEXT:       X86 Speculative Execution Side Effect Suppression
 ; CHECK-NEXT:       X86 Indirect Thunks
 ; CHECK-NEXT:       X86 Return Thunks

diff  --git a/llvm/test/CodeGen/X86/stack-frame-layout-remarks.ll b/llvm/test/CodeGen/X86/stack-frame-layout-remarks.ll
deleted file mode 100644
index d32a37efcb5a4..0000000000000
--- a/llvm/test/CodeGen/X86/stack-frame-layout-remarks.ll
+++ /dev/null
@@ -1,315 +0,0 @@
-; Test remark output for stack-frame-layout
-
-; ensure basic output works
-; RUN: llc -mcpu=corei7 -O1 -pass-remarks-analysis=stack-frame-layout < %s 2>&1 >/dev/null | FileCheck %s
-
-; check additional slots are displayed when stack is not optimized
-; RUN: llc -mcpu=corei7 -O0 -pass-remarks-analysis=stack-frame-layout < %s 2>&1 >/dev/null | FileCheck %s --check-prefix=NO_COLORING
-
-; check more complex cases
-; RUN: llc %s -pass-remarks-analysis=stack-frame-layout -o /dev/null --march=x86 -mcpu=i386 2>&1 | FileCheck %s --check-prefix=BOTH --check-prefix=DEBUG
-
-; check output without debug info
-; RUN: opt %s -passes=strip -S | llc  -pass-remarks-analysis=stack-frame-layout -o /dev/null --march=x86 -mcpu=i386 2>&1 | FileCheck %s --check-prefix=BOTH --check-prefix=STRIPPED
-
-target triple = "x86_64-unknown-linux-gnu"
-
- at .str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
-declare i32 @printf(ptr, ...)
-
-; CHECK: Function: stackSizeWarning
-; CHECK: Offset: [SP-88], Type: Variable, Align: 16, Size: 80
-; CHECK:    buffer @ frame-diags.c:30
-; NO_COLORING: Offset: [SP-168], Type: Variable, Align: 16, Size: 80
-; CHECK:    buffer2 @ frame-diags.c:33
-define void @stackSizeWarning() {
-entry:
-  %buffer = alloca [80 x i8], align 16
-  %buffer2 = alloca [80 x i8], align 16
-  call void @llvm.dbg.declare(metadata ptr %buffer, metadata !25, metadata !DIExpression()), !dbg !39
-  call void @llvm.dbg.declare(metadata ptr %buffer2, metadata !31, metadata !DIExpression()), !dbg !40
-  ret void
-}
-
-; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
-declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
-
-; BOTH: Function: cleanup_array
-; BOTH-Next:  Offset: [SP+4], Type: Protector, Align: 16, Size: 4
-; DEBUG: a @ dot.c:13
-; STRIPPED-NOT: a @ dot.c:13
-; BOTH:  Offset: [SP-4], Type: Spill, Align: 8, Size: 4
-define void @cleanup_array(ptr %0) #1 {
-  %2 = alloca ptr, align 8
-  store ptr %0, ptr %2, align 8
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !41, metadata !DIExpression()), !dbg !46
-  ret void
-}
-
-; BOTH: Function: cleanup_result
-; BOTH:  Offset: [SP+4], Type: Protector, Align: 16, Size: 4
-; DEBUG: res @ dot.c:21
-; STRIPPED-NOT: res @ dot.c:21
-; BOTH:  Offset: [SP-4], Type: Spill, Align: 8, Size: 4
-define void @cleanup_result(ptr %0) #1 {
-  %2 = alloca ptr, align 8
-  store ptr %0, ptr %2, align 8
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !47, metadata !DIExpression()), !dbg !51
-  ret void
-}
-
-; BOTH: Function: do_work
-; BOTH:  Offset: [SP+12], Type: Variable, Align: 8, Size: 4
-; DEBUG: out @ dot.c:32
-; STRIPPED-NOT: out @ dot.c:32
-; BOTH:  Offset: [SP+8], Type: Variable, Align: 4, Size: 4
-; BOTH:  Offset: [SP+4], Type: Protector, Align: 16, Size: 4
-; DEBUG: A @ dot.c:32
-; STRIPPED-NOT: A @ dot.c:32
-; BOTH:  Offset: [SP-4], Type: Spill, Align: 8, Size: 4
-; BOTH:  Offset: [SP-12], Type: Variable, Align: 8, Size: 4
-; DEBUG: AB @ dot.c:38
-; STRIPPED-NOT: AB @ dot.c:38
-; BOTH:  Offset: [SP-16], Type: Variable, Align: 4, Size: 4
-; DEBUG: i @ dot.c:55
-; STRIPPED-NOT: i @ dot.c:55
-; BOTH:  Offset: [SP-20], Type: Variable, Align: 8, Size: 4
-; DEBUG: B @ dot.c:32
-; STRIPPED-NOT: B @ dot.c:32
-; BOTH:  Offset: [SP-24], Type: Variable, Align: 4, Size: 4
-; DEBUG: len @ dot.c:37
-; STRIPPED-NOT: len @ dot.c:37
-; BOTH:  Offset: [SP-28], Type: Variable, Align: 4, Size: 4
-; BOTH:  Offset: [SP-32], Type: Variable, Align: 4, Size: 4
-; DEBUG: sum @ dot.c:54
-; STRIPPED-NOT: sum @ dot.c:54
-define i32 @do_work(ptr %0, ptr %1, ptr %2) #2 {
-  %4 = alloca i32, align 4
-  %5 = alloca ptr, align 8
-  %6 = alloca ptr, align 8
-  %7 = alloca ptr, align 8
-  %8 = alloca i32, align 4
-  %9 = alloca ptr, align 8
-  %10 = alloca i32, align 4
-  %11 = alloca i32, align 4
-  store ptr %0, ptr %5, align 8
-  call void @llvm.dbg.declare(metadata ptr %5, metadata !52, metadata !DIExpression()), !dbg !56
-  call void @llvm.dbg.declare(metadata ptr %6, metadata !57, metadata !DIExpression()), !dbg !58
-  store ptr %2, ptr %7, align 8
-  call void @llvm.dbg.declare(metadata ptr %7, metadata !59, metadata !DIExpression()), !dbg !60
-  call void @llvm.dbg.declare(metadata ptr %8, metadata !61, metadata !DIExpression()), !dbg !63
-  call void @llvm.dbg.declare(metadata ptr %9, metadata !64, metadata !DIExpression()), !dbg !65
-  store ptr null, ptr %9, align 8
-  store ptr null, ptr null, align 8
-  store i32 0, ptr %9, align 8
-  %12 = load i32, ptr %8, align 4
-  store i32 %12, ptr null, align 8
-  call void @llvm.dbg.declare(metadata ptr %10, metadata !66, metadata !DIExpression()), !dbg !67
-  call void @llvm.dbg.declare(metadata ptr %11, metadata !68, metadata !DIExpression()), !dbg !70
-  store i32 0, ptr %11, align 4
-  br label %13
-
-13:                                               ; preds = %16, %3
-  %14 = load i32, ptr %11, align 4
-  %15 = icmp slt i32 %14, 0
-  br i1 %15, label %16, label %18
-
-16:                                               ; preds = %13
-  %17 = load i32, ptr %6, align 4
-  store i32 %17, ptr null, align 4
-  br label %13
-
-18:                                               ; preds = %13
-  store i32 0, ptr %4, align 4
-  ret i32 0
-}
-
-; BOTH: Function: gen_array
-; BOTH:  Offset: [SP+4], Type: Protector, Align: 16, Size: 4
-; DEBUG: size @ dot.c:62
-; STRIPPED-NOT: size @ dot.c:62
-; BOTH:  Offset: [SP-4], Type: Spill, Align: 8, Size: 4
-; BOTH:  Offset: [SP-12], Type: Variable, Align: 8, Size: 4
-; DEBUG: res @ dot.c:65
-; STRIPPED-NOT: res @ dot.c:65
-; BOTH:  Offset: [SP-16], Type: Variable, Align: 4, Size: 4
-; DEBUG: i @ dot.c:69
-; STRIPPED-NOT: i @ dot.c:69
-; BOTH:  Offset: [SP-20], Type: Variable, Align: 8, Size: 4
-define ptr @gen_array(i32 %0) #1 {
-  %2 = alloca ptr, align 8
-  %3 = alloca i32, align 4
-  %4 = alloca ptr, align 8
-  %5 = alloca i32, align 4
-  store i32 %0, ptr %3, align 4
-  call void @llvm.dbg.declare(metadata ptr %3, metadata !71, metadata !DIExpression()), !dbg !75
-  call void @llvm.dbg.declare(metadata ptr %4, metadata !76, metadata !DIExpression()), !dbg !77
-  store ptr null, ptr %4, align 8
-  call void @llvm.dbg.declare(metadata ptr %5, metadata !78, metadata !DIExpression()), !dbg !80
-  store i32 0, ptr %5, align 4
-  ret ptr null
-}
-
-; BOTH: Function: caller
-; BOTH:  Offset: [SP-4], Type: Spill, Align: 8, Size: 4
-; BOTH:  Offset: [SP-12], Type: Variable, Align: 8, Size: 4
-; DEBUG: res @ dot.c:80
-; STRIPPED-NOT: res @ dot.c:80
-; BOTH:  Offset: [SP-20], Type: Variable, Align: 8, Size: 4
-; DEBUG: B @ dot.c:79
-; STRIPPED-NOT: B @ dot.c:79
-; BOTH:  Offset: [SP-28], Type: Variable, Align: 8, Size: 4
-; DEBUG: A @ dot.c:78
-; STRIPPED-NOT: A @ dot.c:78
-; BOTH:  Offset: [SP-32], Type: Variable, Align: 4, Size: 4
-; DEBUG: ret @ dot.c:81
-; STRIPPED-NOT: ret @ dot.c:81
-; BOTH:  Offset: [SP-36], Type: Variable, Align: 4, Size: 4
-; BOTH:  Offset: [SP-40], Type: Variable, Align: 4, Size: 4
-; DEBUG: err @ dot.c:83
-; STRIPPED-NOT: err @ dot.c:83
-; BOTH:  Offset: [SP-44], Type: Variable, Align: 4, Size: 4
-; DEBUG:  size @ dot.c:77
-; STRIPPED-NOT: size @ dot.c:77
-define i32 @caller() #1 {
-  %1 = alloca i32, align 4
-  %2 = alloca i32, align 4
-  %3 = alloca ptr, align 8
-  %4 = alloca ptr, align 8
-  %5 = alloca ptr, align 8
-  %6 = alloca i32, align 4
-  %7 = alloca i32, align 4
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !81, metadata !DIExpression()), !dbg !85
-  call void @llvm.dbg.declare(metadata ptr %3, metadata !86, metadata !DIExpression()), !dbg !87
-  call void @llvm.dbg.declare(metadata ptr %4, metadata !88, metadata !DIExpression()), !dbg !89
-  store ptr null, ptr %4, align 8
-  call void @llvm.dbg.declare(metadata ptr %5, metadata !90, metadata !DIExpression()), !dbg !91
-  call void @llvm.dbg.declare(metadata ptr %6, metadata !92, metadata !DIExpression()), !dbg !93
-  call void @llvm.dbg.declare(metadata ptr %7, metadata !94, metadata !DIExpression()), !dbg !95
-  %8 = call i32 @do_work(ptr %3, ptr null, ptr null)
-  store i32 0, ptr %6, align 4
-  store i32 0, ptr %1, align 4
-  call void @cleanup_result(ptr %5)
-  ret i32 0
-}
-
-; test29b: An array of [5 x i8] and a requested ssp-buffer-size of 5.
-; Requires protector.
-; Function Attrs: ssp stack-protector-buffer-size=5
-; BOTH: Function: test29b
-; BOTH:  Offset: [SP-4], Type: Spill, Align: 8, Size: 4
-; BOTH:  Offset: [SP-8], Type: Protector, Align: 4, Size: 4
-; BOTH:  Offset: [SP-13], Type: Variable, Align: 1, Size: 5
-define i32 @test29b() #2 {
-entry:
-  %test = alloca [5 x i8], align 1
-  %call = call i32 (ptr, ...) @printf(ptr @.str, ptr %test)
-  ret i32 %call
-}
-
-; uselistorder directives
-uselistorder ptr @llvm.dbg.declare, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 18 }
-
-attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
-attributes #1 = { "frame-pointer"="all" }
-attributes #2 = { ssp "stack-protector-buffer-size"="5" "frame-pointer"="all" }
-
-!llvm.dbg.cu = !{!0, !2}
-!llvm.module.flags = !{!18, !19, !20, !21, !22, !23, !24}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
-!1 = !DIFile(filename: "frame-diags.c", directory: "")
-!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: !4, splitDebugInlining: false, nameTableKind: None)
-!3 = !DIFile(filename: "dot.c", directory: "")
-!4 = !{!5, !6, !10, !13}
-!5 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)
-!6 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !7, size: 64)
-!7 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Array", file: !3, line: 3, size: 128, elements: !8)
-!8 = !{!9, !12}
-!9 = !DIDerivedType(tag: DW_TAG_member, name: "data", scope: !7, file: !3, line: 4, baseType: !10, size: 64)
-!10 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64)
-!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!12 = !DIDerivedType(tag: DW_TAG_member, name: "size", scope: !7, file: !3, line: 5, baseType: !11, size: 32, offset: 64)
-!13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64)
-!14 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Result", file: !3, line: 8, size: 128, elements: !15)
-!15 = !{!16, !17}
-!16 = !DIDerivedType(tag: DW_TAG_member, name: "data", scope: !14, file: !3, line: 9, baseType: !6, size: 64)
-!17 = !DIDerivedType(tag: DW_TAG_member, name: "sum", scope: !14, file: !3, line: 10, baseType: !11, size: 32, offset: 64)
-!18 = !{i32 7, !"Dwarf Version", i32 5}
-!19 = !{i32 2, !"Debug Info Version", i32 3}
-!20 = !{i32 1, !"wchar_size", i32 4}
-!21 = !{i32 8, !"PIC Level", i32 2}
-!22 = !{i32 7, !"PIE Level", i32 2}
-!23 = !{i32 7, !"uwtable", i32 2}
-!24 = !{i32 7, !"frame-pointer", i32 2}
-!25 = !DILocalVariable(name: "buffer", scope: !26, file: !1, line: 30, type: !32)
-!26 = distinct !DILexicalBlock(scope: !27, file: !1, line: 29, column: 3)
-!27 = distinct !DISubprogram(name: "stackSizeWarning", scope: !1, file: !1, line: 28, type: !28, scopeLine: 28, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !30)
-!28 = !DISubroutineType(types: !29)
-!29 = !{null}
-!30 = !{!25, !31, !36, !37}
-!31 = !DILocalVariable(name: "buffer2", scope: !27, file: !1, line: 33, type: !32)
-!32 = !DICompositeType(tag: DW_TAG_array_type, baseType: !33, size: 640, elements: !34)
-!33 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
-!34 = !{!35}
-!35 = !DISubrange(count: 80)
-!36 = !DILocalVariable(name: "a", scope: !27, file: !1, line: 34, type: !11)
-!37 = !DILocalVariable(name: "b", scope: !27, file: !1, line: 35, type: !38)
-!38 = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
-!39 = !DILocation(line: 30, column: 10, scope: !26)
-!40 = !DILocation(line: 33, column: 8, scope: !27)
-!41 = !DILocalVariable(name: "a", arg: 1, scope: !42, file: !3, line: 13, type: !6)
-!42 = distinct !DISubprogram(name: "cleanup_array", scope: !3, file: !3, line: 13, type: !43, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!43 = !DISubroutineType(types: !44)
-!44 = !{null, !6}
-!45 = !{}
-!46 = !DILocation(line: 13, column: 34, scope: !42)
-!47 = !DILocalVariable(name: "res", arg: 1, scope: !48, file: !3, line: 21, type: !13)
-!48 = distinct !DISubprogram(name: "cleanup_result", scope: !3, file: !3, line: 21, type: !49, scopeLine: 21, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!49 = !DISubroutineType(types: !50)
-!50 = !{null, !13}
-!51 = !DILocation(line: 21, column: 36, scope: !48)
-!52 = !DILocalVariable(name: "A", arg: 1, scope: !53, file: !3, line: 32, type: !6)
-!53 = distinct !DISubprogram(name: "do_work", scope: !3, file: !3, line: 32, type: !54, scopeLine: 32, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!54 = !DISubroutineType(types: !55)
-!55 = !{!11, !6, !6, !13}
-!56 = !DILocation(line: 32, column: 27, scope: !53)
-!57 = !DILocalVariable(name: "B", arg: 2, scope: !53, file: !3, line: 32, type: !6)
-!58 = !DILocation(line: 32, column: 44, scope: !53)
-!59 = !DILocalVariable(name: "out", arg: 3, scope: !53, file: !3, line: 32, type: !13)
-!60 = !DILocation(line: 32, column: 62, scope: !53)
-!61 = !DILocalVariable(name: "len", scope: !53, file: !3, line: 37, type: !62)
-!62 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !11)
-!63 = !DILocation(line: 37, column: 13, scope: !53)
-!64 = !DILocalVariable(name: "AB", scope: !53, file: !3, line: 38, type: !6)
-!65 = !DILocation(line: 38, column: 17, scope: !53)
-!66 = !DILocalVariable(name: "sum", scope: !53, file: !3, line: 54, type: !11)
-!67 = !DILocation(line: 54, column: 7, scope: !53)
-!68 = !DILocalVariable(name: "i", scope: !69, file: !3, line: 55, type: !11)
-!69 = distinct !DILexicalBlock(scope: !53, file: !3, line: 55, column: 3)
-!70 = !DILocation(line: 55, column: 12, scope: !69)
-!71 = !DILocalVariable(name: "size", arg: 1, scope: !72, file: !3, line: 62, type: !11)
-!72 = distinct !DISubprogram(name: "gen_array", scope: !3, file: !3, line: 62, type: !73, scopeLine: 62, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!73 = !DISubroutineType(types: !74)
-!74 = !{!6, !11}
-!75 = !DILocation(line: 62, column: 29, scope: !72)
-!76 = !DILocalVariable(name: "res", scope: !72, file: !3, line: 65, type: !6)
-!77 = !DILocation(line: 65, column: 17, scope: !72)
-!78 = !DILocalVariable(name: "i", scope: !79, file: !3, line: 69, type: !11)
-!79 = distinct !DILexicalBlock(scope: !72, file: !3, line: 69, column: 3)
-!80 = !DILocation(line: 69, column: 12, scope: !79)
-!81 = !DILocalVariable(name: "size", scope: !82, file: !3, line: 77, type: !62)
-!82 = distinct !DISubprogram(name: "caller", scope: !3, file: !3, line: 76, type: !83, scopeLine: 76, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !45)
-!83 = !DISubroutineType(types: !84)
-!84 = !{!11}
-!85 = !DILocation(line: 77, column: 13, scope: !82)
-!86 = !DILocalVariable(name: "A", scope: !82, file: !3, line: 78, type: !6)
-!87 = !DILocation(line: 78, column: 17, scope: !82)
-!88 = !DILocalVariable(name: "B", scope: !82, file: !3, line: 79, type: !6)
-!89 = !DILocation(line: 79, column: 17, scope: !82)
-!90 = !DILocalVariable(name: "res", scope: !82, file: !3, line: 80, type: !13)
-!91 = !DILocation(line: 80, column: 18, scope: !82)
-!92 = !DILocalVariable(name: "ret", scope: !82, file: !3, line: 81, type: !11)
-!93 = !DILocation(line: 81, column: 7, scope: !82)
-!94 = !DILocalVariable(name: "err", scope: !82, file: !3, line: 83, type: !11)
-!95 = !DILocation(line: 83, column: 7, scope: !82)


        


More information about the cfe-commits mailing list