aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/TargetInfo.cpp
AgeCommit message (Collapse)Author
2011-04-14Implement ARM pcs attribute. Basically it's another way of calling ↵Anton Korobeynikov
convention selection (AAPCS or AAPCS+VFP), similar to fastcall / stdcall / whatevercall seen on x86. In particular, all library functions should always be AAPCS regardless of floating point ABI used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129534 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-05Set AAPCS-VFP calling convention accordingly and hard float ABI command ↵Sandeep Patel
handling. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128866 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-30Remove PHINode::reserveOperandSpace(). Instead, add a parameter toJay Foad
PHINode::Create() giving the (known or expected) number of operands. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128538 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-07When we adjust the inline ASM type, we need to take into account an earlyBill Wendling
clobber with the 'y' constraint. Otherwise, we get the wrong return type and an assert, because it created a '<1 x i64>' vector type instead of the x86_mmx type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127185 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-02Revert "Add CC_Win64ThisCall and set it in the necessary places."Tilmann Scheller
This reverts commit 126863. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126886 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-02Add CC_Win64ThisCall and set it in the necessary places.Tilmann Scheller
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126863 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-22lib/CodeGen/TargetInfo.cpp: On Win64, arg i128 should be emitted as INDIRECT.NAKAMURA Takumi
mingw-w64's i128 tweak should be done with x86_64-mingw32. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126186 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-19Re-instate r125819 and r125820 with no functionality changePeter Collingbourne
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126060 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-19Revert 125820 and 125819 to fix PR9266.Rafael Espindola
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126050 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-18Move TargetInfo::adjustInlineAsmType to TargetCodeGenInfoPeter Collingbourne
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125819 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-17Triple::MinGW64 is deprecated and removed. We can use Triple::MinGW32 instead.NAKAMURA Takumi
No one uses *-mingw64. mingw-w64 is represented as {i686|x86_64}-w64-mingw32. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125742 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-17Fix whitespace.NAKAMURA Takumi
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125741 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-02Add NetBSD target support. Patch by Joerg Sonnenberger.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124736 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-19lib/CodeGen/TargetInfo.cpp: Fix coding style and erase an obsolete comment.NAKAMURA Takumi
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123790 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-17lib/CodeGen/TargetInfo.cpp: Add Win64 calling conversion.NAKAMURA Takumi
FIXME: It would be incompatible to Microsoft's in one point. On mingw64-gcc, {i128} is expanded for args and returned as {rax, rdx}. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123692 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-11Remove special handling for opaque Neon vector types.Bob Wilson
Clang does not wrap the vectors in structs anymore so this isn't needed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123241 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-10Move DefaultABIInfo::classifyReturnType where it belongs. No functional change.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123195 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-191. Add some ABI information for the Microblaze.Wesley Peck
2. Add attibutes "interrupt_handler" and "save_volatiles" for the Microblaze target. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122184 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-12Use a twine.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118892 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-31Rename getBaseClassOffset to getBaseClassOffsetInBits and introduce a ↵Anders Carlsson
getBaseClassOffset which returns the offset in CharUnits. Do the same thing for getVBaseClassOffset. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117881 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-19Fix Whitespace.Michael J. Spencer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116798 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-18We shouldn't keep track of MMX registers "needed" separately from the SSEBill Wendling
registers needed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116772 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-18Reapply r116684 with fixes. The test cases needed to be updated.Bill Wendling
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116696 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-17Temporarily revert r116684. It was causing failures with Bill Wendling
Clang :: CodeGen/x86_32-arguments-darwin.c Clang :: CodeGen/x86_32-arguments-linux.c git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116687 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-17The "gcc.dg/compat/vector-1 -m32" test was broken after the MMX rewrite. TheBill Wendling
function parameters weren't converted to use the correct type (x86_mmx). Add a check, similar to the one in llvm-gcc, to see if we need the x86_mmx type for that function parameter. If so, it coerces the type to be that. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116684 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-11Per discussion with Sanjiv, remove the PIC16 target from mainline. When/ifChris Lattner
it comes back, it will be largely a rewrite, so keeping the old codebase in tree isn't helping anyone. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116191 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-23IRgen/ABI/ARM: Return large vectors in memory.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114619 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-23IRgen/ABI/ARM: Trust the backend to pass vectors correctly for the given ABI.Daniel Dunbar
- Therefore, we can lower out the NEON wrapper structs and pass the vectors directly. This makes a huge difference in the cleanliness of the IR after optimization. - I will trust, but verify, via future ABITest testing (for APCS-GNU, at least). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114618 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-16IRgen/ABI/x86-32: Realign indirect arguments when the ABI requires us to passDaniel Dunbar
them with a smaller alignment than the rest of codegen expects. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114115 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-16IRgen/ABI: Add support for realigning structures which are passed by indirectDaniel Dunbar
reference. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114114 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-16IRgen/ABI/x86_32/Darwin: On Darwin, only structures with SSE vector types ↵Daniel Dunbar
get passed with a non-default-stack-ABI-alignment (of 16). - This fixes the ABI convenient, but breaks codegen since we now have underaligned arguments. Marginal improvement overall though, and will be fixed in next commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114113 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-16IRgen/x86_32/Linux: Linux seems to align all stack objects to 4 bytes, unlikeDaniel Dunbar
Darwin. Checked vs the handiest Linux llvm-gcc I had around, someone on Linux is welcome to investigate more. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114112 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-01fix rdar://8360877 a really nasty miscompilation in Boost.XpressiveChris Lattner
caused by my ABI work. Passing: struct outer { int x; struct epsilon_matcher {} e; int f; }; as {i32,i32} isn't safe, because the offset of the second element needs to be at 8 when it is interpreted as a memory value. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112686 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-01same refactoring as before, this time on the argument side.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112684 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-01refactor some code to cut down on redundancy, no functionality change.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112683 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-31Add support for windows x86-64 varargs, patch by Cameron Esfahani!Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112603 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-30Fix PR8029, a x86-32 ABI regression in introduced in r112211Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112537 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26improve comments.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112214 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26fix 2xi16 to pass as i32 instead of <2 x i16>. The former passes inChris Lattner
memory (as required) the later now passes in an xmm register. This fixes gcc.dg/compat/vector_1 on x86-32. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112211 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26vector of long and ulong are also classified as INTEGER in x86-64 abi,Chris Lattner
this fixes rdar://8358475 a failure of the gcc.dg/compat/vector_1 abi test. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112205 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-261 x ulonglong needs to be classified as INTEGER, just like 1 x longlong,Chris Lattner
this fixes a miscompilation on the included testcase, rdar://8359248 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112201 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26tame an assertion, fixing rdar://8357396Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112174 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-25Finally pass "two floats in a 64-bit unit" as a <2 x float> instead ofChris Lattner
as a double in the x86-64 ABI. This allows us to generate much better code for certain things, e.g.: _Complex float f32(_Complex float A, _Complex float B) { return A+B; } Used to compile into (look at the integer silliness!): _f32: ## @f32 ## BB#0: ## %entry movd %xmm1, %rax movd %eax, %xmm1 movd %xmm0, %rcx movd %ecx, %xmm0 addss %xmm1, %xmm0 movd %xmm0, %edx shrq $32, %rax movd %eax, %xmm0 shrq $32, %rcx movd %ecx, %xmm1 addss %xmm0, %xmm1 movd %xmm1, %eax shlq $32, %rax addq %rdx, %rax movd %rax, %xmm0 ret Now we get: _f32: ## @f32 movdqa %xmm0, %xmm2 addss %xmm1, %xmm2 pshufd $16, %xmm2, %xmm2 pshufd $1, %xmm1, %xmm1 pshufd $1, %xmm0, %xmm0 addss %xmm1, %xmm0 pshufd $16, %xmm0, %xmm1 movdqa %xmm2, %xmm0 unpcklps %xmm1, %xmm0 ret and compile stuff like: extern float _Complex ccoshf( float _Complex ) ; float _Complex ccosf ( float _Complex z ) { float _Complex iz; (__real__ iz) = -(__imag__ z); (__imag__ iz) = (__real__ z); return ccoshf(iz); } into: _ccosf: ## @ccosf ## BB#0: ## %entry pshufd $1, %xmm0, %xmm1 xorps LCPI4_0(%rip), %xmm1 unpcklps %xmm0, %xmm1 movaps %xmm1, %xmm0 jmp _ccoshf ## TAILCALL instead of: _ccosf: ## @ccosf ## BB#0: ## %entry movd %xmm0, %rax movq %rax, %rcx shlq $32, %rcx shrq $32, %rax xorl $-2147483648, %eax ## imm = 0xFFFFFFFF80000000 addq %rcx, %rax movd %rax, %xmm0 jmp _ccoshf ## TAILCALL There is still "stuff to be done" here for the struct case, but this resolves rdar://6379669 - [x86-64 ABI] Pass and return _Complex float / double efficiently git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112111 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-25Fix horrible white space errors.Michael J. Spencer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112067 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-22Experiment with using first-class aggregates to represent member functionJohn McCall
pointers. I find the resulting code to be substantially cleaner, and it makes it very easy to use the same APIs for data member pointers (which I have conscientiously avoided here), and it avoids a plethora of potential inefficiencies due to excessive memory copying, but we'll have to see if it actually works. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111776 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-30fix PR5179 and correctly fix PR5831 to not miscompile.Chris Lattner
The X86-64 ABI code didn't handle the case when a struct would get classified and turn up as "NoClass INTEGER" for example. This is perfectly possible when the first slot is all padding (e.g. due to empty base classes). In this situation, the first 8-byte doesn't take a register at all, only the second 8-byte does. This fixes this by enhancing the x86-64 abi stuff to allow and handle this case, reverts the broken fix for PR5831, and enhances the target independent stuff to be able to handle an argument value in registers being accessed at an offset from the memory value. This is the last x86-64 calling convention related miscompile that I'm aware of. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109848 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-29move the last hunk of getCoerceResult into the placeChris Lattner
that needs it and remove getCoerceResult. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109807 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-29now that direct and coerce are merged, getCoerceResult gets simpler.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109805 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-29now that GetSSETypeAtOffset handles passing SSE class values asChris Lattner
float, the special case hack in getCoerceResult can go away. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109804 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-29Implement the clang-side of detection for when to pass asChris Lattner
<2 x float> instead of double. This works but can't be turned on until I teach codegen to pass <2 x float> as one XMM register instead of two. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109790 91177308-0d34-0410-b5e6-96231b3b80d8