1 //===- X86LegalizerInfo.h ------------------------------------------*- C++ 2 //-*-==// 3 // 4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 // See https://llvm.org/LICENSE.txt for license information. 6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 // 8 //===----------------------------------------------------------------------===// 9 /// \file 10 /// This file declares the targeting of the Machinelegalizer class for X86. 11 /// \todo This should be generated by TableGen. 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H 15 #define LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H 16 17 #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" 18 19 namespace llvm { 20 21 class X86Subtarget; 22 class X86TargetMachine; 23 24 /// This class provides the information for the target register banks. 25 class X86LegalizerInfo : public LegalizerInfo { 26 private: 27 /// Keep a reference to the X86Subtarget around so that we can 28 /// make the right decision when generating code for different targets. 29 const X86Subtarget &Subtarget; 30 const X86TargetMachine &TM; 31 32 public: 33 X86LegalizerInfo(const X86Subtarget &STI, const X86TargetMachine &TM); 34 35 bool legalizeIntrinsic(LegalizerHelper &Helper, 36 MachineInstr &MI) const override; 37 38 private: 39 void setLegalizerInfo32bit(); 40 void setLegalizerInfo64bit(); 41 void setLegalizerInfoSSE1(); 42 void setLegalizerInfoSSE2(); 43 void setLegalizerInfoSSE41(); 44 void setLegalizerInfoAVX(); 45 void setLegalizerInfoAVX2(); 46 void setLegalizerInfoAVX512(); 47 void setLegalizerInfoAVX512DQ(); 48 void setLegalizerInfoAVX512BW(); 49 }; 50 } // namespace llvm 51 #endif 52