mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
c8c5cd6011
This adds a MultiHazardRecognizer and starts to make use of it in the ARM backend. The idea of the class is to allow multiple independent hazard recognizers to be added to a single base MultiHazardRecognizer, allowing them to all work in parallel without requiring them to be chained into subclasses. They can then be added or not based on cpu or subtarget features, which will become useful in the ARM backend once more hazard recognizers are being used for various things. This also renames ARMHazardRecognizer to ARMHazardRecognizerFPMLx in the process, to more clearly explain what that recognizer is designed for. Differential Revision: https://reviews.llvm.org/D72939
38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
//===-- ARMHazardRecognizer.h - ARM Hazard Recognizers ----------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines hazard recognizers for scheduling ARM functions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_ARM_ARMHAZARDRECOGNIZER_H
|
|
#define LLVM_LIB_TARGET_ARM_ARMHAZARDRECOGNIZER_H
|
|
|
|
#include "llvm/CodeGen/ScheduleHazardRecognizer.h"
|
|
|
|
namespace llvm {
|
|
|
|
// Hazards related to FP MLx instructions
|
|
class ARMHazardRecognizerFPMLx : public ScheduleHazardRecognizer {
|
|
MachineInstr *LastMI = nullptr;
|
|
unsigned FpMLxStalls = 0;
|
|
|
|
public:
|
|
ARMHazardRecognizerFPMLx() : ScheduleHazardRecognizer() { MaxLookAhead = 1; }
|
|
|
|
HazardType getHazardType(SUnit *SU, int Stalls) override;
|
|
void Reset() override;
|
|
void EmitInstruction(SUnit *SU) override;
|
|
void AdvanceCycle() override;
|
|
void RecedeCycle() override;
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|