| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 152391
|
| |
|
|
| |
llvm-svn: 152390
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Original commit message from r147481:
DAGCombine for transforming 128->256 casts into a vmovaps, rather
then a vxorps + vinsertf128 pair if the original vector came from a load.
Fix:
Unaligned loads need to generate a vmovups.
rdar://10974078
llvm-svn: 152366
|
| |
|
|
| |
llvm-svn: 152301
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20120130/136146.html
Implemented CaseIterator and it solves almost all described issues: we don't need to mix operand/case/successor indexing anymore. Base iterator class is implemented as a template since it may be initialized either from "const SwitchInst*" or from "SwitchInst*".
ConstCaseIt is just a read-only iterator.
CaseIt is read-write iterator; it allows to change case successor and case value.
Usage of iterator allows totally remove resolveXXXX methods. All indexing convertions done automatically inside the iterator's getters.
Main way of iterator usage looks like this:
SwitchInst *SI = ... // intialize it somehow
for (SwitchInst::CaseIt i = SI->caseBegin(), e = SI->caseEnd(); i != e; ++i) {
BasicBlock *BB = i.getCaseSuccessor();
ConstantInt *V = i.getCaseValue();
// Do something.
}
If you want to convert case number to TerminatorInst successor index, just use getSuccessorIndex iterator's method.
If you want initialize iterator from TerminatorInst successor index, use CaseIt::fromSuccessorIndex(...) method.
There are also related changes in llvm-clients: klee and clang.
llvm-svn: 152297
|
| |
|
|
| |
llvm-svn: 152290
|
| |
|
|
|
|
|
|
|
|
|
|
| |
For example, this pattern
(select (setcc lhs, rhs, cc), true, 0)
is transformed to this one:
(select (setcc lhs, rhs, inverse(cc)), 0, true)
This enables MipsDAGToDAGISel::ReplaceUsesWithZeroReg (added in r152280) to
replace 0 with $zero.
llvm-svn: 152285
|
| |
|
|
| |
llvm-svn: 152282
|
| |
|
|
|
|
|
|
|
|
|
|
| |
For example, the first instruction in the code below can be eliminated if the
use of $vr0 is replaced with $zero:
addiu $vr0, $zero, 0
add $vr2, $vr1, $vr0
add $vr2, $vr1, $zero
llvm-svn: 152280
|
| |
|
|
|
|
|
|
|
| |
The ARM code generator makes aggressive assumptions about the encodings
being selected for branches which MCRelaxAll invalidates.
rdar://11006355
llvm-svn: 152268
|
| |
|
|
|
|
|
| |
condition flags to CPSR. This allows us to simplify SelectCmp.
Patch by Zonr Chang <zonr.xchg@gmail.com>.
llvm-svn: 152243
|
| |
|
|
| |
llvm-svn: 152188
|
| |
|
|
| |
llvm-svn: 152185
|
| |
|
|
| |
llvm-svn: 152184
|
| |
|
|
|
|
| |
Register pair, all lanes subscripting.
llvm-svn: 152157
|
| |
|
|
|
|
|
| |
Register pair VLD1/VLD2 all-lanes instructions. Kill off more of the
pseudos as a result.
llvm-svn: 152150
|
| |
|
|
| |
llvm-svn: 152136
|
| |
|
|
| |
llvm-svn: 152131
|
| |
|
|
| |
llvm-svn: 152129
|
| |
|
|
| |
llvm-svn: 152127
|
| |
|
|
| |
llvm-svn: 152122
|
| |
|
|
|
|
|
|
|
|
| |
When an instruction only writes sub-registers, it is still necessary to
add an <imp-def> operand for the super-register. When reloading into a
virtual register, rewriting will add the operand, but when loading
directly into a virtual register, the <imp-def> operand is still
necessary.
llvm-svn: 152095
|
| |
|
|
|
|
|
|
|
| |
The fpscr register contains both flags (set by FP operations/comparisons) and
control bits. The control bits (FPSCR) should be reserved, since they're always
available and needn't be defined before use. The flag bits (FPSCR_NZCV) should
like to be unreserved so they can be hoisted by MachineCSE. This fixes PR12165.
llvm-svn: 152076
|
| |
|
|
|
|
| |
rdar://10988114
llvm-svn: 152068
|
| |
|
|
|
|
| |
Use the new composite physical registers.
llvm-svn: 152063
|
| |
|
|
| |
llvm-svn: 152061
|
| |
|
|
|
|
|
|
|
| |
With the new composite physical registers to represent arbitrary pairs
of DPR registers, we don't need the pseudo-registers anymore. Get rid of
a bunch of them that use DPR register pairs and just use the real
instructions directly instead.
llvm-svn: 152045
|
| |
|
|
|
|
|
| |
Used to allow context sensitive printing of super-register or sub-register
references.
llvm-svn: 152043
|
| |
|
|
|
|
|
|
|
| |
Specifically, remove the magic number when checking to see if the copy has a
glue operand and simplify the checking logic.
rdar://10930395
llvm-svn: 152041
|
| |
|
|
|
|
|
|
|
|
|
| |
In this update:
- I assumed neon2 does not imply vfpv4, but neon and vfpv4 imply neon2.
- I kept setting .fpu=neon-vfpv4 code attribute because that is what the
assembler understands.
Patch by Ana Pazos <apazos@codeaurora.org>
llvm-svn: 152036
|
| |
|
|
|
|
| |
static data size.
llvm-svn: 152016
|
| |
|
|
| |
llvm-svn: 152014
|
| |
|
|
|
|
|
|
|
|
|
| |
MachineOperands that define part of a virtual register must have an
<undef> flag if they are not intended as read-modify-write operands.
The old trick of adding an <imp-def> operand doesn't work any longer.
Fixes PR12177.
llvm-svn: 152008
|
| |
|
|
| |
llvm-svn: 152001
|
| |
|
|
|
|
| |
static data size.
llvm-svn: 151998
|
| |
|
|
|
|
| |
size of static data.
llvm-svn: 151996
|
| |
|
|
|
|
| |
Shaves 150k off the size of X86DisassemblerDecoder.o
llvm-svn: 151995
|
| |
|
|
|
|
|
|
|
|
|
|
| |
In this instance we are generating the tail-call during legalizeDAG. The 2nd
floor call can't be a tail call because it clobbers %xmm1, which is defined by
the first floor call. The first floor call can't be a tail-call because it's
not in the tail position. The only reasonable way I could think to fix this
in a target-independent manner was to check for glue logic on the copy reg.
rdar://10930395
llvm-svn: 151877
|
| |
|
|
|
|
|
|
|
|
|
|
| |
floating point equality comparisons into integer ones with -ffast-math. The
issue is the optimization causes +0.0 != -0.0.
Now the optimization is only done when one side is known to be 0.0. The other
side's sign bit is masked off for the comparison.
rdar://10964603
llvm-svn: 151861
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This function could have r12 live across a function call when compiling
thumb1 code.
The test case for this is not included because it is very long. It must
provoke emergency spilling near a function call. The behavior is
provoked by MultiSource/Applications/JM/lencod, and it triggers an
assertion in the scavenger.
<rdar://problem/10963642>
llvm-svn: 151855
|
| |
|
|
|
|
| |
rdar://10965031
llvm-svn: 151850
|
| |
|
|
| |
llvm-svn: 151849
|
| |
|
|
| |
llvm-svn: 151847
|
| |
|
|
|
|
| |
runs into the undefined 15 condition code value.
llvm-svn: 151844
|
| |
|
|
|
|
|
|
|
|
|
| |
and stores was added.
- SelectAddr should return false if Parent is an unaligned f32 load or store.
- Only aligned load and store nodes should be matched to select reg+imm
floating point instructions.
- MIPS does not have support for f64 unaligned load or store instructions.
llvm-svn: 151843
|
| |
|
|
|
|
|
|
|
|
|
| |
function pointer.
This allows us to make TRC non-polymorphic and value-initializable, eliminating a huge static
initializer and a ton of cruft from the generated code.
Shrinks ARMBaseRegisterInfo.o by ~100k.
llvm-svn: 151806
|
| |
|
|
| |
llvm-svn: 151792
|
| |
|
|
|
|
|
|
| |
objects for big endian and little endian targets.
Patch by Jack Carter.
llvm-svn: 151788
|
| |
|
|
|
|
|
| |
So with darwin's otool(1) an x86_64 hello world .o file will print:
leaq L_.str(%rip), %rax ## literal pool for: Hello world
llvm-svn: 151769
|
| |
|
|
|
|
|
|
| |
extension.
Patch by Tyler Nowicki!
llvm-svn: 151743
|