| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
twice. This showed up as an assert on the odd test case because we generated the
decl map entry twice.
llvm-svn: 112943
|
|
|
|
| |
llvm-svn: 112898
|
|
|
|
|
|
|
| |
make it clear what they're testing so there is no way to know it's right
or to update it.
llvm-svn: 112897
|
|
|
|
| |
llvm-svn: 112871
|
|
|
|
|
|
| |
in a comment.
llvm-svn: 112813
|
|
|
|
| |
llvm-svn: 112537
|
|
|
|
| |
llvm-svn: 112212
|
|
|
|
|
|
|
| |
memory (as required) the later now passes in an xmm register. This
fixes gcc.dg/compat/vector_1 on x86-32.
llvm-svn: 112211
|
|
|
|
|
|
|
| |
this fixes rdar://8358475 a failure of the gcc.dg/compat/vector_1 abi
test.
llvm-svn: 112205
|
|
|
|
|
|
| |
this fixes a miscompilation on the included testcase, rdar://8359248
llvm-svn: 112201
|
|
|
|
| |
llvm-svn: 112174
|
|
|
|
| |
llvm-svn: 112112
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 112043
|
|
|
|
|
|
| |
as a truncation not a comparison to null.
llvm-svn: 112021
|
|
|
|
| |
llvm-svn: 112002
|
|
|
|
|
|
|
| |
some bugs in setting allowsRegister on the ones there.
8348447.
llvm-svn: 111980
|
|
|
|
| |
llvm-svn: 111852
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 111738
|
|
|
|
| |
llvm-svn: 111727
|
|
|
|
|
|
|
| |
- Fixes PR5598.
- Review appreciated.
llvm-svn: 111726
|
|
|
|
| |
llvm-svn: 111712
|
|
|
|
|
|
|
| |
(instead of sign extending) to match ICC. GCC is changing this in
a series of their own PRs (e.g. 41323).
llvm-svn: 111637
|
|
|
|
| |
llvm-svn: 111515
|
|
|
|
|
|
| |
return values (except predicates)
llvm-svn: 111511
|
|
|
|
|
|
| |
vec_pack, vec_sld, vec_splat) with bool/pixel arguments and return values
llvm-svn: 111509
|
|
|
|
| |
llvm-svn: 111141
|
|
|
|
|
|
| |
block's helper function. Fixes radar 7860965.
llvm-svn: 110988
|
|
|
|
| |
llvm-svn: 110884
|
|
|
|
|
|
| |
treats that as a contract to be fulfilled by any replacements.
llvm-svn: 110864
|
|
|
|
| |
llvm-svn: 110844
|
|
|
|
|
|
|
| |
- We don't recognize double or NEON register names yet -- we don't have the
infrastructure to generate the right clobbers for them.
llvm-svn: 110775
|
|
|
|
| |
llvm-svn: 110774
|
|
|
|
|
|
| |
__builtin_shufflevector with the appropriate arguments
llvm-svn: 110771
|
|
|
|
|
|
| |
__builtin_shufflevector with the appropriate arguments
llvm-svn: 110768
|
|
|
|
|
|
| |
__builtin_shufflevector with the appropriate arguments
llvm-svn: 110766
|
|
|
|
|
|
| |
simplify it later. For now revert.
llvm-svn: 110738
|
|
|
|
|
|
| |
we have the full fix.
llvm-svn: 110706
|
|
|
|
| |
llvm-svn: 110697
|
|
|
|
|
|
| |
constant variable.
llvm-svn: 110660
|
|
|
|
|
|
| |
remove the dup builtins
llvm-svn: 110646
|
|
|
|
|
|
| |
code gen bug to check whether debug info is generated for such variables or not.
llvm-svn: 110640
|
|
|
|
| |
llvm-svn: 110530
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
__overflow_handler entrypoint that David Chisnall made up.
Calling __overflow_handler is not part of the contract of
-ftrapv provided by GCC, and should never have been checked
in in the first place.
According to:
http://permalink.gmane.org/gmane.comp.compilers.clang.devel/8699
David is using this for some of arbitrary precision integer stuff
or something, which is not an appropriate thing to implement on
this.
llvm-svn: 110490
|
|
|
|
|
|
| |
used for the test.
llvm-svn: 110431
|
|
|
|
|
|
| |
Remove them
llvm-svn: 110399
|
|
|
|
| |
llvm-svn: 110347
|
|
|
|
| |
llvm-svn: 110316
|
|
|
|
| |
llvm-svn: 110178
|