- Aug 26, 2010
-
-
Daniel Dunbar authored
- Will be adding an executable test case to test-suite repo. llvm-svn: 112126
-
Chris Lattner authored
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 llvm-svn: 112111
-
- Aug 25, 2010
-
-
Michael J. Spencer authored
llvm-svn: 112067
-
John McCall authored
to the new constants. llvm-svn: 112047
-
John McCall authored
llvm-svn: 112044
-
Daniel Dunbar authored
as a truncation not a comparison to null. llvm-svn: 112021
-
John McCall authored
but not in C++, so don't emit aggregate loads of volatile references in null context in C++. Happens to have been caught by an assertion. We do not get the scalar case right. Volatiles are really broken. llvm-svn: 112019
-
Devang Patel authored
llvm-svn: 112002
-
- Aug 24, 2010
-
-
Devang Patel authored
llvm-svn: 111936
-
Daniel Dunbar authored
identify what version of the compiler was used to build something. llvm-svn: 111927
-
Devang Patel authored
llvm-svn: 111852
-
- Aug 23, 2010
-
-
Dan Gohman authored
to handle the case where the struct is only forward-declared. In this case, a temporary MDNode is not needed and not desired. llvm-svn: 111842
-
Fariborz Jahanian authored
objc-nonfragile-abi2 (radar 7824380). llvm-svn: 111823
-
Douglas Gregor authored
the ternary operator without a left-hand side in C++ (PR7726), from Jean-Daniel Dupas! llvm-svn: 111809
-
John McCall authored
llvm-svn: 111797
-
rdar://8340348Chris Lattner authored
That revision started classifying truly empty structs like "Y" and "X" as being NoClass/NoClass and turning them into 'ignore'. The call code turns around and allocates space for the ignored argument with GetUndefRValue. The bug is that GetUndefRValue would return the address as undef, instead of returning an object with a defined address but undefined contents. llvm-svn: 111794
-
John McCall authored
class; they should just be completely opaque throughout IR gen now, although I haven't really audited that. Fix a bug apparently inherited from gcc-4.2 where we failed to null-check member data pointers when performing derived-to-base or base-to-derived conversions on them. llvm-svn: 111789
-
John McCall authored
operator new[]. llvm-svn: 111788
-
- Aug 22, 2010
-
-
John McCall authored
Make CGT defer to the ABI on all member pointer types. This requires giving CGT a handle to the ABI. It's way easier to make that work if we avoid lazily creating the ABI. Make it so. llvm-svn: 111786
-
Douglas Gregor authored
llvm-svn: 111782
-
Douglas Gregor authored
implicitly-defined default constructor, zero-initialize the memory before calling the default constructor. Previously, we would only zero-initialize in the case of a trivial default constructor. Also, simplify the hideous logic that determines when we have a trivial default constructor and, therefore, don't need to emit any call at all. llvm-svn: 111779
-
John McCall authored
llvm-svn: 111777
-
John McCall authored
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. llvm-svn: 111776
-
John McCall authored
the ABI code. Implement correct semantics for these on ARM. I believe this completes the implementation of member function pointers on ARM. I think I'm going to switch member function pointers over to be non-aggregates while I have all this in mind. llvm-svn: 111774
-
John McCall authored
duplication between the constant and non-constant paths in all of this. Implement ARM ABI semantics for member pointer constants and conversion. llvm-svn: 111772
-
John McCall authored
llvm-svn: 111771
-
John McCall authored
Pretty much everything having to do with member pointers is ABI-specific. llvm-svn: 111770
-
Eli Friedman authored
llvm-svn: 111768
-
John McCall authored
llvm-svn: 111766
-
John McCall authored
No functionality change. llvm-svn: 111752
-
John McCall authored
it deserves its own enumerator. Obviously the implementations should closely follow the Itanium ABI except in cases of divergence. llvm-svn: 111749
-
- Aug 21, 2010
-
-
Daniel Dunbar authored
- Fixes PR5598. - Review appreciated. llvm-svn: 111726
-
Daniel Dunbar authored
llvm-svn: 111725
-
Daniel Dunbar authored
llvm-svn: 111724
-
Daniel Dunbar authored
llvm-svn: 111723
-
Daniel Dunbar authored
llvm-svn: 111722
-
Daniel Dunbar authored
llvm-svn: 111721
-
Daniel Dunbar authored
field (I think). - Doug, please check. llvm-svn: 111720
-
Daniel Dunbar authored
llvm-svn: 111719
-
Daniel Dunbar authored
llvm-svn: 111718
-