[llvm] [DirectX] Flatten arrays (PR #114332)

Farzon Lotfi via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 31 09:56:24 PDT 2024


================
@@ -0,0 +1,25 @@
+//===- DXILFlattenArrays.h - Perform flattening of DXIL Arrays -*- C++ -*-===//
+//
+// 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
+//
+//===---------------------------------------------------------------------===//
+
+#ifndef LLVM_TARGET_DIRECTX_DXILFLATTENARRAYS_H
+#define LLVM_TARGET_DIRECTX_DXILFLATTENARRAYS_H
+
+#include "DXILResource.h"
+#include "llvm/IR/PassManager.h"
+#include "llvm/Pass.h"
+
+namespace llvm {
+
+/// A pass that transforms multidimensional arrays into one-dimensional arrays.
+class DXILFlattenArrays : public PassInfoMixin<DXILFlattenArrays> {
+public:
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
----------------
farzonl wrote:

Analysis managers are used to extract specific analysis from a module or function.  Functions also have analysis managers. A common thing might be to do something like `FAM.getResult<llvm::LoopAnalysis>(F);` which would give you a `llvm::LoopInfo` you could iterate over if say you wanted to do something like back edge detection.

I have only found a few cases where I had to personally use the module analysis manager. Most of the time the `FunctionAnalysisManager`  tends to be more useful to what I need so I would get it by doing:

```cpp
llvm::FunctionAnalysisManager &FAM =
      MAM.getResult<llvm::FunctionAnalysisManagerModuleProxy>(M).getManager();
```

In the case of this pass and Analysis manager  wasn't needed at all.

https://github.com/llvm/llvm-project/pull/114332


More information about the llvm-commits mailing list