================ @@ -812,178 +835,192 @@ def ProcessorFeatures { list<SubtargetFeature> Generic = [FeatureFPARMv8, FeatureNEON, FeatureETE]; } +class AArch64Processor< + string n, + Architecture64 arch, + SchedMachineModel m, + list<SubtargetFeature> f, + list<SubtargetFeature> tunef +> : ProcessorModel<n, m, f, tunef> { + // The base architecture for this processor. + Architecture64 Arch = arch; +} + // FeatureFuseAdrpAdd is enabled under Generic to allow linker merging // optimizations. -def : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic, +def : AArch64Processor<"generic", HasV8_0aOps, CortexA510Model, ProcessorFeatures.Generic, [FeatureFuseAES, FeatureFuseAdrpAdd, FeaturePostRAScheduler, FeatureEnableSelectOptimize]>; -def : ProcessorModel<"cortex-a35", CortexA53Model, ProcessorFeatures.A53, + +// 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]>; -def : ProcessorModel<"cortex-a34", CortexA53Model, ProcessorFeatures.A53, +def : AArch64Processor<"cortex-a35", HasV8_0aOps, CortexA53Model, ProcessorFeatures.A53, [TuneA35]>; -def : ProcessorModel<"cortex-a53", CortexA53Model, ProcessorFeatures.A53, +def : AArch64Processor<"cortex-a53", HasV8_0aOps, CortexA53Model, ProcessorFeatures.A53, [TuneA53]>; -def : ProcessorModel<"cortex-a55", CortexA55Model, ProcessorFeatures.A55, +def : AArch64Processor<"cortex-a55", HasV8_2aOps, CortexA55Model, ProcessorFeatures.A55, [TuneA55]>; -def : ProcessorModel<"cortex-a510", CortexA510Model, ProcessorFeatures.A510, +def : AArch64Processor<"cortex-a510", HasV9_0aOps, CortexA510Model, ProcessorFeatures.A510, [TuneA510]>; -def : ProcessorModel<"cortex-a520", CortexA510Model, ProcessorFeatures.A520, +def : AArch64Processor<"cortex-a520", HasV9_2aOps, CortexA510Model, ProcessorFeatures.A520, [TuneA520]>; -def : ProcessorModel<"cortex-a520ae", CortexA510Model, ProcessorFeatures.A520AE, +def : AArch64Processor<"cortex-a520ae", HasV9_2aOps, CortexA510Model, ProcessorFeatures.A520AE, [TuneA520AE]>; -def : ProcessorModel<"cortex-a57", CortexA57Model, ProcessorFeatures.A53, +def : AArch64Processor<"cortex-a57", HasV8_0aOps, CortexA57Model, ProcessorFeatures.A53, [TuneA57]>; -def : ProcessorModel<"cortex-a65", CortexA53Model, ProcessorFeatures.A65, +def : AArch64Processor<"cortex-a65", HasV8_2aOps, CortexA53Model, ProcessorFeatures.A65, [TuneA65]>; -def : ProcessorModel<"cortex-a65ae", CortexA53Model, ProcessorFeatures.A65, +def : AArch64Processor<"cortex-a65ae", HasV8_2aOps, CortexA53Model, ProcessorFeatures.A65, [TuneA65]>; -def : ProcessorModel<"cortex-a72", CortexA57Model, ProcessorFeatures.A53, +def : AArch64Processor<"cortex-a72", HasV8_0aOps, CortexA57Model, ProcessorFeatures.A53, [TuneA72]>; -def : ProcessorModel<"cortex-a73", CortexA57Model, ProcessorFeatures.A53, +def : AArch64Processor<"cortex-a73", HasV8_0aOps, CortexA57Model, ProcessorFeatures.A53, [TuneA73]>; -def : ProcessorModel<"cortex-a75", CortexA57Model, ProcessorFeatures.A55, +def : AArch64Processor<"cortex-a75", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A55, [TuneA75]>; -def : ProcessorModel<"cortex-a76", CortexA57Model, ProcessorFeatures.A76, +def : AArch64Processor<"cortex-a76", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A76, [TuneA76]>; -def : ProcessorModel<"cortex-a76ae", CortexA57Model, ProcessorFeatures.A76, +def : AArch64Processor<"cortex-a76ae", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A76, [TuneA76]>; -def : ProcessorModel<"cortex-a77", CortexA57Model, ProcessorFeatures.A77, +def : AArch64Processor<"cortex-a77", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A77, [TuneA77]>; -def : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78, +def : AArch64Processor<"cortex-a78", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A78, [TuneA78]>; -def : ProcessorModel<"cortex-a78ae", CortexA57Model, ProcessorFeatures.A78AE, +def : AArch64Processor<"cortex-a78ae", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A78AE, [TuneA78AE]>; -def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C, +def : AArch64Processor<"cortex-a78c", HasV8_2aOps, CortexA57Model, ProcessorFeatures.A78C, [TuneA78C]>; -def : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710, +def : AArch64Processor<"cortex-a710", HasV9_0aOps, NeoverseN2Model, ProcessorFeatures.A710, [TuneA710]>; -def : ProcessorModel<"cortex-a715", NeoverseN2Model, ProcessorFeatures.A715, +def : AArch64Processor<"cortex-a715", HasV9_0aOps, NeoverseN2Model, ProcessorFeatures.A715, [TuneA715]>; -def : ProcessorModel<"cortex-a720", NeoverseN2Model, ProcessorFeatures.A720, +def : AArch64Processor<"cortex-a720", HasV9_2aOps, NeoverseN2Model, ProcessorFeatures.A720, [TuneA720]>; -def : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE, +def : AArch64Processor<"cortex-a720ae", HasV9_2aOps, NeoverseN2Model, ProcessorFeatures.A720AE, [TuneA720AE]>; -def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82, +def : AArch64Processor<"cortex-r82", HasV8_0rOps, CortexA55Model, ProcessorFeatures.R82, [TuneR82]>; -def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE, +def : AArch64Processor<"cortex-r82ae", HasV8_0rOps, CortexA55Model, ProcessorFeatures.R82AE, [TuneR82AE]>; -def : ProcessorModel<"cortex-x1", CortexA57Model, ProcessorFeatures.X1, +def : AArch64Processor<"cortex-x1", HasV8_2aOps, CortexA57Model, ProcessorFeatures.X1, [TuneX1]>; -def : ProcessorModel<"cortex-x1c", CortexA57Model, ProcessorFeatures.X1C, +def : AArch64Processor<"cortex-x1c", HasV8_2aOps, CortexA57Model, ProcessorFeatures.X1C, [TuneX1]>; -def : ProcessorModel<"cortex-x2", NeoverseN2Model, ProcessorFeatures.X2, +def : AArch64Processor<"cortex-x2", HasV9_0aOps, NeoverseN2Model, ProcessorFeatures.X2, [TuneX2]>; -def : ProcessorModel<"cortex-x3", NeoverseN2Model, ProcessorFeatures.X3, +def : AArch64Processor<"cortex-x3", HasV9_0aOps, NeoverseN2Model, ProcessorFeatures.X3, [TuneX3]>; -def : ProcessorModel<"cortex-x4", NeoverseN2Model, ProcessorFeatures.X4, +def : AArch64Processor<"cortex-x4", HasV9_2aOps, 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, +def : AArch64Processor<"neoverse-e1", HasV8_2aOps, CortexA53Model, ProcessorFeatures.NeoverseE1, + [TuneNeoverseE1]>; +def : AArch64Processor<"neoverse-n1", HasV8_2aOps, NeoverseN1Model, ProcessorFeatures.NeoverseN1, + [TuneNeoverseN1]>; +def : AArch64Processor<"neoverse-n2", HasV9_0aOps, NeoverseN2Model, ProcessorFeatures.NeoverseN2, + [TuneNeoverseN2]>; +def : AArch64Processor<"neoverse-n3", HasV9_2aOps, NeoverseN2Model, ProcessorFeatures.NeoverseN3, + [TuneNeoverseN3]>; +def : AArch64Processor<"neoverse-512tvb", HasV8_4aOps, NeoverseV1Model, ProcessorFeatures.Neoverse512TVB, + [TuneNeoverse512TVB]>; +def : AArch64Processor<"neoverse-v1", HasV8_4aOps, NeoverseV1Model, ProcessorFeatures.NeoverseV1, + [TuneNeoverseV1]>; +def : AArch64Processor<"neoverse-v2", HasV9_0aOps, NeoverseV2Model, ProcessorFeatures.NeoverseV2, + [TuneNeoverseV2]>; +def : AArch64Processor<"neoverse-v3", HasV9_2aOps, NeoverseV2Model, ProcessorFeatures.NeoverseV3, + [TuneNeoverseV3]>; +def : AArch64Processor<"neoverse-v3ae", HasV9_2aOps, NeoverseV2Model, ProcessorFeatures.NeoverseV3AE, + [TuneNeoverseV3AE]>; +def : AArch64Processor<"exynos-m3", HasV8_0aOps, ExynosM3Model, ProcessorFeatures.ExynosM3, [TuneExynosM3]>; -def : ProcessorModel<"exynos-m4", ExynosM4Model, ProcessorFeatures.ExynosM4, +def : AArch64Processor<"exynos-m4", HasV8_2aOps, ExynosM4Model, ProcessorFeatures.ExynosM4, [TuneExynosM4]>; -def : ProcessorModel<"exynos-m5", ExynosM5Model, ProcessorFeatures.ExynosM4, +def : AArch64Processor<"exynos-m5", HasV8_2aOps, ExynosM5Model, ProcessorFeatures.ExynosM4, [TuneExynosM4]>; -def : ProcessorModel<"falkor", FalkorModel, ProcessorFeatures.Falkor, +def : AArch64Processor<"falkor", HasV8_0aOps, FalkorModel, ProcessorFeatures.Falkor, [TuneFalkor]>; -def : ProcessorModel<"saphira", FalkorModel, ProcessorFeatures.Saphira, +def : AArch64Processor<"saphira", HasV8_4aOps, FalkorModel, ProcessorFeatures.Saphira, [TuneSaphira]>; -def : ProcessorModel<"kryo", KryoModel, ProcessorFeatures.A53, [TuneKryo]>; +def : AArch64Processor<"kryo", HasV8_0aOps, KryoModel, ProcessorFeatures.A53, + [TuneKryo]>; // Cavium ThunderX/ThunderX T8X Processors -def : ProcessorModel<"thunderx", ThunderXT8XModel, ProcessorFeatures.ThunderX, +def : AArch64Processor<"thunderx", HasV8_0aOps, ThunderXT8XModel, ProcessorFeatures.ThunderX, [TuneThunderX]>; -def : ProcessorModel<"thunderxt88", ThunderXT8XModel, - ProcessorFeatures.ThunderX, [TuneThunderXT88]>; -def : ProcessorModel<"thunderxt81", ThunderXT8XModel, - ProcessorFeatures.ThunderX, [TuneThunderXT81]>; -def : ProcessorModel<"thunderxt83", ThunderXT8XModel, - ProcessorFeatures.ThunderX, [TuneThunderXT83]>; +def : AArch64Processor<"thunderxt88", HasV8_0aOps, ThunderXT8XModel, ProcessorFeatures.ThunderX, + [TuneThunderXT88]>; +def : AArch64Processor<"thunderxt81", HasV8_0aOps, ThunderXT8XModel, ProcessorFeatures.ThunderX, + [TuneThunderXT81]>; +def : AArch64Processor<"thunderxt83", HasV8_0aOps, ThunderXT8XModel, ProcessorFeatures.ThunderX, + [TuneThunderXT83]>; // Cavium ThunderX2T9X Processors. Formerly Broadcom Vulcan. -def : ProcessorModel<"thunderx2t99", ThunderX2T99Model, - ProcessorFeatures.ThunderX2T99, [TuneThunderX2T99]>; +def : AArch64Processor<"thunderx2t99", HasV8_1aOps, ThunderX2T99Model, ProcessorFeatures.ThunderX2T99, + [TuneThunderX2T99]>; // Marvell ThunderX3T110 Processors. -def : ProcessorModel<"thunderx3t110", ThunderX3T110Model, - ProcessorFeatures.ThunderX3T110, [TuneThunderX3T110]>; -def : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110, +def : AArch64Processor<"thunderx3t110", HasV8_3aOps, ThunderX3T110Model, ProcessorFeatures.ThunderX3T110, + [TuneThunderX3T110]>; +def : AArch64Processor<"tsv110", HasV8_2aOps, TSV110Model, ProcessorFeatures.TSV110, [TuneTSV110]>; // Support cyclone as an alias for apple-a7 so we can still LTO old bitcode. -def : ProcessorModel<"cyclone", CycloneModel, ProcessorFeatures.AppleA7, +def : AArch64Processor<"cyclone", HasV8_0aOps, CycloneModel, ProcessorFeatures.AppleA7, [TuneAppleA7]>; // iPhone and iPad CPUs -def : ProcessorModel<"apple-a7", CycloneModel, ProcessorFeatures.AppleA7, +def : AArch64Processor<"apple-a7", HasV8_0aOps, CycloneModel, ProcessorFeatures.AppleA7, [TuneAppleA7]>; -def : ProcessorModel<"apple-a8", CycloneModel, ProcessorFeatures.AppleA7, +def : AArch64Processor<"apple-a8", HasV8_0aOps, CycloneModel, ProcessorFeatures.AppleA7, [TuneAppleA7]>; -def : ProcessorModel<"apple-a9", CycloneModel, ProcessorFeatures.AppleA7, +def : AArch64Processor<"apple-a9", HasV8_0aOps, CycloneModel, ProcessorFeatures.AppleA7, [TuneAppleA7]>; -def : ProcessorModel<"apple-a10", CycloneModel, ProcessorFeatures.AppleA10, +def : AArch64Processor<"apple-a10", HasV8_0aOps, CycloneModel, ProcessorFeatures.AppleA10, [TuneAppleA10]>; -def : ProcessorModel<"apple-a11", CycloneModel, ProcessorFeatures.AppleA11, +def : AArch64Processor<"apple-a11", HasV8_2aOps, CycloneModel, ProcessorFeatures.AppleA11, [TuneAppleA11]>; -def : ProcessorModel<"apple-a12", CycloneModel, ProcessorFeatures.AppleA12, +def : AArch64Processor<"apple-a12", HasV8_3aOps, CycloneModel, ProcessorFeatures.AppleA12, [TuneAppleA12]>; -def : ProcessorModel<"apple-a13", CycloneModel, ProcessorFeatures.AppleA13, +def : AArch64Processor<"apple-a13", HasV8_4aOps, CycloneModel, ProcessorFeatures.AppleA13, [TuneAppleA13]>; -def : ProcessorModel<"apple-a14", CycloneModel, ProcessorFeatures.AppleA14, +def : AArch64Processor<"apple-a14", HasV8_5aOps, CycloneModel, ProcessorFeatures.AppleA14, [TuneAppleA14]>; -def : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15, +def : AArch64Processor<"apple-a15", HasV8_6aOps, CycloneModel, ProcessorFeatures.AppleA15, [TuneAppleA15]>; -def : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16, +// Alias for the latest Apple processor model supported by LLVM. ---------------- jroelofs wrote:
Let's leave this copy of the comment out. It will have to move every time this changes, which is not great for auto-merging. 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