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