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
111 lines
5.2 KiB
TableGen
111 lines
5.2 KiB
TableGen
//===- AArch64SchedPredNeoverse.td - AArch64 Sched Preds -----*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines scheduling predicate definitions that are used by the
|
|
// AArch64 Neoverse processors.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Auxiliary predicates.
|
|
|
|
// Check for LSL shift == 0
|
|
def NeoverseNoLSL : MCSchedPredicate<
|
|
CheckAll<[CheckShiftLSL,
|
|
CheckShiftBy0]>>;
|
|
|
|
// Identify LDR/STR H/Q-form scaled (and potentially extended) FP instructions
|
|
def NeoverseHQForm : MCSchedPredicate<
|
|
CheckAll<[
|
|
CheckAny<[CheckHForm, CheckQForm]>,
|
|
CheckImmOperand<4, 1>]>>;
|
|
|
|
// Identify LDR/STR Q-form scaled (and potentially extended) FP instructions
|
|
def NeoverseQForm : MCSchedPredicate<
|
|
CheckAll<[
|
|
CheckAny<[CheckQForm]>,
|
|
CheckImmOperand<4, 1>]>>;
|
|
|
|
// Check if <Pd> == <Pg>
|
|
def NeoversePdIsPgFn : TIIPredicate<
|
|
"isNeoversePdSameAsPg",
|
|
MCOpcodeSwitchStatement<
|
|
[MCOpcodeSwitchCase<[BRKA_PPmP, BRKB_PPmP],
|
|
MCReturnStatement<CheckSameRegOperand<1, 2>>>],
|
|
MCReturnStatement<CheckSameRegOperand<0, 1>>>>;
|
|
def NeoversePdIsPg : MCSchedPredicate<NeoversePdIsPgFn>;
|
|
|
|
// Check if SVE INC/DEC (scalar), ALL, {1, 2, 4}
|
|
def NeoverseCheapIncDec : MCSchedPredicate<
|
|
CheckAll<[CheckOpcode<[
|
|
INCB_XPiI, INCH_XPiI,
|
|
INCW_XPiI, INCD_XPiI,
|
|
DECB_XPiI, DECH_XPiI,
|
|
DECW_XPiI, DECD_XPiI]>,
|
|
CheckImmOperand<2, 31>,
|
|
CheckAny<[
|
|
CheckImmOperand<3, 1>,
|
|
CheckImmOperand<3, 2>,
|
|
CheckImmOperand<3, 4>]>]>>;
|
|
|
|
// Identify "[SU]?(MADD|MSUB)L?" as the alias for "[SU]?(MUL|MNEG)L?".
|
|
def NeoverseMULIdiomPred : MCSchedPredicate< // <op> Rd, Rs, Rv, ZR
|
|
CheckAll<[CheckOpcode<
|
|
[MADDWrrr, MADDXrrr,
|
|
MSUBWrrr, MSUBXrrr,
|
|
SMADDLrrr, UMADDLrrr,
|
|
SMSUBLrrr, UMSUBLrrr]>,
|
|
CheckIsReg3Zero]>>;
|
|
|
|
def NeoverseZeroMove : MCSchedPredicate<
|
|
CheckAny<[
|
|
// MOV Wd, #0
|
|
// MOV Xd, #0
|
|
CheckAll<[CheckOpcode<[MOVZWi, MOVZXi]>,
|
|
CheckIsImmOperand<1>,
|
|
CheckImmOperand<1, 0>,
|
|
CheckImmOperand<2, 0>]>,
|
|
// MOV Wd, WZR
|
|
// MOV Xd, XZR
|
|
// MOV Wd, Wn
|
|
// MOV Xd, Xn
|
|
CheckAll<[CheckOpcode<[ORRWrs, ORRXrs]>,
|
|
CheckAll<[CheckIsReg1Zero,
|
|
CheckImmOperand<3, 0>]>]>,
|
|
// FMOV Hd, WZR
|
|
// FMOV Hd, XZR
|
|
// FMOV Sd, WZR
|
|
// FMOV Dd, XZR
|
|
CheckAll<[CheckOpcode<[FMOVWHr, FMOVXHr,
|
|
FMOVWSr, FMOVXDr]>,
|
|
CheckIsReg1Zero]>,
|
|
// MOVI Dd, #0
|
|
// MOVI Vd.2D, #0
|
|
CheckAll<[CheckOpcode<[MOVID, MOVIv2d_ns]>,
|
|
CheckImmOperand<1, 0>]>,
|
|
// MOV Zd, Zn
|
|
CheckAll<[CheckOpcode<[ORR_ZZZ]>,
|
|
CheckSameRegOperand<1, 2>]>,
|
|
// MOV Vd, Vn
|
|
CheckAll<[CheckOpcode<[ORRv16i8, ORRv8i8]>,
|
|
CheckSameRegOperand<1, 2>]>,
|
|
]>>;
|
|
|
|
def NeoverseAllActivePredicate : MCSchedPredicate<
|
|
CheckAny<[
|
|
// PTRUE Pd, ALL
|
|
// PTRUES Pd, ALL
|
|
CheckAll<[
|
|
CheckOpcode<[
|
|
PTRUE_B, PTRUE_H, PTRUE_S, PTRUE_D,
|
|
PTRUES_B, PTRUES_H, PTRUES_S, PTRUES_D]>,
|
|
CheckIsImmOperand<1>,
|
|
CheckImmOperand<1, 31>]>,
|
|
]>>;
|
|
|
|
|