Path: blob/main/contrib/llvm-project/llvm/lib/Target/ARM/ARMHazardRecognizer.h
35294 views
//===-- ARMHazardRecognizer.h - ARM Hazard Recognizers ----------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file defines hazard recognizers for scheduling ARM functions.9//10//===----------------------------------------------------------------------===//1112#ifndef LLVM_LIB_TARGET_ARM_ARMHAZARDRECOGNIZER_H13#define LLVM_LIB_TARGET_ARM_ARMHAZARDRECOGNIZER_H1415#include "ARMBaseInstrInfo.h"16#include "llvm/ADT/BitmaskEnum.h"17#include "llvm/ADT/SmallVector.h"18#include "llvm/CodeGen/ScheduleHazardRecognizer.h"19#include "llvm/Support/DataTypes.h"20#include <initializer_list>2122namespace llvm {2324class DataLayout;25class MachineFunction;26class MachineInstr;27class ScheduleDAG;2829// Hazards related to FP MLx instructions30class ARMHazardRecognizerFPMLx : public ScheduleHazardRecognizer {31MachineInstr *LastMI = nullptr;32unsigned FpMLxStalls = 0;3334public:35ARMHazardRecognizerFPMLx() { MaxLookAhead = 1; }3637HazardType getHazardType(SUnit *SU, int Stalls) override;38void Reset() override;39void EmitInstruction(SUnit *SU) override;40void AdvanceCycle() override;41void RecedeCycle() override;42};4344// Hazards related to bank conflicts45class ARMBankConflictHazardRecognizer : public ScheduleHazardRecognizer {46SmallVector<MachineInstr *, 8> Accesses;47const MachineFunction &MF;48const DataLayout &DL;49int64_t DataMask;50bool AssumeITCMBankConflict;5152public:53ARMBankConflictHazardRecognizer(const ScheduleDAG *DAG, int64_t DDM,54bool ABC);55HazardType getHazardType(SUnit *SU, int Stalls) override;56void Reset() override;57void EmitInstruction(SUnit *SU) override;58void AdvanceCycle() override;59void RecedeCycle() override;6061private:62inline HazardType CheckOffsets(unsigned O0, unsigned O1);63};6465} // end namespace llvm6667#endif686970