[llvm-dev] How to get CLang array alloca alignments to be smaller than 16 bytes?

Tim Northover via llvm-dev llvm-dev at lists.llvm.org
Sun May 5 10:07:25 PDT 2019


(Adding llvm-dev back in, in case someone else searches with similar
questions; though cfe-dev might be better for these issues).

On Sun, 5 May 2019 at 17:54, Joan Lluch <joan.lluch at icloud.com> wrote:
> I have implemented all the steps to register a target backend for LLVM and so far I’m doing ok with it, but I do not know how to select a particular target on Clang. I just modified the “TargetInfo.cpp” file as I posted on my previous email to get 16 bit ints. So, any more insights will be appreciated.

There are probably about 5-10 different places that need at least
basic modification for a new target in Clang. It's something done
pretty rarely so there's not really any documentation, I'd suggest
grepping the source for an existing target (e.g. aarch64) and
copy/pasting that with modifications for yours.

This will mostly involve creating a few new subclasses for your
target, and telling generic clang code about them in one or two spots,
but I'm afraid I don't recall exact files & lines.

If you can run "clang -target myarch-none-elf" and get a Module
targeting your CPU (i.e. with the correct "target triple" and
"datalayout") that's a good first step. At some point you'll want to
actually think about the ABI decisions you've made and perhaps modify
them (like this array issue), but to begin with you can leave it as
is.

> On the other hand I’m unable to find LargeArrayMinSize in any project files (not even in lib/Basic/Targets/X86.cpp)

Sorry, I think that may actually be "LargeArrayMinWidth". I
investigated on a different computer to where I typed up my first
reply so didn't have the exact text on screen.

>  LargeArrayAlign is only in TargetInfo.h and TargetInfo.cpp which is set to a value of 0 (Zero)

The default is set to 0 in TargetInfo.cpp, but I see it overridden in
X86.h, even in the 7.0 branch (again, typo in my original comment,
where I said .cpp). You'll be creating the equivalent file as part of
adding support to Clang for your target.

Cheers.

Tim.


More information about the llvm-dev mailing list