xref: /netbsd-src/external/apache2/llvm/dist/llvm/lib/Target/X86/X86LegalizerInfo.h (revision 82d56013d7b633d116a93943de88e08335357a7c)
17330f729Sjoerg //===- X86LegalizerInfo.h ------------------------------------------*- C++
27330f729Sjoerg //-*-==//
37330f729Sjoerg //
47330f729Sjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
57330f729Sjoerg // See https://llvm.org/LICENSE.txt for license information.
67330f729Sjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
77330f729Sjoerg //
87330f729Sjoerg //===----------------------------------------------------------------------===//
97330f729Sjoerg /// \file
107330f729Sjoerg /// This file declares the targeting of the Machinelegalizer class for X86.
117330f729Sjoerg /// \todo This should be generated by TableGen.
127330f729Sjoerg //===----------------------------------------------------------------------===//
137330f729Sjoerg 
147330f729Sjoerg #ifndef LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H
157330f729Sjoerg #define LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H
167330f729Sjoerg 
177330f729Sjoerg #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
187330f729Sjoerg 
197330f729Sjoerg namespace llvm {
207330f729Sjoerg 
217330f729Sjoerg class X86Subtarget;
227330f729Sjoerg class X86TargetMachine;
237330f729Sjoerg 
247330f729Sjoerg /// This class provides the information for the target register banks.
257330f729Sjoerg class X86LegalizerInfo : public LegalizerInfo {
267330f729Sjoerg private:
277330f729Sjoerg   /// Keep a reference to the X86Subtarget around so that we can
287330f729Sjoerg   /// make the right decision when generating code for different targets.
297330f729Sjoerg   const X86Subtarget &Subtarget;
307330f729Sjoerg   const X86TargetMachine &TM;
317330f729Sjoerg 
327330f729Sjoerg public:
337330f729Sjoerg   X86LegalizerInfo(const X86Subtarget &STI, const X86TargetMachine &TM);
347330f729Sjoerg 
35*82d56013Sjoerg   bool legalizeIntrinsic(LegalizerHelper &Helper,
36*82d56013Sjoerg                          MachineInstr &MI) const override;
377330f729Sjoerg 
387330f729Sjoerg private:
397330f729Sjoerg   void setLegalizerInfo32bit();
407330f729Sjoerg   void setLegalizerInfo64bit();
417330f729Sjoerg   void setLegalizerInfoSSE1();
427330f729Sjoerg   void setLegalizerInfoSSE2();
437330f729Sjoerg   void setLegalizerInfoSSE41();
447330f729Sjoerg   void setLegalizerInfoAVX();
457330f729Sjoerg   void setLegalizerInfoAVX2();
467330f729Sjoerg   void setLegalizerInfoAVX512();
477330f729Sjoerg   void setLegalizerInfoAVX512DQ();
487330f729Sjoerg   void setLegalizerInfoAVX512BW();
497330f729Sjoerg };
507330f729Sjoerg } // namespace llvm
517330f729Sjoerg #endif
52