| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 170540
|
|
|
|
|
|
| |
instead of EVTs.
llvm-svn: 170538
|
|
|
|
|
|
| |
MVTs, instead of EVTs.
llvm-svn: 170537
|
|
|
|
|
|
| |
from EVT.
llvm-svn: 170536
|
|
|
|
|
|
| |
EVTs.
llvm-svn: 170535
|
|
|
|
|
|
| |
EVTs.
llvm-svn: 170534
|
|
|
|
|
|
| |
of EVT.
llvm-svn: 170532
|
|
|
|
|
|
|
|
|
|
|
|
| |
This changes adds shadow and origin propagation for unknown intrinsics
by examining the arguments and ModRef behaviour. For now, only 3 classes
of intrinsics are handled:
- those that look like simple SIMD store
- those that look like simple SIMD load
- those that don't have memory effects and look like arithmetic/logic/whatever
operation on simple types.
llvm-svn: 170530
|
|
|
|
|
|
| |
instead of EVTs.
llvm-svn: 170529
|
|
|
|
|
|
|
|
|
|
| |
values.
MapVector is a bit heavyweight, but I don't see a simpler way. Also the
InductionList is unlikely to be large. This should help 3-stage selfhost
compares (PR14647).
llvm-svn: 170528
|
|
|
|
| |
llvm-svn: 170524
|
|
|
|
| |
llvm-svn: 170523
|
|
|
|
|
|
| |
EVT.
llvm-svn: 170522
|
|
|
|
| |
llvm-svn: 170518
|
|
|
|
| |
llvm-svn: 170517
|
|
|
|
|
|
| |
some minor comment reformatting.
llvm-svn: 170516
|
|
|
|
| |
llvm-svn: 170510
|
|
|
|
| |
llvm-svn: 170506
|
|
|
|
|
|
|
|
| |
bitwidth op back to the original size. If we reduce ANDs then this can cause
an endless loop. This patch changes the ZEXT to ANY_EXTEND if the demanded bits
are equal or smaller than the size of the reduced operation.
llvm-svn: 170505
|
|
|
|
|
|
| |
single attribute in the future.
llvm-svn: 170502
|
|
|
|
| |
llvm-svn: 170497
|
|
|
|
| |
llvm-svn: 170496
|
|
|
|
|
|
| |
rewritten as a compare against a constant 0 with the opposite condition.
llvm-svn: 170495
|
|
|
|
| |
llvm-svn: 170493
|
|
|
|
|
|
| |
alignment.
llvm-svn: 170486
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instructions in the assembly code variant if one exists.
The intended use for this is so tools like lldb and darwin's otool(1)
can be switched to print Intel-flavored disassembly.
I discussed extensively this API with Jim Grosbach and we feel
while it may not be fully general, in reality there is only one syntax
for each assembly with the exception of X86 which has exactly
two for historical reasons.
rdar://10989182
llvm-svn: 170477
|
|
|
|
|
|
|
|
|
|
|
| |
The bundle_iterator::operator++ function now doesn't need to dig out the
basic block and check against end(). It can use the isBundledWithSucc()
flag to find the last bundled instruction safely.
Similarly, MachineInstr::isBundled() no longer needs to look at
iterators etc. It only has to look at flags.
llvm-svn: 170473
|
|
|
|
|
|
| |
InstCombine for unsafe floating-point add/sub.
llvm-svn: 170471
|
|
|
|
|
|
| |
can disable it in clang.
llvm-svn: 170470
|
|
|
|
|
|
|
| |
Now that the bundle flag aware APIs are all in place, it is possible to
continuously verify the flag consistency.
llvm-svn: 170465
|
|
|
|
|
|
| |
AVX2 before AVX.
llvm-svn: 170464
|
|
|
|
|
|
|
| |
The new bidirectional bundle flags are redundant, so inadvertent bundle
tearing can be detected in the machine code verifier.
llvm-svn: 170463
|
|
|
|
|
|
|
|
| |
To not over constrain the scheduler for ARM in thumb mode, some optimizations for code size reduction, specific to ARM thumb, are blocked when they add a dependency (like write after read dependency).
Disables this check when code size is the priority, i.e., code is compiled with -Oz.
llvm-svn: 170462
|
|
|
|
|
|
|
|
|
|
|
| |
The bundle-related MI flags need to be kept in sync with the neighboring
instructions. Don't allow the bulk flag-setting setFlags() function to
change them.
Also don't copy MI flags when cloning an instruction. The clone's bundle
flags will be set when it is explicitly inserted into a bundle.
llvm-svn: 170459
|
|
|
|
|
|
|
|
|
|
|
| |
Remove the instr_iterator versions of the splice() functions. It doesn't
seem useful to be able to splice sequences of instructions that don't
consist of full bundles.
The normal splice functions that take MBB::iterator arguments are not
changed, and they can move whole bundles around without any problems.
llvm-svn: 170456
|
|
|
|
| |
llvm-svn: 170454
|
|
|
|
| |
llvm-svn: 170453
|
|
|
|
|
|
| |
some targets.
llvm-svn: 170452
|
|
|
|
|
|
| |
compute it.
llvm-svn: 170451
|
|
|
|
| |
llvm-svn: 170450
|
|
|
|
|
|
| |
scheduling decision.
llvm-svn: 170449
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instead of scalar operations.
For example on x86 with SSE4.2 a <8 x i8> add reduction becomes
movdqa %xmm0, %xmm1
movhlps %xmm1, %xmm1 ## xmm1 = xmm1[1,1]
paddw %xmm0, %xmm1
pshufd $1, %xmm1, %xmm0 ## xmm0 = xmm1[1,0,0,0]
paddw %xmm1, %xmm0
phaddw %xmm0, %xmm0
pextrb $0, %xmm0, %edx
instead of
pextrb $2, %xmm0, %esi
pextrb $0, %xmm0, %edx
addb %sil, %dl
pextrb $4, %xmm0, %esi
addb %dl, %sil
pextrb $6, %xmm0, %edx
addb %sil, %dl
pextrb $8, %xmm0, %esi
addb %dl, %sil
pextrb $10, %xmm0, %edi
pextrb $14, %xmm0, %edx
addb %sil, %dil
pextrb $12, %xmm0, %esi
addb %dil, %sil
addb %sil, %dl
llvm-svn: 170439
|
|
|
|
| |
llvm-svn: 170438
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The normal insert() function takes an MBB::iterator position, and
inserts a stand-alone MachineInstr as before.
The insert() function that takes an MBB::instr_iterator position can
insert instructions inside a bundle, and will now update the bundle
flags correctly when that happens.
When the insert position is between two bundles, it is unclear whether
the instruction should be appended to the previous bundle, prepended to
the next bundle, or stand on its own. The MBB::insert() function doesn't
bundle the instruction in that case, use the MIBundleBuilder class for
that.
llvm-svn: 170437
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A register can be associated with several distinct register classes.
For example, on PPC, the floating point registers are each associated with
both F4RC (which holds f32) and F8RC (which holds f64). As a result, this code
would fail when provided with a floating point register and an f64 operand
because it would happen to find the register in the F4RC class first and
return that. From the F4RC class, SDAG would extract f32 as the register
type and then assert because of the invalid implied conversion between
the f64 value and the f32 register.
Instead, search all register classes. If a register class containing the
the requested register has the requested type, then return that register
class. Otherwise, as before, return the first register class found that
contains the requested register.
llvm-svn: 170436
|
|
|
|
| |
llvm-svn: 170416
|
|
|
|
|
|
| |
getScalarSizeInBits could not handle vectors of pointers.
llvm-svn: 170412
|
|
|
|
| |
llvm-svn: 170404
|
|
|
|
|
|
|
|
|
|
| |
instruction.
This isn't strictly necessary at the moment because Thumb2SizeReduction
also copies all MI flags from the old instruction to the new. However, a
future patch will make that kind of direct flag tampering illegal.
llvm-svn: 170395
|
|
|
|
| |
llvm-svn: 170394
|