| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
Clobbering is exclusive not inclusive on register units.
For liveness, we need to consider all the preserved registers.
e.g. A regmask that clobbers YMM0 may preserve XMM0.
Units are only clobbered when all super-registers are clobbered.
llvm-svn: 192623
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Some clients may add block live ins and may track liveness over a
large scope. This guarantees an efficient implementation in all cases
with no memory allocation/deallocation, independent of the number of
target registers. It could be slightly less convenient but is fine in
the expected case.
llvm-svn: 192622
 | 
| | 
| 
| 
|  | 
llvm-svn: 192621
 | 
| | 
| 
| 
|  | 
llvm-svn: 192619
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Clean up creation of static member DIEs. We can create static member DIEs from
two places, so we call getOrCreateStaticMemberDIE from the two places.
getOrCreateStaticMemberDIE will get or create the context DIE first, then it
will check if the DIE already exists, if not, we create the static member DIE
and add it to the context.
Creation of static member DIEs are handled in a similar way as subprogram DIEs.
llvm-svn: 192618
 | 
| | 
| 
| 
| 
| 
|  | 
That wasn't confusing /at all/...
llvm-svn: 192617
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Per original comment, the intention of this loop
is to go ahead and break the critical edge
(in order to sink this instruction) if there's
reason to believe doing so might "unblock" the
sinking of additional instructions that define
registers used by this one.  The idea is that if
we have a few instructions to sink "together"
breaking the edge might be worthwhile.
This commit makes a few small changes
to help better realize this goal:
First, modify the loop to ignore registers
defined by this instruction.  We don't
sink definitions of physical registers,
and sinking an SSA definition isn't
going to unblock an upstream instruction.
Second, ignore uses of physical registers.
Instructions that define physical registers are
rejected for sinking, and so moving this one
won't enable moving any defining instructions.
As an added bonus, while virtual register
use-def chains are generally small due
to SSA goodness, iteration over the uses
and definitions (used by hasOneNonDBGUse)
for physical registers like EFLAGS
can be rather expensive in practice.
(This is the original reason for looking at this)
Finally, to keep things simple continue
to only consider this trick for registers that
have a single use (via hasOneNonDBGUse),
but to avoid spuriously breaking critical edges
only do so if the definition resides
in the same MBB and therefore this one directly
blocks it from being sunk as well.
If sinking them together is meant to be,
let the iterative nature of this pass
sink the definition into this block first.
Update tests to accomodate this change,
add new testcase where sinking avoids pipeline stalls.
llvm-svn: 192608
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
They were leftover from the old profiling support.
Patch by Alastair Murray.
llvm-svn: 192605
 | 
| | 
| 
| 
|  | 
llvm-svn: 192604
 | 
| | 
| 
| 
| 
| 
|  | 
avoid a heap allocation when this is the case.
llvm-svn: 192602
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Currently MSan checks that arguments of *cvt* intrinsics are fully initialized.
That's too much to ask: some of them only operate on lower half, or even
quarter, of the input register.
llvm-svn: 192599
 | 
| | 
| 
| 
|  | 
llvm-svn: 192596
 | 
| | 
| 
| 
|  | 
llvm-svn: 192591
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Some previous implicit defaults have changed, for example FP and NEON
are now on by default.
llvm-svn: 192590
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
List of instructions:
bclri.{b,h,w,d}
binsli.{b,h,w,d}
binsri.{b,h,w,d}
bnegi.{b,h,w,d}
bseti.{b,h,w,d}
sat_s.{b,h,w,d}
sat_u.{b,h,w,d}
slli.{b,h,w,d}
srai.{b,h,w,d}
srari.{b,h,w,d}
srli.{b,h,w,d}
srlri.{b,h,w,d}
llvm-svn: 192589
 | 
| | 
| 
| 
| 
| 
| 
|  | 
List of instructions:
and.v, bmnz.v, bmz.v, bsel.v, nor.v, or.v, xor.v.
llvm-svn: 192588
 | 
| | 
| 
| 
|  | 
llvm-svn: 192587
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
List of instructions:
copy_s.{b,h,w}
copy_u.{b,h,w}
sldi.{b,h,w,d}
splati.{b,h,w,d}
llvm-svn: 192586
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
INSERT is the first type of MSA instruction that requires a change to the way
MSA registers are parsed. This happens because MSA registers may be suffixed by
an index in the form of an immediate or a general purpose register. The changes
to parseMSARegs reflect that requirement.
llvm-svn: 192582
 | 
| | 
| 
| 
|  | 
llvm-svn: 192575
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
The alignment of allocated space was wrong, see Bugzila 17345.
Done by Zvi Rackover <zvi.rackover@intel.com>.
llvm-svn: 192573
 | 
| | 
| 
| 
| 
| 
|  | 
instructions.
llvm-svn: 192568
 | 
| | 
| 
| 
| 
| 
|  | 
instructions to parse either GR32 or GR64 without resorting to duplicating instructions.
llvm-svn: 192567
 | 
| | 
| 
| 
| 
| 
|  | 
is a shorter encoding that was part of SSE2, but a memory form was added in SSE4.1. This is the register form of that encoding.
llvm-svn: 192566
 | 
| | 
| 
| 
| 
| 
|  | 
disassembler tables. Add PINSRWrr64i to complement the AVX version.
llvm-svn: 192565
 | 
| | 
| 
| 
|  | 
llvm-svn: 192564
 | 
| | 
| 
| 
| 
| 
|  | 
produce a 1-bit result so we can just use SUBREG_TO_REG to extend the 32-bit versions.
llvm-svn: 192562
 | 
| | 
| 
| 
| 
| 
|  | 
We don't delay load it so it shouldn't be going anywhere.
llvm-svn: 192561
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This can happen when processing command line arguments, which
are often stored as std::string's and later turned into
StringRef's via std::string::data().  Unfortunately this
is not guaranteed to return a null-terminated string
until C++11, causing breakage on platforms that don't do this.
llvm-svn: 192558
 | 
| | 
| 
| 
|  | 
llvm-svn: 192557
 | 
| | 
| 
| 
|  | 
llvm-svn: 192556
 | 
| | 
| 
| 
|  | 
llvm-svn: 192555
 | 
| | 
| 
| 
|  | 
llvm-svn: 192554
 | 
| | 
| 
| 
|  | 
llvm-svn: 192553
 | 
| | 
| 
| 
| 
| 
| 
|  | 
It makes apparently no change it to set this bit or not but the
docs recommand to left it cleared.
llvm-svn: 192552
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
We were using an anti-pattern of:
 - LoadLibrary
 - GetProcAddress
 - FreeLibrary
This is problematic because of several reasons:
 - We are holding on to pointers into a library we just unloaded.
 - Calling LoadLibrary results in an increase in the reference count of
   the library in question and any libraries that it depends on and
   so-on and so-forth.  This is none too quick.
Instead, use GetModuleHandleEx with GET_MODULE_HANDLE_EX_FLAG_PIN.  This
is done because because we didn't bring the reference for the library
into existence and therefor shouldn't count on it being around later.
llvm-svn: 192550
 | 
| | 
| 
| 
| 
| 
|  | 
(This is triggered by current lit tests)
llvm-svn: 192549
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Before this patch we relied on the order of phi nodes when we looked for phi
nodes of the same type. This could prevent vectorization of cases where there
was a phi node of a second type in between phi nodes of some type.
This is important for vectorization of an internal graphics kernel. On the test
suite + external on x86_64 (and on a run on armv7s) it showed no impact on
either performance or compile time.
radar://15024459
llvm-svn: 192537
 | 
| | 
| 
| 
| 
|  | 
Contributed-by:  Peter Zotov  <whitequark@whitequark.org>
llvm-svn: 192536
 | 
| | 
| 
| 
| 
| 
|  | 
CodeGenOnly.
llvm-svn: 192525
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
enabled.
Patch by: Jay Cornwall
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 192523
 | 
| | 
| 
| 
| 
| 
|  | 
disassembler.
llvm-svn: 192522
 | 
| | 
| 
| 
| 
| 
|  | 
they can be better handled and optimized in the Mips16 constant island code.
llvm-svn: 192520
 | 
| | 
| 
| 
|  | 
llvm-svn: 192519
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
The form must be a reference form in addDIEEntry. Which reference form to
use will be decided by the callee.
No functionality change.
llvm-svn: 192517
 | 
| | 
| 
| 
|  | 
llvm-svn: 192504
 | 
| | 
| 
| 
|  | 
llvm-svn: 192499
 | 
| | 
| 
| 
|  | 
llvm-svn: 192492
 | 
| | 
| 
| 
|  | 
llvm-svn: 192487
 | 
| | 
| 
| 
| 
| 
|  | 
This doesn't change the meaning of the output, but makes look right. PR17539.
llvm-svn: 192483
 |