diff --git a/llvm/lib/Target/AArch64/AArch64.td b/llvm/lib/Target/AArch64/AArch64.td --- a/llvm/lib/Target/AArch64/AArch64.td +++ b/llvm/lib/Target/AArch64/AArch64.td @@ -1138,7 +1138,7 @@ [TuneA78]>; def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C, [TuneA78C]>; -def : ProcessorModel<"cortex-a710", CortexA57Model, ProcessorFeatures.A710, +def : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710, [TuneA710]>; def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82, [TuneR82]>; @@ -1146,7 +1146,7 @@ [TuneX1]>; def : ProcessorModel<"cortex-x1c", CortexA57Model, ProcessorFeatures.X1C, [TuneX1]>; -def : ProcessorModel<"cortex-x2", CortexA57Model, ProcessorFeatures.X2, +def : ProcessorModel<"cortex-x2", NeoverseN2Model, ProcessorFeatures.X2, [TuneX2]>; def : ProcessorModel<"neoverse-e1", CortexA53Model, ProcessorFeatures.NeoverseE1, [TuneNeoverseE1]>; @@ -1154,9 +1154,9 @@ ProcessorFeatures.NeoverseN1, [TuneNeoverseN1]>; def : ProcessorModel<"neoverse-n2", NeoverseN2Model, ProcessorFeatures.NeoverseN2, [TuneNeoverseN2]>; -def : ProcessorModel<"neoverse-512tvb", CortexA57Model, +def : ProcessorModel<"neoverse-512tvb", NeoverseN2Model, ProcessorFeatures.Neoverse512TVB, [TuneNeoverse512TVB]>; -def : ProcessorModel<"neoverse-v1", CortexA57Model, +def : ProcessorModel<"neoverse-v1", NeoverseN2Model, ProcessorFeatures.NeoverseV1, [TuneNeoverseV1]>; def : ProcessorModel<"exynos-m3", ExynosM3Model, ProcessorFeatures.ExynosM3, [TuneExynosM3]>; diff --git a/llvm/test/tools/llvm-mca/AArch64/Cortex/A710-sve-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Cortex/A710-sve-instructions.s new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-mca/AArch64/Cortex/A710-sve-instructions.s @@ -0,0 +1,40 @@ +# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py +# RUN: llvm-mca -mtriple=aarch64 -mcpu=cortex-a710 -instruction-tables < %s | FileCheck %s + +# Check the Neoverse N2 model is used. + +bext z0.b, z1.b, z31.b + +# CHECK: Instruction Info: +# CHECK-NEXT: [1]: #uOps +# CHECK-NEXT: [2]: Latency +# CHECK-NEXT: [3]: RThroughput +# CHECK-NEXT: [4]: MayLoad +# CHECK-NEXT: [5]: MayStore +# CHECK-NEXT: [6]: HasSideEffects (U) + +# CHECK: [1] [2] [3] [4] [5] [6] Instructions: +# CHECK-NEXT: 2 6 2.00 bext z0.b, z1.b, z31.b + +# CHECK: Resources: +# CHECK-NEXT: [0.0] - N2UnitB +# CHECK-NEXT: [0.1] - N2UnitB +# CHECK-NEXT: [1.0] - N2UnitD +# CHECK-NEXT: [1.1] - N2UnitD +# CHECK-NEXT: [2] - N2UnitL2 +# CHECK-NEXT: [3.0] - N2UnitL01 +# CHECK-NEXT: [3.1] - N2UnitL01 +# CHECK-NEXT: [4] - N2UnitM0 +# CHECK-NEXT: [5] - N2UnitM1 +# CHECK-NEXT: [6.0] - N2UnitS +# CHECK-NEXT: [6.1] - N2UnitS +# CHECK-NEXT: [7] - N2UnitV0 +# CHECK-NEXT: [8] - N2UnitV1 + +# CHECK: Resource pressure per iteration: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] +# CHECK-NEXT: - - - - - - - - - - - - 2.00 + +# CHECK: Resource pressure by instruction: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] Instructions: +# CHECK-NEXT: - - - - - - - - - - - - 2.00 bext z0.b, z1.b, z31.b diff --git a/llvm/test/tools/llvm-mca/AArch64/Cortex/X2-sve-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Cortex/X2-sve-instructions.s new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-mca/AArch64/Cortex/X2-sve-instructions.s @@ -0,0 +1,40 @@ +# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py +# RUN: llvm-mca -mtriple=aarch64 -mcpu=cortex-x2 -instruction-tables < %s | FileCheck %s + +# Check the Neoverse N2 model is used. + +addhnb z0.b, z1.h, z31.h + +# CHECK: Instruction Info: +# CHECK-NEXT: [1]: #uOps +# CHECK-NEXT: [2]: Latency +# CHECK-NEXT: [3]: RThroughput +# CHECK-NEXT: [4]: MayLoad +# CHECK-NEXT: [5]: MayStore +# CHECK-NEXT: [6]: HasSideEffects (U) + +# CHECK: [1] [2] [3] [4] [5] [6] Instructions: +# CHECK-NEXT: 1 2 0.50 addhnb z0.b, z1.h, z31.h + +# CHECK: Resources: +# CHECK-NEXT: [0.0] - N2UnitB +# CHECK-NEXT: [0.1] - N2UnitB +# CHECK-NEXT: [1.0] - N2UnitD +# CHECK-NEXT: [1.1] - N2UnitD +# CHECK-NEXT: [2] - N2UnitL2 +# CHECK-NEXT: [3.0] - N2UnitL01 +# CHECK-NEXT: [3.1] - N2UnitL01 +# CHECK-NEXT: [4] - N2UnitM0 +# CHECK-NEXT: [5] - N2UnitM1 +# CHECK-NEXT: [6.0] - N2UnitS +# CHECK-NEXT: [6.1] - N2UnitS +# CHECK-NEXT: [7] - N2UnitV0 +# CHECK-NEXT: [8] - N2UnitV1 + +# CHECK: Resource pressure per iteration: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] +# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 + +# CHECK: Resource pressure by instruction: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] Instructions: +# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 addhnb z0.b, z1.h, z31.h diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/512tvb-sve-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/512tvb-sve-instructions.s new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/512tvb-sve-instructions.s @@ -0,0 +1,40 @@ +# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py +# RUN: llvm-mca -mtriple=aarch64 -mcpu=neoverse-512tvb -instruction-tables < %s | FileCheck %s + +# Check the Neoverse N2 model is used. + +abs z0.b, p0/m, z0.b + +# CHECK: Instruction Info: +# CHECK-NEXT: [1]: #uOps +# CHECK-NEXT: [2]: Latency +# CHECK-NEXT: [3]: RThroughput +# CHECK-NEXT: [4]: MayLoad +# CHECK-NEXT: [5]: MayStore +# CHECK-NEXT: [6]: HasSideEffects (U) + +# CHECK: [1] [2] [3] [4] [5] [6] Instructions: +# CHECK-NEXT: 1 2 0.50 abs z0.b, p0/m, z0.b + +# CHECK: Resources: +# CHECK-NEXT: [0.0] - N2UnitB +# CHECK-NEXT: [0.1] - N2UnitB +# CHECK-NEXT: [1.0] - N2UnitD +# CHECK-NEXT: [1.1] - N2UnitD +# CHECK-NEXT: [2] - N2UnitL2 +# CHECK-NEXT: [3.0] - N2UnitL01 +# CHECK-NEXT: [3.1] - N2UnitL01 +# CHECK-NEXT: [4] - N2UnitM0 +# CHECK-NEXT: [5] - N2UnitM1 +# CHECK-NEXT: [6.0] - N2UnitS +# CHECK-NEXT: [6.1] - N2UnitS +# CHECK-NEXT: [7] - N2UnitV0 +# CHECK-NEXT: [8] - N2UnitV1 + +# CHECK: Resource pressure per iteration: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] +# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 + +# CHECK: Resource pressure by instruction: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] Instructions: +# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 abs z0.b, p0/m, z0.b diff --git a/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-sve-instructions.s b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-sve-instructions.s new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-mca/AArch64/Neoverse/V1-sve-instructions.s @@ -0,0 +1,40 @@ +# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py +# RUN: llvm-mca -mtriple=aarch64 -mcpu=neoverse-v1 -instruction-tables < %s | FileCheck %s + +# Check the Neoverse N2 model is used. + +abs z0.b, p0/m, z0.b + +# CHECK: Instruction Info: +# CHECK-NEXT: [1]: #uOps +# CHECK-NEXT: [2]: Latency +# CHECK-NEXT: [3]: RThroughput +# CHECK-NEXT: [4]: MayLoad +# CHECK-NEXT: [5]: MayStore +# CHECK-NEXT: [6]: HasSideEffects (U) + +# CHECK: [1] [2] [3] [4] [5] [6] Instructions: +# CHECK-NEXT: 1 2 0.50 abs z0.b, p0/m, z0.b + +# CHECK: Resources: +# CHECK-NEXT: [0.0] - N2UnitB +# CHECK-NEXT: [0.1] - N2UnitB +# CHECK-NEXT: [1.0] - N2UnitD +# CHECK-NEXT: [1.1] - N2UnitD +# CHECK-NEXT: [2] - N2UnitL2 +# CHECK-NEXT: [3.0] - N2UnitL01 +# CHECK-NEXT: [3.1] - N2UnitL01 +# CHECK-NEXT: [4] - N2UnitM0 +# CHECK-NEXT: [5] - N2UnitM1 +# CHECK-NEXT: [6.0] - N2UnitS +# CHECK-NEXT: [6.1] - N2UnitS +# CHECK-NEXT: [7] - N2UnitV0 +# CHECK-NEXT: [8] - N2UnitV1 + +# CHECK: Resource pressure per iteration: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] +# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 + +# CHECK: Resource pressure by instruction: +# CHECK-NEXT: [0.0] [0.1] [1.0] [1.1] [2] [3.0] [3.1] [4] [5] [6.0] [6.1] [7] [8] Instructions: +# CHECK-NEXT: - - - - - - - - - - - 0.50 0.50 abs z0.b, p0/m, z0.b