| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
HexagonVectorLoopCarriedReuse pass
If the two instructions being compared for equivalence have corresponding operands
that are integer constants, then check their values to determine equivalence.
Patch by Suyog Sarda!
llvm-svn: 314642
|
| |
|
|
|
|
|
| |
This patch extracts 1 element from vector consisting
of elements of size 1 bit at given index.
llvm-svn: 314641
|
| |
|
|
|
|
| |
This patch produces a crash and hexagon_vector_loop_carried_reuse_constant.ll test fails on Windows (llvm-clang-x86_64-expensive-checks-win build bot).
llvm-svn: 314361
|
| |
|
|
|
|
|
|
|
| |
If the two instructions being compared for equivalence have corresponding operands
that are integer constants, then check their values to determine equivalence.
Patch by Suyog Sarda!
llvm-svn: 313993
|
| |
|
|
| |
llvm-svn: 313936
|
| |
|
|
|
|
|
|
|
|
| |
HexagonVectorLoopCarriedReuse pass"
This reverts commit r313926.
It was failing in some bots.
llvm-svn: 313931
|
| |
|
|
|
|
| |
added HexagonVectorLoopCarriedReuse pass
llvm-svn: 313926
|
| |
|
|
|
|
|
|
| |
Patch by Jesper Antonsson.
Differential Revision: https://reviews.llvm.org/D37611
llvm-svn: 313268
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D37600
llvm-svn: 312797
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Tail merging can convert an undef use into a normal one when creating a
common tail. Doing so can make the register live out from a block which
previously contained the undef use. To keep the liveness up-to-date,
insert IMPLICIT_DEFs in such blocks when necessary.
To enable this patch the computeLiveIns() function which used to
compute live-ins for a block and set them immediately is split into new
functions:
- computeLiveIns() just computes the live-ins in a LivePhysRegs set.
- addLiveIns() applies the live-ins to a block live-in list.
- computeAndAddLiveIns() is a convenience function combining the other
two functions and behaving like computeLiveIns() before this patch.
Based on a patch by Krzysztof Parzyszek <kparzysz@codeaurora.org>
Differential Revision: https://reviews.llvm.org/D37034
llvm-svn: 312668
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When if-converting a diamond, two separate blocks will be placed back
to back to form a straight line code. To ensure correctness of the
liveness information, any registers that are live in the second block
should not be killed in the first block, even if they were in the
original code.
Additionally, when the two blocks share common instructions at the
beginning, these instructions will not be duplicated, but only placed
once, before both of the blocks. Since the function "isIdenticalTo"
(as used here) ignores kill flags, the common initial code in one
block may have a kill flag for a register that is live in the other
block.
Because the code that removes kill flags only runs for the non-common
parts of the predicated blocks, a kill flag mismatch in the common
code could still lead to a live register being killed prematurely.
llvm-svn: 312654
|
| |
|
|
| |
llvm-svn: 312644
|
| |
|
|
|
|
|
| |
Insert artificial edges between loads that could cause a cache bank
conflict.
llvm-svn: 311901
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The check (assuming positive stride) for validity of memmove should be
(a) the destination is at a lower address than the source, or
(b) the distance between the source and destination is greater than or
equal the number of bytes copied.
For the second part it is sufficient to assume that the destination
is at a higher address, since the opposite case is covered by (a).
The distance calculation was previously done by subtracting the
pointers in the wrong order.
llvm-svn: 311650
|
| |
|
|
| |
llvm-svn: 310524
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
isLegalAddressingMode() has recently gained the extra optional Instruction*
parameter, and therefore it can now do the job that previously only
isFoldableMemAccess() could do.
The SystemZ implementation of isLegalAddressingMode() has gained the
functionality of checking for offsets, which used to be done with
isFoldableMemAccess().
The isFoldableMemAccess() hook has been removed everywhere.
Review: Quentin Colombet, Ulrich Weigand
https://reviews.llvm.org/D35933
llvm-svn: 310463
|
| |
|
|
|
|
|
|
|
| |
Certain operations require vector of i1 values. However, for Hexagon
architecture compatibility, they need to be represented as vector of i8.
Patch by Suyog Sarda.
llvm-svn: 309677
|
| |
|
|
| |
llvm-svn: 308914
|
| |
|
|
|
|
|
| |
For example
asm ("memw(%0++%1) = %2" : : "r"(addr),"a"(mod),"r"(val) : "memory")
llvm-svn: 308761
|
| |
|
|
| |
llvm-svn: 308510
|
| |
|
|
|
|
|
|
| |
The flag "-hexagon-emit-lut-text" (defaulted to false) is added to decide
on where to keep the switch generated lookup table.
Differential Revision: https://reviews.llvm.org/D34818
llvm-svn: 308316
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: t.p.northover, oren_ben_simhon, niravd, mcrosier
Reviewed By: oren_ben_simhon, mcrosier
Subscribers: nhaehnle, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D35466
llvm-svn: 308193
|
| |
|
|
|
|
|
| |
The target-independent lowering works fine, except concatenating 32-bit
words. Add a pattern to generate A2_combinew instead of 64-bit asl/or.
llvm-svn: 308186
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This is the LLVM part, adding definitions for
void @llvm.hexagon.Y2.dccleana(i8*)
void @llvm.hexagon.Y2.dccleaninva(i8*)
void @llvm.hexagon.Y2.dcinva(i8*)
void @llvm.hexagon.Y2.dczeroa(i8*)
void @llvm.hexagon.Y4.l2fetch(i8*, i32)
void @llvm.hexagon.Y5.l2fetch(i8*, i64)
The clang part will follow.
llvm-svn: 308032
|
| |
|
|
| |
llvm-svn: 307675
|
| |
|
|
|
|
|
|
| |
Patch by Michael Wu.
Differential Revision: https://reviews.llvm.org/D35104
llvm-svn: 307671
|
| |
|
|
|
|
| |
This fixes https://llvm.org/PR33718.
llvm-svn: 307566
|
| |
|
|
| |
llvm-svn: 307153
|
| |
|
|
|
|
|
| |
It applies to leaf functions that are otherwise not required to have
a frame pointer.
llvm-svn: 306888
|
| |
|
|
|
|
|
|
| |
This patch adds a new LLVM flag -hexagon-emit-jt-text which is defaulted to
"false". The value "true" emits the switch generated jump tables in text section.
Differential Revision: https://reviews.llvm.org/D34820
llvm-svn: 306872
|
| |
|
|
|
|
|
| |
This reverts commit ae521f4192c3ed0202c047fec993cb59133dd1a0.
Wrong commit message
llvm-svn: 306871
|
| |
|
|
|
|
|
|
|
| |
The llvm flag "-hexagon-emit-lookup-tables" guards the generation
of lookup table from a switch statement.
Differential Revision: https://reviews.llvm.org/D34819
llvm-svn: 306869
|
| |
|
|
|
|
|
| |
The dead phis are needed for finding correct would-be reaching defs
in register propagation.
llvm-svn: 306690
|
| |
|
|
| |
llvm-svn: 306553
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D34640
llvm-svn: 306466
|
| |
|
|
| |
llvm-svn: 306458
|
| |
|
|
|
|
|
| |
Account for the fact that both, the feeder and the compare can be moved
over instructions that kill registers.
llvm-svn: 306443
|
| |
|
|
| |
llvm-svn: 306288
|
| |
|
|
|
|
| |
This breaks passing of aligned function arguments.
llvm-svn: 306145
|
| |
|
|
| |
llvm-svn: 306124
|
| |
|
|
|
|
|
| |
The feeder instruction will be moved to right before the compare, so
the updating code should not be looking for kills past the compare.
llvm-svn: 306059
|
| |
|
|
|
|
| |
Remove the previous, manual shuffling of the kill flags.
llvm-svn: 306054
|
| |
|
|
| |
llvm-svn: 306030
|
| |
|
|
| |
llvm-svn: 306012
|
| |
|
|
|
|
|
| |
Reserve an extra scavenging stack slot if the offset field in store-
-immediate instructions may overflow.
llvm-svn: 306004
|
| |
|
|
| |
llvm-svn: 305943
|
| |
|
|
|
|
|
|
|
| |
The second part of r305300: when placing the mux at the later location,
make sure that it won't use any register that was killed between the
two original instructions. Remove any such kills and transfer them to
the mux.
llvm-svn: 305553
|
| |
|
|
|
|
|
|
|
| |
Store-immediate instructions have a non-extendable offset. Since the
actual offset for a stack object is not known until much later, only
generate these stores when the stack size (at the time of instruction
selection) is small.
llvm-svn: 305305
|
| |
|
|
| |
llvm-svn: 305302
|
| |
|
|
|
|
|
|
|
|
|
| |
When a mux instruction is created from a pair of complementary conditional
transfers, it can be placed at the location of either the earlier or the
later of the transfers. Since it will use the operands of the original
transfers, putting it in the earlier location may hoist a kill of a source
register that was originally further down. Make sure the kill flag is
removed if the register is still used afterwards.
llvm-svn: 305300
|