CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
203 lines
7.0 KiB
TableGen
203 lines
7.0 KiB
TableGen
//=- AArch64.td - Describe the AArch64 Target Machine --------*- tablegen -*-=//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Target-independent interfaces which we are implementing.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Subtarget features.
|
|
//===----------------------------------------------------------------------===//
|
|
include "AArch64Features.td"
|
|
include "AArch64FMV.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Register File Description
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "AArch64RegisterInfo.td"
|
|
include "AArch64RegisterBanks.td"
|
|
include "AArch64CallingConvention.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Instruction Descriptions
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "AArch64Schedule.td"
|
|
include "AArch64InstrInfo.td"
|
|
include "AArch64SchedPredicates.td"
|
|
include "AArch64SchedPredExynos.td"
|
|
include "AArch64SchedPredNeoverse.td"
|
|
include "AArch64Combine.td"
|
|
|
|
defm : RemapAllTargetPseudoPointerOperands<GPR64sp>;
|
|
|
|
def AArch64InstrInfo : InstrInfo;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Named operands for MRS/MSR/TLBI/...
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "AArch64SystemOperands.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// AArch64 Processors supported.
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Unsupported features to disable for scheduling models
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
class AArch64Unsupported { list<Predicate> F; }
|
|
|
|
let F = [HasSVE2p1, HasSVE2p1_or_SME2, HasSVE2p1_or_StreamingSME2, HasSVE2p1_or_SME2p1] in
|
|
def SVE2p1Unsupported : AArch64Unsupported;
|
|
|
|
def SVE2Unsupported : AArch64Unsupported {
|
|
let F = !listconcat([HasSVE2, HasSVE2_or_SME, HasNonStreamingSVE2_or_SME2, HasSSVE_FP8FMA, HasSMEF8F16,
|
|
HasSSVE_FP8DOT2, HasSSVE_FP8DOT4,
|
|
HasSMEF8F32, HasSVEAES, HasSVESHA3, HasSVESM4, HasSVEBitPerm,
|
|
HasSVEB16B16],
|
|
SVE2p1Unsupported.F);
|
|
}
|
|
|
|
def SVEUnsupported : AArch64Unsupported {
|
|
let F = !listconcat([HasSVE, HasSVE_or_SME],
|
|
SVE2Unsupported.F);
|
|
}
|
|
|
|
def SME2p3Unsupported : AArch64Unsupported {
|
|
let F = [HasSVE2p3_or_SME2p3, HasSVE_B16MM];
|
|
}
|
|
|
|
def SME2p2Unsupported : AArch64Unsupported {
|
|
let F = !listconcat([HasSME2p2, HasSVE2p2_or_SME2p2,
|
|
HasNonStreamingSVE_or_SME2p2,
|
|
HasNonStreamingSVE2p2_or_SME2p2],
|
|
SME2p3Unsupported.F);
|
|
}
|
|
|
|
def SME2p1Unsupported : AArch64Unsupported {
|
|
let F = !listconcat([HasSME2p1, HasSVE2p1_or_SME2p1,
|
|
HasSME_MOP4, HasSME_TMOP, HasNonStreamingSVE_or_SSVE_FEXPA,
|
|
HasNonStreamingSVE_or_SSVE_BitPerm],
|
|
SME2p2Unsupported.F);
|
|
}
|
|
|
|
def SME2Unsupported : AArch64Unsupported {
|
|
let F = !listconcat([HasSME2, HasNonStreamingSVE2_or_SME2, HasSVE2p1_or_SME2, HasSSVE_FP8FMA,
|
|
HasSSVE_FP8DOT2, HasSSVE_FP8DOT4,
|
|
HasSMEF8F16, HasSMEF8F32, HasSMEF16F16_or_SMEF8F16, HasSMEB16B16,
|
|
HasNonStreamingSVE_or_SSVE_AES, HasSVE2p1_or_StreamingSME2],
|
|
SME2p1Unsupported.F);
|
|
}
|
|
|
|
def SMEUnsupported : AArch64Unsupported {
|
|
let F = !listconcat([HasSME, HasSMEI16I64, HasSMEF16F16, HasSMEF64F64, HasSMEFA64],
|
|
SME2Unsupported.F);
|
|
}
|
|
|
|
def MTEUnsupported : AArch64Unsupported {
|
|
let F = [HasMTE];
|
|
}
|
|
|
|
let F = [HasPAuth, HasPAuthLR] in
|
|
def PAUnsupported : AArch64Unsupported;
|
|
|
|
include "AArch64SchedA320.td"
|
|
include "AArch64SchedA53.td"
|
|
include "AArch64SchedA55.td"
|
|
include "AArch64SchedA510.td"
|
|
include "AArch64SchedA57.td"
|
|
include "AArch64SchedC1Nano.td"
|
|
include "AArch64SchedC1Ultra.td"
|
|
include "AArch64SchedC1Premium.td"
|
|
include "AArch64SchedCyclone.td"
|
|
include "AArch64SchedFalkor.td"
|
|
include "AArch64SchedKryo.td"
|
|
include "AArch64SchedExynosM3.td"
|
|
include "AArch64SchedExynosM4.td"
|
|
include "AArch64SchedExynosM5.td"
|
|
include "AArch64SchedThunderX.td"
|
|
include "AArch64SchedThunderX2T99.td"
|
|
include "AArch64SchedA64FX.td"
|
|
include "AArch64SchedThunderX3T110.td"
|
|
include "AArch64SchedTSV110.td"
|
|
include "AArch64SchedAmpere1.td"
|
|
include "AArch64SchedAmpere1B.td"
|
|
include "AArch64SchedNeoverseN1.td"
|
|
include "AArch64SchedNeoverseN2.td"
|
|
include "AArch64SchedNeoverseN3.td"
|
|
include "AArch64SchedNeoverseV1.td"
|
|
include "AArch64SchedNeoverseV2.td"
|
|
include "AArch64SchedNeoverseV3.td"
|
|
include "AArch64SchedNeoverseV3AE.td"
|
|
include "AArch64SchedOlympus.td"
|
|
include "AArch64SchedOryon.td"
|
|
|
|
include "AArch64Processors.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Assembly parser
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def GenericAsmParserVariant : AsmParserVariant {
|
|
int Variant = 0;
|
|
string Name = "generic";
|
|
string BreakCharacters = ".";
|
|
string TokenizingCharacters = "[]*!/";
|
|
}
|
|
|
|
def AppleAsmParserVariant : AsmParserVariant {
|
|
int Variant = 1;
|
|
string Name = "apple-neon";
|
|
string BreakCharacters = ".";
|
|
string TokenizingCharacters = "[]*!/";
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Assembly printer
|
|
//===----------------------------------------------------------------------===//
|
|
// AArch64 Uses the MC printer for asm output, so make sure the TableGen
|
|
// AsmWriter bits get associated with the correct class.
|
|
def GenericAsmWriter : AsmWriter {
|
|
string AsmWriterClassName = "InstPrinter";
|
|
int PassSubtarget = 1;
|
|
int Variant = 0;
|
|
bit isMCAsmWriter = 1;
|
|
}
|
|
|
|
def AppleAsmWriter : AsmWriter {
|
|
let AsmWriterClassName = "AppleInstPrinter";
|
|
int PassSubtarget = 1;
|
|
int Variant = 1;
|
|
int isMCAsmWriter = 1;
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Target Declaration
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
def AArch64 : Target {
|
|
let InstructionSet = AArch64InstrInfo;
|
|
let AssemblyParserVariants = [GenericAsmParserVariant, AppleAsmParserVariant];
|
|
let AssemblyWriters = [GenericAsmWriter, AppleAsmWriter];
|
|
let AllowRegisterRenaming = 1;
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Pfm Counters
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
include "AArch64PfmCounters.td"
|