Home | History | Annotate | Download | only in CodeGen
      1 //===-- llvm/CodeGen/MachineCombinerPattern.h - Instruction pattern supported by
      2 // combiner  ------*- C++ -*-===//
      3 //
      4 //                     The LLVM Compiler Infrastructure
      5 //
      6 // This file is distributed under the University of Illinois Open Source
      7 // License. See LICENSE.TXT for details.
      8 //
      9 //===----------------------------------------------------------------------===//
     10 //
     11 // This file defines instruction pattern supported by combiner
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef LLVM_CODEGEN_MACHINECOMBINERPATTERN_H
     16 #define LLVM_CODEGEN_MACHINECOMBINERPATTERN_H
     17 
     18 namespace llvm {
     19 
     20 /// These are instruction patterns matched by the machine combiner pass.
     21 enum class MachineCombinerPattern {
     22   // These are commutative variants for reassociating a computation chain. See
     23   // the comments before getMachineCombinerPatterns() in TargetInstrInfo.cpp.
     24   REASSOC_AX_BY,
     25   REASSOC_AX_YB,
     26   REASSOC_XA_BY,
     27   REASSOC_XA_YB,
     28 
     29   // These are multiply-add patterns matched by the AArch64 machine combiner.
     30   MULADDW_OP1,
     31   MULADDW_OP2,
     32   MULSUBW_OP1,
     33   MULSUBW_OP2,
     34   MULADDWI_OP1,
     35   MULSUBWI_OP1,
     36   MULADDX_OP1,
     37   MULADDX_OP2,
     38   MULSUBX_OP1,
     39   MULSUBX_OP2,
     40   MULADDXI_OP1,
     41   MULSUBXI_OP1,
     42   // Floating Point
     43   FMULADDS_OP1,
     44   FMULADDS_OP2,
     45   FMULSUBS_OP1,
     46   FMULSUBS_OP2,
     47   FMULADDD_OP1,
     48   FMULADDD_OP2,
     49   FMULSUBD_OP1,
     50   FMULSUBD_OP2,
     51   FMLAv1i32_indexed_OP1,
     52   FMLAv1i32_indexed_OP2,
     53   FMLAv1i64_indexed_OP1,
     54   FMLAv1i64_indexed_OP2,
     55   FMLAv2f32_OP2,
     56   FMLAv2f32_OP1,
     57   FMLAv2f64_OP1,
     58   FMLAv2f64_OP2,
     59   FMLAv2i32_indexed_OP1,
     60   FMLAv2i32_indexed_OP2,
     61   FMLAv2i64_indexed_OP1,
     62   FMLAv2i64_indexed_OP2,
     63   FMLAv4f32_OP1,
     64   FMLAv4f32_OP2,
     65   FMLAv4i32_indexed_OP1,
     66   FMLAv4i32_indexed_OP2,
     67   FMLSv1i32_indexed_OP2,
     68   FMLSv1i64_indexed_OP2,
     69   FMLSv2i32_indexed_OP2,
     70   FMLSv2i64_indexed_OP2,
     71   FMLSv2f32_OP2,
     72   FMLSv2f64_OP2,
     73   FMLSv4i32_indexed_OP2,
     74   FMLSv4f32_OP2
     75 };
     76 
     77 } // end namespace llvm
     78 
     79 #endif
     80