================ @@ -812,178 +812,270 @@ def ProcessorFeatures { list<SubtargetFeature> Generic = [FeatureFPARMv8, FeatureNEON, FeatureETE]; } +class AArch64Processor< + string n, + Architecture64 arch, + SchedMachineModel m, + list<SubtargetFeature> f, + list<SubtargetFeature> tunef, + list<Extension> default_extensions +> : ProcessorModel<n, m, f, tunef> { + // The base architecture for this processor. + Architecture64 Arch = arch; + + // The set of extensions enabled by default for this processor. + list<Extension> DefaultExts = default_extensions; +} + // FeatureFuseAdrpAdd is enabled under Generic to allow linker merging // optimizations. def : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic, [FeatureFuseAES, FeatureFuseAdrpAdd, FeaturePostRAScheduler, FeatureEnableSelectOptimize]>; -def : ProcessorModel<"cortex-a35", CortexA53Model, ProcessorFeatures.A53, - [TuneA35]>; -def : ProcessorModel<"cortex-a34", CortexA53Model, ProcessorFeatures.A53, - [TuneA35]>; -def : ProcessorModel<"cortex-a53", CortexA53Model, ProcessorFeatures.A53, - [TuneA53]>; -def : ProcessorModel<"cortex-a55", CortexA55Model, ProcessorFeatures.A55, - [TuneA55]>; -def : ProcessorModel<"cortex-a510", CortexA510Model, ProcessorFeatures.A510, - [TuneA510]>; -def : ProcessorModel<"cortex-a520", CortexA510Model, ProcessorFeatures.A520, - [TuneA520]>; -def : ProcessorModel<"cortex-a520ae", CortexA510Model, ProcessorFeatures.A520AE, - [TuneA520AE]>; -def : ProcessorModel<"cortex-a57", CortexA57Model, ProcessorFeatures.A53, - [TuneA57]>; -def : ProcessorModel<"cortex-a65", CortexA53Model, ProcessorFeatures.A65, - [TuneA65]>; -def : ProcessorModel<"cortex-a65ae", CortexA53Model, ProcessorFeatures.A65, - [TuneA65]>; -def : ProcessorModel<"cortex-a72", CortexA57Model, ProcessorFeatures.A53, - [TuneA72]>; -def : ProcessorModel<"cortex-a73", CortexA57Model, ProcessorFeatures.A53, - [TuneA73]>; -def : ProcessorModel<"cortex-a75", CortexA57Model, ProcessorFeatures.A55, - [TuneA75]>; -def : ProcessorModel<"cortex-a76", CortexA57Model, ProcessorFeatures.A76, - [TuneA76]>; -def : ProcessorModel<"cortex-a76ae", CortexA57Model, ProcessorFeatures.A76, - [TuneA76]>; -def : ProcessorModel<"cortex-a77", CortexA57Model, ProcessorFeatures.A77, - [TuneA77]>; -def : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78, - [TuneA78]>; -def : ProcessorModel<"cortex-a78ae", CortexA57Model, ProcessorFeatures.A78AE, - [TuneA78AE]>; -def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C, - [TuneA78C]>; -def : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710, - [TuneA710]>; -def : ProcessorModel<"cortex-a715", NeoverseN2Model, ProcessorFeatures.A715, - [TuneA715]>; -def : ProcessorModel<"cortex-a720", NeoverseN2Model, ProcessorFeatures.A720, - [TuneA720]>; -def : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE, - [TuneA720AE]>; -def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82, - [TuneR82]>; -def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE, - [TuneR82AE]>; -def : ProcessorModel<"cortex-x1", CortexA57Model, ProcessorFeatures.X1, - [TuneX1]>; -def : ProcessorModel<"cortex-x1c", CortexA57Model, ProcessorFeatures.X1C, - [TuneX1]>; -def : ProcessorModel<"cortex-x2", NeoverseN2Model, ProcessorFeatures.X2, - [TuneX2]>; -def : ProcessorModel<"cortex-x3", NeoverseN2Model, ProcessorFeatures.X3, - [TuneX3]>; -def : ProcessorModel<"cortex-x4", NeoverseN2Model, ProcessorFeatures.X4, - [TuneX4]>; -def : ProcessorModel<"neoverse-e1", CortexA53Model, - ProcessorFeatures.NeoverseE1, [TuneNeoverseE1]>; -def : ProcessorModel<"neoverse-n1", NeoverseN1Model, - ProcessorFeatures.NeoverseN1, [TuneNeoverseN1]>; -def : ProcessorModel<"neoverse-n2", NeoverseN2Model, - ProcessorFeatures.NeoverseN2, [TuneNeoverseN2]>; -def : ProcessorModel<"neoverse-n3", NeoverseN2Model, - ProcessorFeatures.NeoverseN3, [TuneNeoverseN3]>; -def : ProcessorModel<"neoverse-512tvb", NeoverseV1Model, - ProcessorFeatures.Neoverse512TVB, [TuneNeoverse512TVB]>; -def : ProcessorModel<"neoverse-v1", NeoverseV1Model, - ProcessorFeatures.NeoverseV1, [TuneNeoverseV1]>; -def : ProcessorModel<"neoverse-v2", NeoverseV2Model, - ProcessorFeatures.NeoverseV2, [TuneNeoverseV2]>; -def : ProcessorModel<"neoverse-v3", NeoverseV2Model, - ProcessorFeatures.NeoverseV3, [TuneNeoverseV3]>; -def : ProcessorModel<"neoverse-v3ae", NeoverseV2Model, - ProcessorFeatures.NeoverseV3AE, [TuneNeoverseV3AE]>; -def : ProcessorModel<"exynos-m3", ExynosM3Model, ProcessorFeatures.ExynosM3, - [TuneExynosM3]>; -def : ProcessorModel<"exynos-m4", ExynosM4Model, ProcessorFeatures.ExynosM4, - [TuneExynosM4]>; -def : ProcessorModel<"exynos-m5", ExynosM5Model, ProcessorFeatures.ExynosM4, - [TuneExynosM4]>; -def : ProcessorModel<"falkor", FalkorModel, ProcessorFeatures.Falkor, - [TuneFalkor]>; -def : ProcessorModel<"saphira", FalkorModel, ProcessorFeatures.Saphira, - [TuneSaphira]>; -def : ProcessorModel<"kryo", KryoModel, ProcessorFeatures.A53, [TuneKryo]>; + +// Alias for the latest Apple processor model supported by LLVM. +def : ProcessorModel<"apple-latest", CycloneModel, ProcessorFeatures.AppleA16, + [TuneAppleA16]>; + +def : AArch64Processor<"cortex-a34", HasV8_0aOps, CortexA53Model, ProcessorFeatures.A53, + [TuneA35], + [FeatureAES, FeatureSHA2, FeatureCRC]>; +def : AArch64Processor<"cortex-a35", HasV8_0aOps, CortexA53Model, ProcessorFeatures.A53, + [TuneA35], + [FeatureAES, FeatureSHA2, FeatureCRC]>; +def : AArch64Processor<"cortex-a53", HasV8_0aOps, CortexA53Model, ProcessorFeatures.A53, + [TuneA53], + [FeatureAES, FeatureSHA2, FeatureCRC]>; +def : AArch64Processor<"cortex-a55", HasV8_2aOps, CortexA55Model, ProcessorFeatures.A55, + [TuneA55], + [FeatureAES, FeatureSHA2, FeatureFullFP16, FeatureDotProd, FeatureRCPC]>; ---------------- tmatheson-arm wrote:
I have pushed new changes that combine the two lists (default extensions from `TargetParser`, and the list of `SubtargetFeature`s on the CPU). i.e. `ProcessorFeatures.A55` etc are expanded. Now, if any of the `SubtargetFeature`s listed for the CPU is an `Extension`, it will be added to the list used by `TargetParser`. This results in some test changes, where more extensions are enabled. However, the corresponding `SubtargetFeature` would have been enabled anyway in the backend. The changes just expose the extension on the `-cc1` command line and in the `target-features` IR attribute. https://github.com/llvm/llvm-project/pull/92145 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits