https://github.com/denniwang updated https://github.com/llvm/llvm-project/pull/235039
>From c6e0df6802a0b78c0297a89d5801d567914e22f0 Mon Sep 17 00:00:00 2001 From: denniswang <[email protected]> Date: Thu, 22 Oct 2026 09:43:05 -0700 Subject: [PATCH 1/3] adding built in avr tablegen for clang --- clang/include/clang/Basic/BuiltinsAVR.td | 45 ++++++++++++++++++++++++ clang/include/clang/Basic/CMakeLists.txt | 4 +++ 2 files changed, 49 insertions(+) create mode 100644 clang/include/clang/Basic/BuiltinsAVR.td diff --git a/clang/include/clang/Basic/BuiltinsAVR.td b/clang/include/clang/Basic/BuiltinsAVR.td new file mode 100644 index 00000000000000..fdfd3ba9641306 --- /dev/null +++ b/clang/include/clang/Basic/BuiltinsAVR.td @@ -0,0 +1,45 @@ +//===--- BuiltinsAVR.td - AVR Builtin function database ---------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +include "clang/Basic/BuiltinsBase.td" + +def AVR_NOP : TargetBuiltin { + let Spellings = ["__builtin_avr_nop"]; + let Attributes = [NoThrow]; + let Prototype = "void()"; +} + +def AVR_SEI : TargetBuiltin { + let Spellings = ["__builtin_avr_sei"]; + let Attributes = [NoThrow]; + let Prototype = "void()"; +} + +def AVR_CLI : TargetBuiltin { + let Spellings = ["__builtin_avr_cli"]; + let Attributes = [NoThrow]; + let Prototype = "void()"; +} + +def AVR_SLEEP : TargetBuiltin { + let Spellings = ["__builtin_avr_sleep"]; + let Attributes = [NoThrow]; + let Prototype = "void()"; +} + +def AVR_WDR : TargetBuiltin { + let Spellings = ["__builtin_avr_wdr"]; + let Attributes = [NoThrow]; + let Prototype = "void()"; +} + +def AVR_SWAP : TargetBuiltin { + let Spellings = ["__builtin_avr_swap"]; + let Attributes = [NoThrow, Const]; + let Prototype = "unsigned char(unsigned char)"; +} \ No newline at end of file diff --git a/clang/include/clang/Basic/CMakeLists.txt b/clang/include/clang/Basic/CMakeLists.txt index a328abf9279701..8cb474d044bef9 100644 --- a/clang/include/clang/Basic/CMakeLists.txt +++ b/clang/include/clang/Basic/CMakeLists.txt @@ -107,6 +107,10 @@ clang_tablegen(BuiltinsAMDGPU.inc -gen-clang-builtins SOURCE BuiltinsAMDGPU.td TARGET ClangBuiltinsAMDGPU) +clang_tablegen(BuiltinsAVR.inc -gen-clang-builtins + SOURCE BuiltinsAVR.td + TARGET ClangBuiltinsAVR) + clang_tablegen(BuiltinsBPF.inc -gen-clang-builtins SOURCE BuiltinsBPF.td TARGET ClangBuiltinsBPF) >From aa90994d2ebdd925758942f69a689f87f6d3d958 Mon Sep 17 00:00:00 2001 From: denniswang <[email protected]> Date: Thu, 22 Oct 2026 10:23:53 -0700 Subject: [PATCH 2/3] removed old builtin def --- clang/include/clang/Basic/BuiltinsAVR.def | 47 ---------------------- clang/include/clang/Basic/TargetBuiltins.h | 5 ++- clang/include/module.modulemap | 1 - clang/lib/Basic/Targets/AVR.cpp | 21 +++++----- 4 files changed, 13 insertions(+), 61 deletions(-) delete mode 100644 clang/include/clang/Basic/BuiltinsAVR.def diff --git a/clang/include/clang/Basic/BuiltinsAVR.def b/clang/include/clang/Basic/BuiltinsAVR.def deleted file mode 100644 index 78b8daefef9340..00000000000000 --- a/clang/include/clang/Basic/BuiltinsAVR.def +++ /dev/null @@ -1,47 +0,0 @@ -//===--- BuiltinsAVR.def - AVR Builtin function database --------*- C++ -*-===// -// -// 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 the AVR-specific builtin function database. Users of -// this file must define the BUILTIN macro to make use of this information. -// -//===----------------------------------------------------------------------===// - -// Void instructions -BUILTIN(__builtin_avr_nop, "v", "n") -BUILTIN(__builtin_avr_sei, "v", "n") -BUILTIN(__builtin_avr_cli, "v", "n") -BUILTIN(__builtin_avr_sleep, "v", "n") -BUILTIN(__builtin_avr_wdr, "v", "n") - -// Swap nibbles -BUILTIN(__builtin_avr_swap, "UcUc", "nc") - -// TODO: -// Fractional multiply -// BUILTIN(__builtin_avr_fmul, "UiUcUc", "nc") -// BUILTIN(__builtin_avr_fmuls, "SiScSc", "nc") -// BUILTIN(__builtin_avr_fmulsu, "SiScUc", "nc") - -// Delay cycles -// BUILTIN(__builtin_avr_delay_cycles, "vULi", "n") - -// Emit N NOP instructions -// BUILTIN(__builtin_avr_nops, "vUi", "n") - -// Bit manipulation -// BUILTIN(__builtin_avr_insert_bits, "UcULiUcUc", "nc") - -// Flash segment query -// BUILTIN(__builtin_avr_flash_segment, "ScvC*", "nc") - -// __builtin_avr_mask1 -// __builtin_avr_strlen_flash -// __builtin_avr_strlen_flashx -// __builtin_avr_strlen_memx - -#undef BUILTIN diff --git a/clang/include/clang/Basic/TargetBuiltins.h b/clang/include/clang/Basic/TargetBuiltins.h index f069b7e52d13a5..97e835ee1f5c13 100644 --- a/clang/include/clang/Basic/TargetBuiltins.h +++ b/clang/include/clang/Basic/TargetBuiltins.h @@ -486,8 +486,9 @@ namespace clang { namespace AVR { enum { LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, -#define BUILTIN(ID, TYPE, ATTRS) BI##ID, -#include "clang/Basic/BuiltinsAVR.def" +#define GET_BUILTIN_ENUMERATORS +#include "clang/Basic/BuiltinsAVR.inc" +#undef GET_BUILTIN_ENUMERATORS LastTSBuiltin }; } // namespace AVR diff --git a/clang/include/module.modulemap b/clang/include/module.modulemap index 58a3a5b6282b9b..d9653c53d5e037 100644 --- a/clang/include/module.modulemap +++ b/clang/include/module.modulemap @@ -41,7 +41,6 @@ module Clang_Basic { textual header "clang/Basic/BuiltinHeaders.def" textual header "clang/Basic/BuiltinsAArch64NeonSVEBridge.def" textual header "clang/Basic/BuiltinsAArch64NeonSVEBridge_cg.def" - textual header "clang/Basic/BuiltinsAVR.def" textual header "clang/Basic/BuiltinsHexagonMapCustomDep.def" textual header "clang/Basic/BuiltinsLoongArchBase.def" textual header "clang/Basic/BuiltinsLoongArchLASX.def" diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp index 18db0a7807b539..86eaa3ffbaa00a 100644 --- a/clang/lib/Basic/Targets/AVR.cpp +++ b/clang/lib/Basic/Targets/AVR.cpp @@ -21,17 +21,16 @@ using namespace clang::targets; static constexpr int NumBuiltins = AVR::LastTSBuiltin - Builtin::FirstTSBuiltin; -static constexpr llvm::StringTable BuiltinStrings = - CLANG_BUILTIN_STR_TABLE_START -#define BUILTIN CLANG_BUILTIN_STR_TABLE -#include "clang/Basic/BuiltinsAVR.def" - ; - -static constexpr auto BuiltinInfos = Builtin::MakeInfos<NumBuiltins>({ -#define BUILTIN CLANG_BUILTIN_ENTRY -#define LIBBUILTIN CLANG_LIBBUILTIN_ENTRY -#include "clang/Basic/BuiltinsAVR.def" -}); +#define GET_BUILTIN_STR_TABLE +#include "clang/Basic/BuiltinsAVR.inc" +#undef GET_BUILTIN_STR_TABLE + +static constexpr Builtin::Info BuiltinInfos[] = { +#define GET_BUILTIN_INFOS +#include "clang/Basic/BuiltinsAVR.inc" +#undef GET_BUILTIN_INFOS +}; +static_assert(std::size(BuiltinInfos) == NumBuiltins); namespace clang { namespace targets { >From 397690e8f388007163c8a057cdc4ab6efe01a4f1 Mon Sep 17 00:00:00 2001 From: denniswang <[email protected]> Date: Fri, 23 Oct 2026 11:47:36 -0700 Subject: [PATCH 3/3] added past todos --- clang/include/clang/Basic/BuiltinsAVR.td | 25 +++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/BuiltinsAVR.td b/clang/include/clang/Basic/BuiltinsAVR.td index fdfd3ba9641306..2ad381993bfa39 100644 --- a/clang/include/clang/Basic/BuiltinsAVR.td +++ b/clang/include/clang/Basic/BuiltinsAVR.td @@ -42,4 +42,27 @@ def AVR_SWAP : TargetBuiltin { let Spellings = ["__builtin_avr_swap"]; let Attributes = [NoThrow, Const]; let Prototype = "unsigned char(unsigned char)"; -} \ No newline at end of file +} + +// TODO: +// Fractional multiply +// BUILTIN(__builtin_avr_fmul, "UiUcUc", "nc") +// BUILTIN(__builtin_avr_fmuls, "SiScSc", "nc") +// BUILTIN(__builtin_avr_fmulsu, "SiScUc", "nc") + +// Delay cycles +// BUILTIN(__builtin_avr_delay_cycles, "vULi", "n") + +// Emit N NOP instructions +// BUILTIN(__builtin_avr_nops, "vUi", "n") + +// Bit manipulation +// BUILTIN(__builtin_avr_insert_bits, "UcULiUcUc", "nc") + +// Flash segment query +// BUILTIN(__builtin_avr_flash_segment, "ScvC*", "nc") + +// __builtin_avr_mask1 +// __builtin_avr_strlen_flash +// __builtin_avr_strlen_flashx +// __builtin_avr_strlen_memx _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
