[clang] [llvm] [AVR] Add many new AVR MCU model definitions (PR #144229)
Tom Vijlbrief via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 15 05:35:44 PDT 2025
https://github.com/tomtor updated https://github.com/llvm/llvm-project/pull/144229
>From 57a30b4bfd87a8389ab042b2c9184a59bf7f4519 Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Thu, 12 Jun 2025 16:59:46 +0200
Subject: [PATCH 1/9] Add support for many new AVR mcus like AVR128DB28
---
clang/lib/Basic/Targets/AVR.cpp | 45 +++++++++++++++++++++++++
clang/lib/Driver/ToolChains/AVR.cpp | 46 +++++++++++++++++++++++++
llvm/lib/Target/AVR/AVRDevices.td | 52 +++++++++++++++++++++++++++++
3 files changed, 143 insertions(+)
diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp
index 85ca4bc30c461..72268a50a247a 100644
--- a/clang/lib/Basic/Targets/AVR.cpp
+++ b/clang/lib/Basic/Targets/AVR.cpp
@@ -344,6 +344,51 @@ static MCUInfo AVRMcus[] = {
{"atmega3209", "__AVR_ATmega3209__", "103", 1},
{"atmega4808", "__AVR_ATmega4808__", "103", 1},
{"atmega4809", "__AVR_ATmega4809__", "103", 1},
+
+ // gcc 14 additions:
+
+ {"avr16dd20", "__AVR_AVR16DD20__", "103", 1},
+ {"avr16dd28", "__AVR_AVR16DD28__", "103", 1},
+ {"avr16dd32", "__AVR_AVR16DD32__", "103", 1},
+ {"avr16du14", "__AVR_AVR16DU14__", "103", 1},
+ {"avr16du20", "__AVR_AVR16DU20__", "103", 1},
+ {"avr16du28", "__AVR_AVR16DU28__", "103", 1},
+ {"avr16du32", "__AVR_AVR16DU32__", "103", 1},
+ {"avr32da28", "__AVR_AVR32DA28__", "103", 1},
+ {"avr32da32", "__AVR_AVR32DA32__", "103", 1},
+ {"avr32da48", "__AVR_AVR32DA48__", "103", 1},
+ {"avr32db28", "__AVR_AVR32DB28__", "103", 1},
+ {"avr32db32", "__AVR_AVR32DB32__", "103", 1},
+ {"avr32db48", "__AVR_AVR32DB48__", "103", 1},
+ {"avr32dd14", "__AVR_AVR32DD14__", "103", 1},
+ {"avr32dd20", "__AVR_AVR32DD20__", "103", 1},
+ {"avr32dd28", "__AVR_AVR32DD28__", "103", 1},
+ {"avr32dd32", "__AVR_AVR32DD32__", "103", 1},
+ {"avr32du14", "__AVR_AVR32DU14__", "103", 1},
+ {"avr32du20", "__AVR_AVR32DU20__", "103", 1},
+ {"avr32du28", "__AVR_AVR32DU28__", "103", 1},
+ {"avr32du32", "__AVR_AVR32DU32__", "103", 1},
+ {"avr16eb14", "__AVR_AVR16EB14__", "103", 1},
+ {"avr16eb20", "__AVR_AVR16EB20__", "103", 1},
+ {"avr16eb28", "__AVR_AVR16EB28__", "103", 1},
+ {"avr16eb32", "__AVR_AVR16EB32__", "103", 1},
+ {"avr16ea28", "__AVR_AVR16EA28__", "103", 1},
+ {"avr16ea32", "__AVR_AVR16EA32__", "103", 1},
+ {"avr16ea48", "__AVR_AVR16EA48__", "103", 1},
+ {"avr32ea28", "__AVR_AVR32EA28__", "103", 1},
+ {"avr32ea32", "__AVR_AVR32EA32__", "103", 1},
+ {"avr32ea48", "__AVR_AVR32EA48__", "103", 1},
+ {"avr32sd20", "__AVR_AVR32SD20__", "103", 1},
+ {"avr32sd28", "__AVR_AVR32SD28__", "103", 1},
+ {"avr32sd32", "__AVR_AVR32SD32__", "103", 1},
+ {"avr128da28", "__AVR_AVR128DA28__", "104", 2},
+ {"avr128da32", "__AVR_AVR128DA32__", "104", 2},
+ {"avr128da48", "__AVR_AVR128DA48__", "104", 2},
+ {"avr128da64", "__AVR_AVR128DA64__", "104", 2},
+ {"avr128db28", "__AVR_AVR128DB28__", "104", 2},
+ {"avr128db32", "__AVR_AVR128DB32__", "104", 2},
+ {"avr128db48", "__AVR_AVR128DB48__", "104", 2},
+ {"avr128db64", "__AVR_AVR128DB64__", "104", 2},
};
} // namespace targets
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index b0523a7f4e40e..f9242ec33cf5a 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -328,6 +328,52 @@ constexpr struct {
{"attiny1627", "avrxmega3", "avrxmega3", 0x803800},
{"attiny3216", "avrxmega3", "avrxmega3", 0x803800},
{"attiny3217", "avrxmega3", "avrxmega3", 0x803800},
+
+ // gcc 14 additions:
+
+ {"avr16dd20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16dd28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16dd32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du14", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr32da28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32da32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32da48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd14", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du14", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr16eb14", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea48", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr32ea28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32ea32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32ea48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr128da28", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da32", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da48", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da64", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db28", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db32", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db48", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db64", "avrxmega4", "avrxmega4", 0x804000},
+
};
std::string GetMCUSubPath(StringRef MCUName) {
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index 56147bb473bc4..f72cbe7257930 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -215,6 +215,13 @@ def FamilyXMEGA3 : Family<"xmega3",
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
FeatureBREAK, FeatureLowByteFirst]>;
+def FamilyXMEGA4 : Family<"xmega4",
+ [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
+ FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
+ FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureEIJMPCALL, FeatureELPM,
+ FeatureBREAK, FeatureLowByteFirst]>;
+
def FamilyXMEGA : Family<"xmega",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
@@ -575,3 +582,48 @@ def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;
+
+// Additions from gcc 14:
+
+def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr128da28", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da32", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da48", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da64", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db28", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db32", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db48", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db64", FamilyXMEGA4, ELFArchXMEGA4>;
>From 64de36b93bd022def6b625c03ef0123acacdef7f Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Thu, 12 Jun 2025 17:38:43 +0200
Subject: [PATCH 2/9] Add missing attiny322x series
---
clang/lib/Basic/Targets/AVR.cpp | 3 +++
clang/lib/Driver/ToolChains/AVR.cpp | 3 +++
llvm/lib/Target/AVR/AVRDevices.td | 3 +++
3 files changed, 9 insertions(+)
diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp
index 72268a50a247a..b0f7a1a674d32 100644
--- a/clang/lib/Basic/Targets/AVR.cpp
+++ b/clang/lib/Basic/Targets/AVR.cpp
@@ -336,6 +336,9 @@ static MCUInfo AVRMcus[] = {
{"attiny1624", "__AVR_ATtiny1624__", "103", 1},
{"attiny1626", "__AVR_ATtiny1626__", "103", 1},
{"attiny1627", "__AVR_ATtiny1627__", "103", 1},
+ {"attiny3224", "__AVR_ATtiny1624__", "103", 1},
+ {"attiny3226", "__AVR_ATtiny1626__", "103", 1},
+ {"attiny3227", "__AVR_ATtiny1627__", "103", 1},
{"atmega808", "__AVR_ATmega808__", "103", 1},
{"atmega809", "__AVR_ATmega809__", "103", 1},
{"atmega1608", "__AVR_ATmega1608__", "103", 1},
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index f9242ec33cf5a..a455f74f7b8db 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -326,6 +326,9 @@ constexpr struct {
{"attiny1624", "avrxmega3", "avrxmega3", 0x803800},
{"attiny1626", "avrxmega3", "avrxmega3", 0x803800},
{"attiny1627", "avrxmega3", "avrxmega3", 0x803800},
+ {"attiny3224", "avrxmega3", "avrxmega3", 0x803400},
+ {"attiny3226", "avrxmega3", "avrxmega3", 0x803400},
+ {"attiny3227", "avrxmega3", "avrxmega3", 0x803400},
{"attiny3216", "avrxmega3", "avrxmega3", 0x803800},
{"attiny3217", "avrxmega3", "avrxmega3", 0x803800},
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index f72cbe7257930..ff0c58ecf1a64 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -574,6 +574,9 @@ def : Device<"attiny3217", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1624", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1626", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1627", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3224", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3226", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3227", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega808", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega809", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega1608", FamilyXMEGA3, ELFArchXMEGA3>;
>From e95957a032acb7fe0495e5e8ab41808dba7b6cde Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Fri, 13 Jun 2025 15:57:11 +0200
Subject: [PATCH 3/9] Add missing avr64* series
---
clang/lib/Basic/Targets/AVR.cpp | 21 +++++++++++++++++++++
clang/lib/Driver/ToolChains/AVR.cpp | 21 +++++++++++++++++++++
llvm/lib/Target/AVR/AVRDevices.td | 21 +++++++++++++++++++++
3 files changed, 63 insertions(+)
diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp
index b0f7a1a674d32..bb750d4fae39c 100644
--- a/clang/lib/Basic/Targets/AVR.cpp
+++ b/clang/lib/Basic/Targets/AVR.cpp
@@ -350,6 +350,27 @@ static MCUInfo AVRMcus[] = {
// gcc 14 additions:
+ {"avr64da28", "__AVR_AVR64DA28__", "102", 1},
+ {"avr64da32", "__AVR_AVR64DA32__", "102", 1},
+ {"avr64da48", "__AVR_AVR64DA48__", "102", 1},
+ {"avr64da64", "__AVR_AVR64DA64__", "102", 1},
+ {"avr64db28", "__AVR_AVR64DB28__", "102", 1},
+ {"avr64db32", "__AVR_AVR64DB32__", "102", 1},
+ {"avr64db48", "__AVR_AVR64DB48__", "102", 1},
+ {"avr64db64", "__AVR_AVR64DB64__", "102", 1},
+ {"avr64dd14", "__AVR_AVR64DD14__", "102", 1},
+ {"avr64dd20", "__AVR_AVR64DD20__", "102", 1},
+ {"avr64dd28", "__AVR_AVR64DD28__", "102", 1},
+ {"avr64dd32", "__AVR_AVR64DD32__", "102", 1},
+ {"avr64du28", "__AVR_AVR64DU28__", "102", 1},
+ {"avr64du32", "__AVR_AVR64DU32__", "102", 1},
+ {"avr64ea28", "__AVR_AVR64EA28__", "102", 1},
+ {"avr64ea32", "__AVR_AVR64EA32__", "102", 1},
+ {"avr64ea48", "__AVR_AVR64EA48__", "102", 1},
+ {"avr64sd28", "__AVR_AVR64SD28__", "102", 1},
+ {"avr64sd32", "__AVR_AVR64SD32__", "102", 1},
+ {"avr64sd48", "__AVR_AVR64SD48__", "102", 1},
+
{"avr16dd20", "__AVR_AVR16DD20__", "103", 1},
{"avr16dd28", "__AVR_AVR16DD28__", "103", 1},
{"avr16dd32", "__AVR_AVR16DD32__", "103", 1},
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index a455f74f7b8db..731076d9754a9 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -334,6 +334,27 @@ constexpr struct {
// gcc 14 additions:
+ {"avr64da28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da48", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da64", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db48", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db64", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd14", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd20", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64du28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64du32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64ea28", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64ea32", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64ea48", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64sd28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64sd32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64sd48", "avrxmega2", "avrxmega2", 0x806000},
+
{"avr16dd20", "avrxmega3", "avrxmega3", 0x807800},
{"avr16dd28", "avrxmega3", "avrxmega3", 0x807800},
{"avr16dd32", "avrxmega3", "avrxmega3", 0x807800},
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index ff0c58ecf1a64..0d6c41ef7dff7 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -588,6 +588,27 @@ def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;
// Additions from gcc 14:
+def : Device<"avr64da28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da64", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db64", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd14", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd20", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64du28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64du32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd48", FamilyXMEGA2, ELFArchXMEGA2>;
+
def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;
>From 4aa1f64ba392e264c499f0a33669219f56910a0e Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Sat, 14 Jun 2025 10:03:28 +0200
Subject: [PATCH 4/9] Fix attiny322x identifier
---
clang/lib/Basic/Targets/AVR.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp
index bb750d4fae39c..bbe7b01ca036d 100644
--- a/clang/lib/Basic/Targets/AVR.cpp
+++ b/clang/lib/Basic/Targets/AVR.cpp
@@ -336,9 +336,9 @@ static MCUInfo AVRMcus[] = {
{"attiny1624", "__AVR_ATtiny1624__", "103", 1},
{"attiny1626", "__AVR_ATtiny1626__", "103", 1},
{"attiny1627", "__AVR_ATtiny1627__", "103", 1},
- {"attiny3224", "__AVR_ATtiny1624__", "103", 1},
- {"attiny3226", "__AVR_ATtiny1626__", "103", 1},
- {"attiny3227", "__AVR_ATtiny1627__", "103", 1},
+ {"attiny3224", "__AVR_ATtiny3224__", "103", 1},
+ {"attiny3226", "__AVR_ATtiny3226__", "103", 1},
+ {"attiny3227", "__AVR_ATtiny3227__", "103", 1},
{"atmega808", "__AVR_ATmega808__", "103", 1},
{"atmega809", "__AVR_ATmega809__", "103", 1},
{"atmega1608", "__AVR_ATmega1608__", "103", 1},
>From 0d72eefaeae3f92b25e626f5a3525ce64271f55d Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Sat, 14 Jun 2025 12:42:19 +0200
Subject: [PATCH 5/9] Remove EIJMP for xmega4
---
llvm/lib/Target/AVR/AVRDevices.td | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index 0d6c41ef7dff7..efe78391f7319 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -219,7 +219,7 @@ def FamilyXMEGA4 : Family<"xmega4",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
- FeatureEIJMPCALL, FeatureELPM,
+ FeatureELPM,
FeatureBREAK, FeatureLowByteFirst]>;
def FamilyXMEGA : Family<"xmega",
>From a53239a441fd539fa6b7953d9e1bb4f691907c17 Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Sat, 14 Jun 2025 17:43:27 +0200
Subject: [PATCH 6/9] Add xmega3 family definition
---
llvm/lib/Target/AVR/AVRDevices.td | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index efe78391f7319..f461dcdcae37e 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -209,6 +209,12 @@ def FamilyTiny
[FamilyAVR0, FeatureBREAK, FeatureSRAM, FeatureTinyEncoding,
FeatureSmallStack]>;
+def FamilyXMEGA2 : Family<"xmega2",
+ [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
+ FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
+ FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureBREAK, FeatureLowByteFirst]>;
+
def FamilyXMEGA3 : Family<"xmega3",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
>From 32c30e754349c67986b1322e33f2bc4853377ee1 Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Sun, 15 Jun 2025 09:08:19 +0200
Subject: [PATCH 7/9] Add new AVR test patterns
---
clang/test/Misc/target-invalid-cpu-note/avr.c | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/clang/test/Misc/target-invalid-cpu-note/avr.c b/clang/test/Misc/target-invalid-cpu-note/avr.c
index 86ffbb6838582..49d68bcc2edf8 100644
--- a/clang/test/Misc/target-invalid-cpu-note/avr.c
+++ b/clang/test/Misc/target-invalid-cpu-note/avr.c
@@ -311,6 +311,9 @@
// CHECK-SAME: {{^}}, attiny1624
// CHECK-SAME: {{^}}, attiny1626
// CHECK-SAME: {{^}}, attiny1627
+// CHECK-SAME: {{^}}, attiny3224
+// CHECK-SAME: {{^}}, attiny3226
+// CHECK-SAME: {{^}}, attiny3227
// CHECK-SAME: {{^}}, atmega808
// CHECK-SAME: {{^}}, atmega809
// CHECK-SAME: {{^}}, atmega1608
@@ -319,4 +322,66 @@
// CHECK-SAME: {{^}}, atmega3209
// CHECK-SAME: {{^}}, atmega4808
// CHECK-SAME: {{^}}, atmega4809
+// CHECK-SAME: {{^}}, avr64da28
+// CHECK-SAME: {{^}}, avr64da32
+// CHECK-SAME: {{^}}, avr64da48
+// CHECK-SAME: {{^}}, avr64da64
+// CHECK-SAME: {{^}}, avr64db28
+// CHECK-SAME: {{^}}, avr64db32
+// CHECK-SAME: {{^}}, avr64db48
+// CHECK-SAME: {{^}}, avr64db64
+// CHECK-SAME: {{^}}, avr64dd14
+// CHECK-SAME: {{^}}, avr64dd20
+// CHECK-SAME: {{^}}, avr64dd28
+// CHECK-SAME: {{^}}, avr64dd32
+// CHECK-SAME: {{^}}, avr64du28
+// CHECK-SAME: {{^}}, avr64du32
+// CHECK-SAME: {{^}}, avr64ea28
+// CHECK-SAME: {{^}}, avr64ea32
+// CHECK-SAME: {{^}}, avr64ea48
+// CHECK-SAME: {{^}}, avr64sd28
+// CHECK-SAME: {{^}}, avr64sd32
+// CHECK-SAME: {{^}}, avr64sd48
+// CHECK-SAME: {{^}}, avr16dd20
+// CHECK-SAME: {{^}}, avr16dd28
+// CHECK-SAME: {{^}}, avr16dd32
+// CHECK-SAME: {{^}}, avr16du14
+// CHECK-SAME: {{^}}, avr16du20
+// CHECK-SAME: {{^}}, avr16du28
+// CHECK-SAME: {{^}}, avr16du32
+// CHECK-SAME: {{^}}, avr32da28
+// CHECK-SAME: {{^}}, avr32da32
+// CHECK-SAME: {{^}}, avr32da48
+// CHECK-SAME: {{^}}, avr32db28
+// CHECK-SAME: {{^}}, avr32db32
+// CHECK-SAME: {{^}}, avr32db48
+// CHECK-SAME: {{^}}, avr32dd14
+// CHECK-SAME: {{^}}, avr32dd20
+// CHECK-SAME: {{^}}, avr32dd28
+// CHECK-SAME: {{^}}, avr32dd32
+// CHECK-SAME: {{^}}, avr32du14
+// CHECK-SAME: {{^}}, avr32du20
+// CHECK-SAME: {{^}}, avr32du28
+// CHECK-SAME: {{^}}, avr32du32
+// CHECK-SAME: {{^}}, avr16eb14
+// CHECK-SAME: {{^}}, avr16eb20
+// CHECK-SAME: {{^}}, avr16eb28
+// CHECK-SAME: {{^}}, avr16eb32
+// CHECK-SAME: {{^}}, avr16ea28
+// CHECK-SAME: {{^}}, avr16ea32
+// CHECK-SAME: {{^}}, avr16ea48
+// CHECK-SAME: {{^}}, avr32ea28
+// CHECK-SAME: {{^}}, avr32ea32
+// CHECK-SAME: {{^}}, avr32ea48
+// CHECK-SAME: {{^}}, avr32sd20
+// CHECK-SAME: {{^}}, avr32sd28
+// CHECK-SAME: {{^}}, avr32sd32
+// CHECK-SAME: {{^}}, avr128da28
+// CHECK-SAME: {{^}}, avr128da32
+// CHECK-SAME: {{^}}, avr128da48
+// CHECK-SAME: {{^}}, avr128da64
+// CHECK-SAME: {{^}}, avr128db28
+// CHECK-SAME: {{^}}, avr128db32
+// CHECK-SAME: {{^}}, avr128db48
+// CHECK-SAME: {{^}}, avr128db64
// CHECK-SAME: {{$}}
>From 40a342d4824d095e9f0d59a642c16ef93e1815dd Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Sun, 15 Jun 2025 14:05:03 +0200
Subject: [PATCH 8/9] Add ELPMX for xmega4
---
llvm/lib/Target/AVR/AVRDevices.td | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index f461dcdcae37e..86878b85a5c04 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -225,7 +225,7 @@ def FamilyXMEGA4 : Family<"xmega4",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
- FeatureELPM,
+ FeatureELPM, FeatureELPMX,
FeatureBREAK, FeatureLowByteFirst]>;
def FamilyXMEGA : Family<"xmega",
>From 16e7c9ad307dae8c5d9f04cc6e4c2497ec7aef77 Mon Sep 17 00:00:00 2001
From: Tom Vijlbrief <tvijlbrief at gmail.com>
Date: Sun, 15 Jun 2025 14:31:07 +0200
Subject: [PATCH 9/9] Update xmega2
---
llvm/lib/Target/AVR/AVRDevices.td | 2 ++
1 file changed, 2 insertions(+)
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index 86878b85a5c04..ad760d7403573 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -213,6 +213,7 @@ def FamilyXMEGA2 : Family<"xmega2",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureSPM, FeatureSPMX,
FeatureBREAK, FeatureLowByteFirst]>;
def FamilyXMEGA3 : Family<"xmega3",
@@ -226,6 +227,7 @@ def FamilyXMEGA4 : Family<"xmega4",
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
FeatureELPM, FeatureELPMX,
+ FeatureSPM, FeatureSPMX,
FeatureBREAK, FeatureLowByteFirst]>;
def FamilyXMEGA : Family<"xmega",
More information about the llvm-commits
mailing list