| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
| |
The expression based expansion too often results in IR level optimizations
splitting the intermediate values into separate basic blocks, preventing
the formation of the VBSL instruction as the code author intended. In
particular, LICM would often hoist part of the computation out of a loop.
rdar://11011471
llvm-svn: 164340
|
|
|
|
|
|
|
|
| |
A PHI can't create interference on its own. If two live ranges interfere
at a PHI, they must also interfere when leaving one of the PHI
predecessors.
llvm-svn: 164330
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The old-fashioned many-to-one value mapping doesn't always work when
merging vector lanes. A value can map to multiple different values, and
it can even be necessary to insert new PHIs.
When a value number is defined by a copy from a value number that
required SSa update, include the live range of the copied value number
in the SSA update as well. It is not necessarily a copy of the original
value number any longer.
llvm-svn: 164329
|
|
|
|
| |
llvm-svn: 164326
|
|
|
|
|
|
|
|
|
|
|
|
| |
We already have HoistThenElseCodeToIf, this patch implements
SinkThenElseCodeToEnd. When END block has only two predecessors and each
predecessor terminates with unconditional branches, we compare instructions in
IF and ELSE blocks backwards and check whether we can sink the common
instructions down.
rdar://12191395
llvm-svn: 164325
|
|
|
|
| |
llvm-svn: 164309
|
|
|
|
|
|
| |
Attributes class.
llvm-svn: 164308
|
|
|
|
| |
llvm-svn: 164307
|
|
|
|
| |
llvm-svn: 164305
|
|
|
|
| |
llvm-svn: 164297
|
|
|
|
|
|
| |
hundred bytes of static data. Change unsigned char in same table to uint8_t for explicitness.
llvm-svn: 164285
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Rewrite/merge pseudo-atomic instruction emitters to address the
following issue:
* Reduce one unnecessary load in spin-loop
previously the spin-loop looks like
thisMBB:
newMBB:
ld t1 = [bitinstr.addr]
op t2 = t1, [bitinstr.val]
not t3 = t2 (if Invert)
mov EAX = t1
lcs dest = [bitinstr.addr], t3 [EAX is implicit]
bz newMBB
fallthrough -->nextMBB
the 'ld' at the beginning of newMBB should be lift out of the loop
as lcs (or CMPXCHG on x86) will load the current memory value into
EAX. This loop is refined as:
thisMBB:
EAX = LOAD [MI.addr]
mainMBB:
t1 = OP [MI.val], EAX
LCMPXCHG [MI.addr], t1, [EAX is implicitly used & defined]
JNE mainMBB
sinkMBB:
* Remove immopc as, so far, all pseudo-atomic instructions has
all-register form only, there is no immedidate operand.
* Remove unnecessary attributes/modifiers in pseudo-atomic instruction
td
* Fix issues in PR13458
- Add comprehensive tests on atomic ops on various data types.
NOTE: Some of them are turned off due to missing functionality.
- Revise tests due to the new spin-loop generated.
llvm-svn: 164281
|
|
|
|
| |
llvm-svn: 164268
|
|
|
|
| |
llvm-svn: 164264
|
|
|
|
| |
llvm-svn: 164261
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A common coalescing conflict in vector code is lane insertion:
%dst = FOO
%src = BAR
%dst:ssub0 = COPY %src
The live range of %src interferes with the ssub0 lane of %dst, but that
lane is never read after %src would have clobbered it. That makes it
safe to merge the live ranges and eliminate the COPY:
%dst = FOO
%dst:ssub0 = BAR
This patch teaches the new coalescer to resolve conflicts where dead
vector lanes would be clobbered, at least as long as the clobbered
vector lanes don't escape the basic block.
llvm-svn: 164250
|
|
|
|
|
|
| |
implement section-specific protection handling in MCJIT.
llvm-svn: 164249
|
|
|
|
|
|
|
|
|
|
| |
to improve compatibility with GNU as.
Based on a patch by PaX Team.
Fixed assertion failures on non-Darwin and added additional test cases.
llvm-svn: 164248
|
|
|
|
|
|
| |
Anthony Bryant.
llvm-svn: 164247
|
|
|
|
|
|
|
|
| |
This patch is based on the one by PaX Team.
Patch by Andy Zhang!
llvm-svn: 164246
|
|
|
|
|
|
|
|
| |
The directive can be matched with directives other than '.rept'
Patch by Andy Zhang!
llvm-svn: 164245
|
|
|
|
|
|
|
|
|
|
|
| |
- Merge the processing of LOAD_ADD with other atomic load-arith
operations
- Separate the logic getting target constant for atomic-load-op and add
an optimization for atomic-load-add on i16 with negative value
- Optimize a minor case for atomic-fetch-add i16 with negative operand. Test
case is revised.
llvm-svn: 164243
|
|
|
|
| |
llvm-svn: 164238
|
|
|
|
| |
llvm-svn: 164235
|
|
|
|
| |
llvm-svn: 164232
|
|
|
|
|
|
|
| |
ArePhisAssumedNoAlias, and warns that OrigAliasResult may be used uninitialized.
Pacify GCC.
llvm-svn: 164229
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
lib/Target/PowerPC/PPCISelLowering.{h,cpp}
Rename LowerFormalArguments_Darwin to LowerFormalArguments_Darwin_Or_64SVR4.
Rename LowerFormalArguments_SVR4 to LowerFormalArguments_32SVR4.
Receive small structs right-justified in LowerFormalArguments_Darwin_Or_64SVR4.
Rename LowerCall_Darwin to LowerCall_Darwin_Or_64SVR4.
Rename LowerCall_SVR4 to LowerCall_32SVR4.
Pass small structs right-justified in LowerCall_Darwin_Or_64SVR4.
test/CodeGen/PowerPC/structsinregs.ll
New test.
llvm-svn: 164228
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
two variables where the first variable is returned and the second
ignored.
I don't think this occurs in practice (other passes should have cleaned
up the unused phi node), but it should still be handled correctly.
Also make the logic for determining if we should return early less
sketchy.
llvm-svn: 164225
|
|
|
|
|
|
| |
without parens.
llvm-svn: 164216
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
caller.
Example:
void foo() {
... foo(); // I'm recursive!
bar();
}
bar() { int a[1000]; // large stack size }
rdar://10853263
llvm-svn: 164207
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a follow-up from r163302, which added a transformation to
SimplifyCFG that turns some switches into loads from lookup tables.
It was pointed out that some targets, such as GPUs and deeply embedded
targets, might not find this appropriate, but SimplifyCFG doesn't have
enough information about the target to decide this.
This patch adds the reverse transformation to CodeGenPrep: it turns
loads from lookup tables back into switches for targets where we do not
build jump tables (assuming these are also the targets where lookup
tables are inappropriate).
Hopefully we will eventually get to have target information in
SimplifyCFG, and then this CodeGenPrep transformation can be removed.
llvm-svn: 164206
|
|
|
|
|
|
| |
code emitters and the disassembler table builder. Fix a couple instructions that were still missing VEX_L.
llvm-svn: 164204
|
|
|
|
| |
llvm-svn: 164203
|
|
|
|
|
|
| |
remove code from the code emitters that examined operands to set the L-bit.
llvm-svn: 164202
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Two deeply nested if's obscured that the sense of the conditions was
mixed up. Amazingly, TableGen's output is exactly the same even with the
sense of the tests fixed; it seems that all of TableGen's conversions
are symmetric so that the inverted sense was nonetheless correct "by
accident". As such, I couldn't come up with a test case.
If there does in fact exist a non-symmetric conversion in TableGen's
type system, then a test case should be prepared.
Despite the symmetry, both if's are left in place for robustness in the
face of future changes.
Review by Jakob.
llvm-svn: 164195
|
|
|
|
| |
llvm-svn: 164182
|
|
|
|
| |
llvm-svn: 164181
|
|
|
|
| |
llvm-svn: 164180
|
|
|
|
|
|
|
|
|
|
|
| |
from the dragonegg build bots when we turned on the full version of the
pass. Included a much reduced test case for this pesky bug, despite
bugpoint's uncooperative behavior.
Also, I audited all the similar code I could find and didn't spot any
other cases where this mistake cropped up.
llvm-svn: 164178
|
|
|
|
|
|
| |
Implementation derived from compiler-rt's implementation of signed and unsigned integer division.
llvm-svn: 164173
|
|
|
|
| |
llvm-svn: 164169
|
|
|
|
| |
llvm-svn: 164155
|
|
|
|
| |
llvm-svn: 164154
|
|
|
|
| |
llvm-svn: 164153
|
|
|
|
| |
llvm-svn: 164150
|
|
|
|
| |
llvm-svn: 164147
|
|
|
|
|
|
|
|
|
|
|
|
| |
working on FCA splitting. Instead of refusing to form a common type when
there are uses of a subsection of the alloca as well as a use of the
entire alloca, just skip the subsection uses and continue looking for
a whole-alloca use with a type that we can use.
This produces slightly prettier IR I think, and also fixes the other
failure in the test.
llvm-svn: 164146
|
|
|
|
| |
llvm-svn: 164142
|
|
|
|
|
|
| |
Patch by Adhemerval Zanella.
llvm-svn: 164141
|
|
|
|
|
|
| |
virtual-dtor warnings that come with it.
llvm-svn: 164140
|