Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:28

0001 //===- ComplexDeinterleavingPass.h - Complex Deinterleaving Pass *- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This pass implements generation of target-specific intrinsics to support
0010 // handling of complex number arithmetic and deinterleaving.
0011 //
0012 //===----------------------------------------------------------------------===//
0013 
0014 #ifndef LLVM_CODEGEN_COMPLEXDEINTERLEAVING_H
0015 #define LLVM_CODEGEN_COMPLEXDEINTERLEAVING_H
0016 
0017 #include "llvm/IR/PassManager.h"
0018 
0019 namespace llvm {
0020 
0021 class Function;
0022 class TargetMachine;
0023 
0024 struct ComplexDeinterleavingPass
0025     : public PassInfoMixin<ComplexDeinterleavingPass> {
0026 private:
0027   TargetMachine *TM;
0028 
0029 public:
0030   ComplexDeinterleavingPass(TargetMachine *TM) : TM(TM) {}
0031 
0032   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
0033 };
0034 
0035 enum class ComplexDeinterleavingOperation {
0036   CAdd,
0037   CMulPartial,
0038   CDot,
0039   // The following 'operations' are used to represent internal states. Backends
0040   // are not expected to try and support these in any capacity.
0041   Deinterleave,
0042   Splat,
0043   Symmetric,
0044   ReductionPHI,
0045   ReductionOperation,
0046   ReductionSelect,
0047   ReductionSingle
0048 };
0049 
0050 enum class ComplexDeinterleavingRotation {
0051   Rotation_0 = 0,
0052   Rotation_90 = 1,
0053   Rotation_180 = 2,
0054   Rotation_270 = 3,
0055 };
0056 
0057 } // namespace llvm
0058 
0059 #endif // LLVM_CODEGEN_COMPLEXDEINTERLEAVING_H