//===- X86LegalizerInfo.h ------------------------------------------*- C++
//-*-==//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
/// \file
/// This file declares the targeting of the Machinelegalizer class for X86.
/// \todo This should be generated by TableGen.
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H
#define LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H

#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"

namespace llvm {

class X86Subtarget;
class X86TargetMachine;

/// This class provides the information for the target register banks.
class X86LegalizerInfo : public LegalizerInfo {
private:
  /// Keep a reference to the X86Subtarget around so that we can
  /// make the right decision when generating code for different targets.
  const X86Subtarget &Subtarget;
  const X86TargetMachine &TM;

public:
  X86LegalizerInfo(const X86Subtarget &STI, const X86TargetMachine &TM);

private:
  void setLegalizerInfo32bit();
  void setLegalizerInfo64bit();
  void setLegalizerInfoSSE1();
  void setLegalizerInfoSSE2();
  void setLegalizerInfoSSE41();
  void setLegalizerInfoAVX();
  void setLegalizerInfoAVX2();
  void setLegalizerInfoAVX512();
  void setLegalizerInfoAVX512DQ();
  void setLegalizerInfoAVX512BW();
};
} // namespace llvm
#endif
