| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
vectors that are the same size. Fix up testcases accordingly and add a new one
to make sure we still error if lax vector conversions are disabled.
Fixes rdar://8328190
llvm-svn: 112122
|
| |
|
|
|
|
|
| |
into the clients", because the C standard library sucks. Where's my
stable sort, huh?
llvm-svn: 112121
|
| |
|
|
|
|
| |
and was over-complicated, and replacing it with a simple implementation.
llvm-svn: 112120
|
| |
|
|
| |
llvm-svn: 112119
|
| |
|
|
|
|
|
| |
a VLD result was not used (Radar 8355607). It should also fix pr7988, but
I haven't verified that yet.
llvm-svn: 112118
|
| |
|
|
| |
llvm-svn: 112117
|
| |
|
|
| |
llvm-svn: 112116
|
| |
|
|
| |
llvm-svn: 112115
|
| |
|
|
|
|
|
|
| |
This works courtesy of the new SmallVector<..., 0> specialization that
doesn't require a complete type. Note that you'll need to pull at least
SmallVector.h from LLVM to compile successfully.
llvm-svn: 112114
|
| |
|
|
|
|
| |
builder. I will investigate tonight.
llvm-svn: 112113
|
| |
|
|
| |
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
|
| |
|
|
|
|
| |
faster on large modules.
llvm-svn: 112110
|
| |
|
|
| |
llvm-svn: 112109
|
| |
|
|
|
|
|
|
|
|
|
| |
with the VST4 instructions. Until after register allocation, we want to
represent sets of adjacent registers by a single super-register. These
VST4 pseudo instructions have a single QQ or QQQQ source register operand.
They get expanded to the real VST4 instructions with 4 separate D register
operands. Once this conversion is complete, we'll be able to remove the
NEONPreAllocPass and avoid some fragile and hacky code elsewhere.
llvm-svn: 112108
|
| |
|
|
|
|
| |
called for arrays with more than 1 dimension.
llvm-svn: 112107
|
| |
|
|
|
|
|
| |
not require its type argument to be complete if no members are
actually used.
llvm-svn: 112106
|
| |
|
|
|
|
| |
trivial.
llvm-svn: 112105
|
| |
|
|
| |
llvm-svn: 112104
|
| |
|
|
| |
llvm-svn: 112103
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
o SBDebugger.GetCurrentTarget()
o SBTarget.GetProcess()
o SBProcess.GetAddressByteSize()
in order to make sure that, indeed, 64-bit, followed by 32-bit processes have
been launched.
Added invoke() method to TestBase to factor in the tracing logic in one place.
This method allows an object to call a method with no arg reflectively.
llvm-svn: 112102
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
expanding: e.g. <2 x float> -> <4 x float> instead of -> 2 floats. This
affects two places in the code: handling cross block values and handling
function return and arguments. Since vectors are already widened by
legalizetypes, this gives us much better code and unblocks x86-64 abi
and SPU abi work.
For example, this (which is a silly example of a cross-block value):
define <4 x float> @test2(<4 x float> %A) nounwind {
%B = shufflevector <4 x float> %A, <4 x float> undef, <2 x i32> <i32 0, i32 1>
%C = fadd <2 x float> %B, %B
br label %BB
BB:
%D = fadd <2 x float> %C, %C
%E = shufflevector <2 x float> %D, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
ret <4 x float> %E
}
Now compiles into:
_test2: ## @test2
## BB#0:
addps %xmm0, %xmm0
addps %xmm0, %xmm0
ret
previously it compiled into:
_test2: ## @test2
## BB#0:
addps %xmm0, %xmm0
pshufd $1, %xmm0, %xmm1
## kill: XMM0<def> XMM0<kill> XMM0<def>
insertps $0, %xmm0, %xmm0
insertps $16, %xmm1, %xmm0
addps %xmm0, %xmm0
ret
This implements rdar://8230384
llvm-svn: 112101
|
| |
|
|
| |
llvm-svn: 112100
|
| |
|
|
| |
llvm-svn: 112099
|
| |
|
|
|
|
|
|
|
|
| |
- Removed the assumption that __block vars are all non-constant
- Simplified some repetitive code in RunAnalysis
- Added block walking support
- Code/comments cleanup
- Separated out test for block pseudoconstants
llvm-svn: 112098
|
| |
|
|
| |
llvm-svn: 112097
|
| |
|
|
|
|
| |
cursors that come before a macro instantiation. Fixes <rdar://problem/7974151>.
llvm-svn: 112096
|
| |
|
|
|
|
|
| |
into the clients, e.g., the printing code-completion consumer and
c-index-test. Clients may want to re-sort the results anyway.
llvm-svn: 112095
|
| |
|
|
|
|
|
| |
Clients of Sema don't need to know (for example) the list of diagnostics we
support.
llvm-svn: 112093
|
| |
|
|
| |
llvm-svn: 112092
|
| |
|
|
|
|
| |
instructions, not when remapping modules.
llvm-svn: 112091
|
| |
|
|
| |
llvm-svn: 112090
|
| |
|
|
|
|
| |
clang -O3.
llvm-svn: 112089
|
| |
|
|
| |
llvm-svn: 112086
|
| |
|
|
| |
llvm-svn: 112085
|
| |
|
|
| |
llvm-svn: 112084
|
| |
|
|
| |
llvm-svn: 112083
|
| |
|
|
|
|
|
| |
from MDValueList between each function, now that the bitcode
writer is reusing the index space for function-local metadata.
llvm-svn: 112082
|
| |
|
|
| |
llvm-svn: 112081
|
| |
|
|
| |
llvm-svn: 112080
|
| |
|
|
| |
llvm-svn: 112079
|
| |
|
|
| |
llvm-svn: 112078
|
| |
|
|
|
|
| |
Patch by Adam Treat!
llvm-svn: 112077
|
| |
|
|
| |
llvm-svn: 112076
|
| |
|
|
|
|
|
| |
When doing copy/paste/modify, it's apparently rather important to remember
the 'modify' bit...
llvm-svn: 112075
|
| |
|
|
|
|
|
|
| |
there's no point matching further sub strings; the expect() already fails.
Also cleaned up the assert message for VARIABLES_DISPLAYED_CORRECTLY.
llvm-svn: 112074
|
| |
|
|
| |
llvm-svn: 112073
|
| |
|
|
|
|
| |
directly folded into a constant by FE.
llvm-svn: 112072
|
| |
|
|
|
|
|
|
|
| |
mechanism seems to work fine on my MacBook Pro in some limited test cases.
The default maxLaunchCount and timeWait variables used in the scheme can be
overridden by the env variables LLDB_MAX_LAUNCH_COUNT and LLDB_TIME_WAIT.
llvm-svn: 112071
|
| |
|
|
|
|
|
|
| |
code-completion results cached by ASTUnit, sort the resulting result
set. This makes testing far, far easier, so this commit also includes
tests for the previous few fixes.
llvm-svn: 112070
|