xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/X86/GISel/X86LegalizerInfo.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
15f757f3fSDimitry Andric //===- X86LegalizerInfo.h ------------------------------------------*- C++
25f757f3fSDimitry Andric //-*-==//
35f757f3fSDimitry Andric //
45f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
55f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
65f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
75f757f3fSDimitry Andric //
85f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
95f757f3fSDimitry Andric /// \file
105f757f3fSDimitry Andric /// This file declares the targeting of the Machinelegalizer class for X86.
115f757f3fSDimitry Andric /// \todo This should be generated by TableGen.
125f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
135f757f3fSDimitry Andric 
145f757f3fSDimitry Andric #ifndef LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H
155f757f3fSDimitry Andric #define LLVM_LIB_TARGET_X86_X86MACHINELEGALIZER_H
165f757f3fSDimitry Andric 
175f757f3fSDimitry Andric #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
185f757f3fSDimitry Andric 
195f757f3fSDimitry Andric namespace llvm {
205f757f3fSDimitry Andric 
215f757f3fSDimitry Andric class X86Subtarget;
225f757f3fSDimitry Andric class X86TargetMachine;
235f757f3fSDimitry Andric 
245f757f3fSDimitry Andric class X86LegalizerInfo : public LegalizerInfo {
255f757f3fSDimitry Andric private:
265f757f3fSDimitry Andric   /// Keep a reference to the X86Subtarget around so that we can
275f757f3fSDimitry Andric   /// make the right decision when generating code for different targets.
285f757f3fSDimitry Andric   const X86Subtarget &Subtarget;
295f757f3fSDimitry Andric 
305f757f3fSDimitry Andric public:
315f757f3fSDimitry Andric   X86LegalizerInfo(const X86Subtarget &STI, const X86TargetMachine &TM);
325f757f3fSDimitry Andric 
33*0fca6ea1SDimitry Andric   bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI,
34*0fca6ea1SDimitry Andric                       LostDebugLocObserver &LocObserver) const override;
35*0fca6ea1SDimitry Andric 
365f757f3fSDimitry Andric   bool legalizeIntrinsic(LegalizerHelper &Helper,
375f757f3fSDimitry Andric                          MachineInstr &MI) const override;
38*0fca6ea1SDimitry Andric 
39*0fca6ea1SDimitry Andric private:
40*0fca6ea1SDimitry Andric   bool legalizeBuildVector(MachineInstr &MI, MachineRegisterInfo &MRI,
41*0fca6ea1SDimitry Andric                            LegalizerHelper &Helper) const;
425f757f3fSDimitry Andric };
435f757f3fSDimitry Andric } // namespace llvm
445f757f3fSDimitry Andric #endif
45