| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 151334
|
|
|
|
|
|
|
| |
asm.
<rdar://problem/10106006>
llvm-svn: 151303
|
|
|
|
| |
llvm-svn: 151235
|
|
|
|
| |
llvm-svn: 151234
|
|
|
|
|
|
| |
Patch by Joe Groff!
llvm-svn: 151183
|
|
|
|
|
|
| |
to static data that should not be modified.
llvm-svn: 151134
|
|
|
|
|
|
| |
converted to zeroexts.
llvm-svn: 150957
|
|
|
|
| |
llvm-svn: 150848
|
|
|
|
| |
llvm-svn: 150670
|
|
|
|
|
|
| |
N) for all operations. This fixes a horrible worst case with lots of nodes where 99% of the time was being spent in std::remove.
llvm-svn: 150669
|
|
|
|
| |
llvm-svn: 150550
|
|
|
|
|
|
|
|
| |
that are greater than the vector element type. For example BUILD_VECTOR
of type <1 x i1> with a constant i8 operand.
This patch fixes the assertion.
llvm-svn: 150477
|
|
|
|
|
|
| |
consistency with setExceptionPointerRegister(...).
llvm-svn: 150460
|
|
|
|
|
|
|
| |
marking them as "live-in" into a BB ruins some invariants that the back-end
tries to maintain.
llvm-svn: 150437
|
|
|
|
|
|
|
|
|
| |
The scheduler will sometimes check the implicit-def list on instructions
to properly handle pre-colored DAG edges.
Also check any register mask operands for physreg clobbers.
llvm-svn: 150428
|
|
|
|
|
|
| |
generate a shuffle node from two vectors of different types.
llvm-svn: 150383
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
v8i8 -> v8i32 on AVX machines. The codegen often scalarizes ANY_EXTEND nodes.
The DAGCombiner has two optimizations that can mitigate the problem. First,
if all of the operands of a BUILD_VECTOR node are extracted from an ZEXT/ANYEXT
nodes, then it is possible to create a new simplified BUILD_VECTOR which uses
UNDEFS/ZERO values to eliminate the scalar ZEXT/ANYEXT nodes.
Second, another dag combine optimization lowers BUILD_VECTOR into a shuffle
vector instruction.
In the case of zext v8i8->v8i32 on AVX, a value in an XMM register is to be
shuffled into a wide YMM register.
This patch modifes the second optimization and allows the creation of
shuffle vectors even when the newly generated vector and the original vector
from which we extract the values are of different types.
llvm-svn: 150340
|
|
|
|
|
|
|
|
|
| |
pointer from MCInstrDesc.
Make them accessible through MCInstrInfo. They are only used for debugging purposes so this doesn't
have an impact on performance. X86MCTargetDesc.o goes from 630K to 461K on x86_64.
llvm-svn: 150245
|
|
|
|
|
|
|
| |
were no 'unwind' instructions being generated before this, so this is in effect
a no-op.
llvm-svn: 149906
|
|
|
|
| |
llvm-svn: 149823
|
|
|
|
| |
llvm-svn: 149816
|
|
|
|
|
|
|
|
|
| |
but with a critical fix to the SelectionDAG code that optimizes copies
from strings into immediate stores: the previous code was stopping reading
string data at the first nul. Address this by adding a new argument to
llvm::getConstantStringInfo, preserving the behavior before the patch.
llvm-svn: 149800
|
|
|
|
| |
llvm-svn: 149730
|
|
|
|
|
|
|
|
|
|
|
| |
SelectionDAG has 4 different ways of passing physreg defs to users.
Collect all of the uses at the same time, and pass all of them to
MI->setPhysRegsDeadExcept() to mark the remaining defs dead.
The setPhysRegsDeadExcept() function will soon add the required
implicit-defs to instructions with register mask operands.
llvm-svn: 149708
|
|
|
|
|
|
|
|
|
| |
extract-and-truncate.
In this patch we optimize this pattern and convert the sequence into extract op of a narrow type.
This allows the BUILD_VECTOR dag optimizations to construct efficient shuffle operations in many cases.
llvm-svn: 149692
|
|
|
|
| |
llvm-svn: 149553
|
|
|
|
|
|
|
|
|
|
| |
automaton (DFA).
This new scheduler plugs into the existing selection DAG scheduling framework. It is a top-down critical path scheduler that tracks register pressure and uses a DFA for pipeline modeling.
Patch by Sergei Larin!
llvm-svn: 149547
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The purpose of refactoring is to hide operand roles from SwitchInst user (programmer). If you want to play with operands directly, probably you will need lower level methods than SwitchInst ones (TerminatorInst or may be User). After this patch we can reorganize SwitchInst operands and successors as we want.
What was done:
1. Changed semantics of index inside the getCaseValue method:
getCaseValue(0) means "get first case", not a condition. Use getCondition() if you want to resolve the condition. I propose don't mix SwitchInst case indexing with low level indexing (TI successors indexing, User's operands indexing), since it may be dangerous.
2. By the same reason findCaseValue(ConstantInt*) returns actual number of case value. 0 means first case, not default. If there is no case with given value, ErrorIndex will returned.
3. Added getCaseSuccessor method. I propose to avoid usage of TerminatorInst::getSuccessor if you want to resolve case successor BB. Use getCaseSuccessor instead, since internal SwitchInst organization of operands/successors is hidden and may be changed in any moment.
4. Added resolveSuccessorIndex and resolveCaseIndex. The main purpose of these methods is to see how case successors are really mapped in TerminatorInst.
4.1 "resolveSuccessorIndex" was created if you need to level down from SwitchInst to TerminatorInst. It returns TerminatorInst's successor index for given case successor.
4.2 "resolveCaseIndex" converts low level successors index to case index that curresponds to the given successor.
Note: There are also related compatability fix patches for dragonegg, klee, llvm-gcc-4.0, llvm-gcc-4.2, safecode, clang.
llvm-svn: 149481
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
test to fail.
These are:
r149348
r149351
r149352
r149354
r149356
r149357
r149361
r149362
r149364
r149365
llvm-svn: 149470
|
|
|
|
| |
llvm-svn: 149356
|
|
|
|
|
|
| |
which is going away.
llvm-svn: 149348
|
|
|
|
| |
llvm-svn: 149331
|
|
|
|
|
|
|
| |
over the catch information. The catch information is now tacked to the invoke
instruction.
llvm-svn: 149326
|
|
|
|
|
|
| |
Not committing a testcase because I think it will be too fragile.
llvm-svn: 149315
|
|
|
|
|
|
|
| |
we should (theoretically optimize and codegen ConstantDataVector as well
as ConstantVector.
llvm-svn: 149116
|
|
|
|
|
|
|
| |
more robust) ways to do what it was doing now. Also, add static methods
for decoding a ShuffleVector mask.
llvm-svn: 149028
|
|
|
|
| |
llvm-svn: 148929
|
|
|
|
| |
llvm-svn: 148897
|
|
|
|
| |
llvm-svn: 148802
|
|
|
|
| |
llvm-svn: 148578
|
|
|
|
|
|
|
|
|
|
|
| |
This SelectionDAG node will be attached to call nodes by LowerCall(),
and eventually becomes a MO_RegisterMask MachineOperand on the
MachineInstr representing the call instruction.
LowerCall() will attach a register mask that depends on the calling
convention.
llvm-svn: 148436
|
|
|
|
|
|
| |
vector type to another, we must not bitcast the result if one type is widened while the other is promoted.
llvm-svn: 148383
|
|
|
|
|
|
| |
TwoAddressInstructionPass to insert copies for any physical reg operands of the REG_SEQUENCE
llvm-svn: 148377
|
|
|
|
| |
llvm-svn: 148337
|
|
|
|
|
|
| |
type.
llvm-svn: 148297
|
|
|
|
|
|
| |
checked for legalisation
llvm-svn: 148275
|
|
|
|
|
|
| |
unused variables).
llvm-svn: 148230
|
|
|
|
|
|
| |
arithmetic so should not be checked in legalisation
llvm-svn: 148228
|
|
|
|
|
|
|
|
|
|
|
| |
We know that the blend instructions only use the MSB, so if the mask is
sign-extended then we can convert it into a SHL instruction. This is a
common pattern because the type-legalizer sign-extends the i1 type which
is used by the LLVM-IR for the condition.
Added a new optimization in SimplifyDemandedBits for SIGN_EXTEND_INREG -> SHL.
llvm-svn: 148225
|
|
|
|
|
|
| |
CodeGen.
llvm-svn: 148218
|