| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
64-bit mode.
llvm-svn: 153680
|
| |
|
|
| |
llvm-svn: 153672
|
| |
|
|
| |
llvm-svn: 153671
|
| |
|
|
| |
llvm-svn: 153667
|
| |
|
|
|
|
|
|
|
|
|
|
| |
CodeGenPrepare sinks compare instructions down to their uses to prevent
live flags and predicate registers across basic blocks.
PRE of a compare instruction prevents that, forcing the i1 compare
result into a general purpose register. That is usually more expensive
than the redundant compare PRE was trying to eliminate in the first
place.
llvm-svn: 153657
|
| |
|
|
|
|
| |
the end of a non-void function in Release builds.
llvm-svn: 153643
|
| |
|
|
|
|
|
|
|
|
| |
http://llvm.org/docs/SourceLevelDebugging.html#objcproperty
including type and DECL. Expand the metadata needed accordingly.
rdar://11144023
llvm-svn: 153639
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Module-level ASM may contain definitions of functions and globals. However, we
were not telling the linker that these globals had definitions. As far as it was
concerned, they were just declarations.
Attempt to resolve this by inserting module-level ASM functions and globals into
the '_symbol' set so that the linker will know that they have values.
This gets us further towards our goal of compiling LLVM, but it still has
problems when linking libLTO.dylib because of the `-dead_strip' flag that's
passed to the linker.
<rdar://problem/11124216>
llvm-svn: 153638
|
| |
|
|
|
|
| |
with 'v' version of instructions.
llvm-svn: 153636
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a code change to add support for changing instruction sequences of the form:
load
inc/dec of 8/16/32/64 bits
store
into the appropriate X86 inc/dec through memory instruction:
inc[qlwb] / dec[qlwb]
The checks that were in X86DAGToDAGISel::Select(SDNode *Node)>>ISD::STORE have been extracted to isLoadIncOrDecStore and reworked to use the better
named wrappers for getOperand(unsigned) (e.g. getOffset()) and replaced Chain.getNode() with LoadNode. The comments have also been expanded.
llvm-svn: 153635
|
| |
|
|
| |
llvm-svn: 153634
|
| |
|
|
| |
llvm-svn: 153632
|
| |
|
|
| |
llvm-svn: 153623
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a code change to add support for changing instruction sequences of the form:
load
inc/dec of 8/16/32/64 bits
store
into the appropriate X86 inc/dec through memory instruction:
inc[qlwb] / dec[qlwb]
The checks that were in X86DAGToDAGISel::Select(SDNode *Node)>>ISD::STORE have been extracted to isLoadIncOrDecStore and reworked to use the better
named wrappers for getOperand(unsigned) (e.g. getOffset()) and replaced Chain.getNode() with LoadNode. The comments have also been expanded.
llvm-svn: 153617
|
| |
|
|
|
|
|
|
|
|
| |
Some targets still mess up the liveness information, but that isn't
verified after MRI->invalidateLiveness().
The verifier can still check other useful things like register classes
and CFG, so it should be enabled after all passes.
llvm-svn: 153615
|
| |
|
|
|
|
|
|
|
|
| |
The late scheduler depends on accurate liveness information if it is
breaking anti-dependencies, so we should be able to verify it.
Relax the terminator checking in the machine code verifier so it can
handle the basic blocks created by if conversion.
llvm-svn: 153614
|
| |
|
|
| |
llvm-svn: 153612
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
When an strd instruction doesn't get the registers it wants, it can be
expanded into two str instructions. Make sure the first str doesn't kill
the base register in the case where the base and data registers are
identical:
t2STRi12 %R0<kill>, %R0, 4, pred:14, pred:%noreg
t2STRi12 %R2<kill>, %R0, 8, pred:14, pred:%noreg
<rdar://problem/11101911>
llvm-svn: 153611
|
| |
|
|
|
|
|
|
|
|
|
| |
When a number of sub-register VLRDS instructions are combined into a
VLDM, preserve any super-register implicit defs. This is required to
keep the register scavenger and machine code verifier happy.
Enable machine code verification after ARMLoadStoreOptimizer.
ARM/2012-01-26-CopyPropKills.ll was failing because of this.
llvm-svn: 153610
|
| |
|
|
| |
llvm-svn: 153609
|
| |
|
|
| |
llvm-svn: 153607
|
| |
|
|
| |
llvm-svn: 153604
|
| |
|
|
|
|
|
|
|
| |
The arm_neon intrinsics can create virtual registers from the DPair
register class which allows both even-odd and odd-even D-register pairs.
This fixes PR12389.
llvm-svn: 153603
|
| |
|
|
| |
llvm-svn: 153599
|
| |
|
|
| |
llvm-svn: 153598
|
| |
|
|
|
|
|
| |
Branch folding invalidates liveness and disables liveness verification
on some targets.
llvm-svn: 153597
|
| |
|
|
|
|
|
|
|
| |
Extract the liveness verification into its own method.
This makes it possible to run the machine code verifier after liveness
information is no longer required to be valid.
llvm-svn: 153596
|
| |
|
|
|
|
| |
a bunch of comments for the various functions. No intended functionality change.
llvm-svn: 153595
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Revert r153519: "ARMLoadStoreOptimizer invalidates register liveness."
These patches caused miscompilations in povray by turning off branch
folding's updating of live-in lists.
It turns out the the late scheduler depends on the live-in lists, even
if it doesn't need correct kill flags.
<rdar://problem/11139228>
llvm-svn: 153593
|
| |
|
|
|
|
|
|
|
| |
This avoids the silly double search:
if (isLiveIn(Reg))
removeLiveIn(Reg);
llvm-svn: 153592
|
| |
|
|
|
|
|
|
| |
Original commit message for r153521 (aka r153423):
Use the new range metadata in computeMaskedBits and add a new optimization to
instruction simplify that lets us remove an and when loding a boolean value.
llvm-svn: 153587
|
| |
|
|
|
|
| |
indices weren't commuted
llvm-svn: 153579
|
| |
|
|
|
|
| |
that we just determined to be constant, replace all loads from it with a zero value.
llvm-svn: 153576
|
| |
|
|
| |
llvm-svn: 153574
|
| |
|
|
| |
llvm-svn: 153573
|
| |
|
|
|
|
|
|
|
| |
blocks in the function cloner. This removes the last case of trivially
dead code that I've been seeing in the wild getting inlined, analyzed,
re-inlined, optimized, only to be deleted. Nukes a FIXME from the
cleanup tests.
llvm-svn: 153572
|
| |
|
|
| |
llvm-svn: 153571
|
| |
|
|
|
|
|
|
| |
and not the rest of the member tag.
Fixes PR11695
llvm-svn: 153570
|
| |
|
|
| |
llvm-svn: 153567
|
| |
|
|
| |
llvm-svn: 153564
|
| |
|
|
|
|
| |
pointers directly.
llvm-svn: 153558
|
| |
|
|
| |
llvm-svn: 153557
|
| |
|
|
| |
llvm-svn: 153556
|
| |
|
|
| |
llvm-svn: 153555
|
| |
|
|
| |
llvm-svn: 153554
|
| |
|
|
|
|
|
| |
imposes a constraint that GOT16 referring to a local symbol or HI16 has to be
followed immediately by a matching LO16 relocation.
llvm-svn: 153553
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
them as machine instructions. Directives ".set noat" and ".set at" are now
emitted only at the beginning and end of a function except in the case where
they are emitted to enclose .cpload with an immediate operand that doesn't fit
in 16-bit field or unaligned load/stores.
Also, make the following changes:
- Remove function isUnalignedLoadStore and use a switch-case statement to
determine whether an instruction is an unaligned load or store.
- Define helper function CreateMCInst which generates an instance of an MCInst
from an opcode and a list of operands.
llvm-svn: 153552
|
| |
|
|
|
|
| |
any side effects.
llvm-svn: 153551
|
| |
|
|
| |
llvm-svn: 153549
|
| |
|
|
| |
llvm-svn: 153543
|