| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
|  | 
out of loops, just delete them.
llvm-svn: 112451
 | 
| | 
| 
| 
| 
| 
| 
|  | 
symtab manipulation, so its faster (in addition to being
more elegant)
llvm-svn: 112450
 | 
| | 
| 
| 
|  | 
llvm-svn: 112449
 | 
| | 
| 
| 
| 
| 
| 
|  | 
of AST to remove the hoisted instruction from the AST, since it
is no longer in the loop.
llvm-svn: 112448
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
LICM correctly.  When sinking an instruction, it should not add
entries for the sunk instruction to the AST, it should remove
the entry for the sunk instruction.  The blocks being sunk to
are not in the loop, so their instructions shouldn't be in the
AST (yet)!
llvm-svn: 112447
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
keeping them around until the pass is destroyed, keep them
around a) just when useful (not for outer loops) and b) destroy
them right after we use them.  This should reduce memory use
and fixes potential bugs where a loop is deleted and another
loop gets allocated to the same address.
llvm-svn: 112446
 | 
| | 
| 
| 
| 
| 
|  | 
claims that it preserves domfrontier if it doesn't really.
llvm-svn: 112445
 | 
| | 
| 
| 
| 
| 
| 
|  | 
for the unroller to pretend it supports updating it.  It still
has a horrible hack for DomTree.
llvm-svn: 112444
 | 
| | 
| 
| 
| 
| 
| 
|  | 
This has the side effect of reversing the order of most of
IVUser's results.
llvm-svn: 112442
 | 
| | 
| 
| 
| 
| 
| 
|  | 
other filtering techniques, as those may allow it to filter
out more obviously unprofitable candidates.
llvm-svn: 112441
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
LSRInstance data structures up to date. This fixes some
pessimizations caused by stale data which will be exposed
in an upcoming change.
llvm-svn: 112440
 | 
| | 
| 
| 
| 
| 
|  | 
NarrowSearchSpaceUsingHeuristics into separate functions.
llvm-svn: 112439
 | 
| | 
| 
| 
|  | 
llvm-svn: 112438
 | 
| | 
| 
| 
|  | 
llvm-svn: 112437
 | 
| | 
| 
| 
| 
| 
|  | 
the high-level logic.
llvm-svn: 112436
 | 
| | 
| 
| 
|  | 
llvm-svn: 112435
 | 
| | 
| 
| 
|  | 
llvm-svn: 112434
 | 
| | 
| 
| 
| 
| 
| 
|  | 
all applicable addrecs before recursing on getMulExpr, instead of
recursing on getMulExpr for each one.
llvm-svn: 112433
 | 
| | 
| 
| 
| 
| 
|  | 
operations.
llvm-svn: 112432
 | 
| | 
| 
| 
|  | 
llvm-svn: 112431
 | 
| | 
| 
| 
| 
| 
|  | 
with the Add code.
llvm-svn: 112430
 | 
| | 
| 
| 
|  | 
llvm-svn: 112429
 | 
| | 
| 
| 
|  | 
llvm-svn: 112428
 | 
| | 
| 
| 
| 
| 
|  | 
The IDX was treated as byte index, not element index.
llvm-svn: 112422
 | 
| | 
| 
| 
|  | 
llvm-svn: 112421
 | 
| | 
| 
| 
| 
| 
|  | 
preserves domfrontier.  It does preserve AA though.
llvm-svn: 112419
 | 
| | 
| 
| 
| 
| 
| 
|  | 
require DomFrontier.  Dropping this doesn't actually save any runs
of the pass though.
llvm-svn: 112418
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Among other things, this uses SSAUpdater instead of 
PromoteMemToReg.
llvm-svn: 112417
 | 
| | 
| 
| 
| 
| 
| 
|  | 
IR add/sub operations with one or both operands sign- or zero-extended.
Auto-upgrade the old intrinsics.
llvm-svn: 112416
 | 
| | 
| 
| 
|  | 
llvm-svn: 112412
 | 
| | 
| 
| 
|  | 
llvm-svn: 112411
 | 
| | 
| 
| 
| 
| 
|  | 
This leads to much simpler code.
llvm-svn: 112410
 | 
| | 
| 
| 
|  | 
llvm-svn: 112409
 | 
| | 
| 
| 
|  | 
llvm-svn: 112408
 | 
| | 
| 
| 
| 
| 
| 
|  | 
getUniqueExitBlocks instead of getExitBlocks and a manual
set to eliminate dupes.
llvm-svn: 112405
 | 
| | 
| 
| 
|  | 
llvm-svn: 112404
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
of the sets is volatile.  We were dropping the volatile bit of the
merged in set, leading (luckily) to assertions in cases like 
PR7535.  I cannot produce a testcase that repros with opt, but this
is obviously correct.
llvm-svn: 112402
 | 
| | 
| 
| 
|  | 
llvm-svn: 112401
 | 
| | 
| 
| 
|  | 
llvm-svn: 112400
 | 
| | 
| 
| 
| 
| 
|  | 
- Create T2I_bin_sw_irs to be like T2I_bin_w_irs, but that it sets the S bit.
llvm-svn: 112399
 | 
| | 
| 
| 
|  | 
llvm-svn: 112397
 | 
| | 
| 
| 
|  | 
llvm-svn: 112395
 | 
| | 
| 
| 
|  | 
llvm-svn: 112394
 | 
| | 
| 
| 
| 
| 
|  | 
it sets the CPSR register.
llvm-svn: 112393
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
times.  This patch causes llc and llvm-mc (which both default to
verbose-asm) to print out comments after a few common shuffle 
instructions which indicates the shuffle mask, e.g.:
	insertps	$113, %xmm3, %xmm0     ## xmm0 = zero,xmm0[1,2],xmm3[1]
	unpcklps	%xmm1, %xmm0    ## xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
	pshufd	$1, %xmm1, %xmm1        ## xmm1 = xmm1[1,0,0,0]
This is carefully factored to keep the information extraction (of the
shuffle mask) separate from the printing logic.  I plan to move the
extraction part out somewhere else at some point for other parts of
the x86 backend that want to introspect on the behavior of shuffles.
llvm-svn: 112387
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
insertp[sd] $0, which is a noop.  Before:
_f32:                                   ## @f32
	pshufd	$1, %xmm1, %xmm2
	pshufd	$1, %xmm0, %xmm3
	addss	%xmm2, %xmm3
	addss	%xmm1, %xmm0
                                        ## kill: XMM0<def> XMM0<kill> XMM0<def>
	insertps	$0, %xmm0, %xmm0
	insertps	$16, %xmm3, %xmm0
	ret
after:
_f32:                                   ## @f32
	movdqa	%xmm0, %xmm2
	addss	%xmm1, %xmm2
	pshufd	$1, %xmm1, %xmm1
	pshufd	$1, %xmm0, %xmm3
	addss	%xmm1, %xmm3
	movdqa	%xmm2, %xmm0
	insertps	$16, %xmm3, %xmm0
	ret
The extra movs are due to a random (poor) scheduling decision.
llvm-svn: 112379
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
when the top elements of a vector are undefined.  This happens all
the time for X86-64 ABI stuff because only the low 2 elements of
a 4 element vector are defined.  For example, on:
_Complex float f32(_Complex float A, _Complex float B) {
  return A+B;
}
We used to produce (with SSE2, SSE4.1+ uses insertps):
_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
We now produce:
_f32:                                   ## @f32
	movdqa	%xmm0, %xmm2
	addss	%xmm1, %xmm2
	pshufd	$1, %xmm1, %xmm1
	pshufd	$1, %xmm0, %xmm3
	addss	%xmm1, %xmm3
	movaps	%xmm2, %xmm0
	unpcklps	%xmm3, %xmm0
	ret
This implements rdar://8368414
llvm-svn: 112378
 | 
| | 
| 
| 
| 
| 
| 
|  | 
a new EltStride variable instead of reusing NumElems variable
for a non-obvious purpose.  No functionality change.
llvm-svn: 112377
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
According to the Microsoft documentation here:
http://msdn.microsoft.com/en-us/library/ms724284%28VS.85%29.aspx
this cast used in lib/System/Win32/Path.inc:
__int64 ft = *reinterpret_cast<__int64*>(&fi.ftLastWriteTime);
should not be done.  The documentation says: "Do not cast a pointer to a
FILETIME structure to either a ULARGE_INTEGER* or __int64* value because
it can cause alignment faults on 64-bit Windows."
llvm-svn: 112376
 | 
| | 
| 
| 
| 
| 
|  | 
and hasn't kept up with ToT.  Approved by Anton.
llvm-svn: 112375
 |