I assume with target you mean the backend? Consider the x86 backend. It
supports 32bit and 64bit mode, with the GNU x32 ABI in between. There
are three different executable formats support (ELF, PE, MachO) with
different constraints. Some platforms require 32bit alignment of the
stack, others require 128bit alignment. The list goes on. The triple specifies
the combination of target, OS and potentially file format and sub-ABI.
Joerg
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
I assume with target you mean the backend? Consider the x86 backend. It
supports 32bit and 64bit mode, with the GNU x32 ABI in between. There
are three different executable formats support (ELF, PE, MachO) with
different constraints. Some platforms require 32bit alignment of the
stack, others require 128bit alignment. The list goes on. The triple specifies
the combination of target, OS and potentially file format and sub-ABI.
Joerg
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
First, 64-bit x86 is "x86_64", and 32-bit is "i386" in the triple. For
ARM you'd probably want "thumbv8" or "aarch64". Also, "eabi" is only a
thing on ARM targets, try "gnu" for x86.
Cheers.
Tim.
> I need to see how they look, whether it is ARM, Mips or X86.
The Mips triples you're most likely to need are:
· mips-linux-gnu – 32-bit big-endian on GNU/Linux
· mipsel-linux-gnu – 32-bit little-endian on GNU/Linux
· mips64-linux-gnu – 64-bit big-endian on GNU/Linux
· mips64el-linux-gnu – 64-bit little-endian on GNU/Linux
I should mention that Mips has quite a few triple-related bugs but if you're just looking at assembly the one you're most likely to encounter is that mips-*/mipsel-* only work for 32-bit subtargets and mips64-*/mips64el-* only work for 64-bit subtargets. If you don't match them up correctly then you'll either get an assertion from the code generator or a crash. This isn't supposed to be the case but there's been some unfortunate misunderstandings about GNU triples and Clang triples (they're not quite the same thing) that are difficult to resolve.
> I need to see how they look, whether it is ARM, Mips or X86.
The Mips triples you're most likely to need are:
· mips-linux-gnu – 32-bit big-endian on GNU/Linux
· mipsel-linux-gnu – 32-bit little-endian on GNU/Linux
· mips64-linux-gnu – 64-bit big-endian on GNU/Linux
· mips64el-linux-gnu – 64-bit little-endian on GNU/Linux
I should mention that Mips has quite a few triple-related bugs but if you're just looking at assembly the one you're most likely to encounter is that mips-*/mipsel-* only work for 32-bit subtargets and mips64-*/mips64el-* only work for 64-bit subtargets. If you don't match them up correctly then you'll either get an assertion from the code generator or a crash. This isn't supposed to be the case but there's been some unfortunate misunderstandings about GNU triples and Clang triples (they're not quite the same thing) that are difficult to resolve.
On 12 March 2016 at 11:51, Rail Shafigulin via llvm-dev
<llvm...@lists.llvm.org> wrote:
> I tried every possible combination of --target I could think of but nothing
> worked. Would you mind helping me out?
First, 64-bit x86 is "x86_64", and 32-bit is "i386" in the triple. For
ARM you'd probably want "thumbv8" or "aarch64". Also, "eabi" is only a
thing on ARM targets, try "gnu" for x86.
Cheers.
Tim.
In general we follow the GCC options, documented at
https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html for x86 (and
similar places for ARM etc). There may be gaps in what Clang supports,
and possibly even oddities that we support but GNU doesn't (--target
being a case in point). But in general if you're trying to use an
option not listed there you should expect to have a bad time of it.
On 14 March 2016 at 11:37, Rail Shafigulin <ra...@esenciatech.com> wrote:
> clang-3.5: warning: argument unused during compilation: '-mfloat-abi=hard'
Fair enough, there's no soft-float ABI for x86_64.
> clang-3.5: warning: argument unused during compilation: '-mcpu=k8'
x86 uses -march and -mtune instead of -mcpu.
> clang-3.5: warning: argument unused during compilation: '-mfpu=SSE2'
I believe x86 uses "-msse2" for this, but since k8 already has SSE2
(like all 64-bit chips) it shouldn't be needed anyway.
> error: unable to create target: 'No available targets are compatible with
> this triple, see -version for the available targets.'
This I can't explain. It works for me here, where are you getting your
clang from?
> clang version 3.5.0
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
Perhaps try updating Clang? Version 3.5 is getting long in the tooth now.
> clang -S test.c -o test.msa.mips.s --target=mips-pc-linux-gnu -mmsa -mfp64 -mfloat-abi=hard -mcpu=mips32 -fslp-vectorize-aggressive -fslp-vectorize-aggressive
-fslp-vectorize -fvectorize -fno-lax-vector-conversions -O3
'-mcpu=mips32' should be '-mcpu=mips32r2' but even with that it doesn't vectorize your case. We haven't implemented TargetTransformInfo yet so we only get a very small amount of vectorization at the moment. As a quick experiment this afternoon, I tried a small
implementation that only reports the number of vector registers and their width. This seems to make a significant improvement to some of the tests in SingleSource/UnitTests/Vector but makes your test case considerably worse. We'll have to find time to implement
a proper TargetTransformInfo.
Also, you mentioned you were using clang 3.5 on another part of this thread. The 64-bit MIPS ABI's had a lot of bugs around that time, IIRC the majority of them were fixed in 3.5.1 and a couple rarer ones were fixed in 3.5.2 and 3.6.0.
From: Rail Shafigulin [ra...@esenciatech.com]
Sent: 14 March 2016 18:19
To: Daniel Sanders
Cc: Joerg Sonnenberger; llvm-dev
Subject: Re: [llvm-dev] clang triple and clang target
On Mon, Mar 14, 2016 at 8:27 AM, Daniel Sanders <Daniel....@imgtec.com> wrote: