| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
static_cast from Constant* to Value* has to adjust the "this" pointer.
This is groundwork for PR889.
llvm-svn: 123435
|
| |
|
|
|
|
|
|
|
|
|
| |
instead of DomTree/DomFrontier. This may be interesting for reducing compile
time. This is currently disabled, but seems to work just fine.
When this is enabled, we eliminate two runs of dominator frontier, one in the
"early per-function" optimizations and one in the "interlaced with inliner"
function passes.
llvm-svn: 123434
|
| |
|
|
|
|
| |
This time let's rephrase to trick gcc-4.3 into not miscompiling.
llvm-svn: 123432
|
| |
|
|
|
|
| |
llvm-gcc-i386-linux-selfhost buildbot heartburn...
llvm-svn: 123431
|
| |
|
|
| |
llvm-svn: 123427
|
| |
|
|
| |
llvm-svn: 123426
|
| |
|
|
|
|
|
|
| |
- Fixed :upper16: fix up routine. It should be shifting down the top 16 bits first.
- Added support for Thumb2 :lower16: and :upper16: fix up.
- Added :upper16: and :lower16: relocation support to mach-o object writer.
llvm-svn: 123424
|
| |
|
|
| |
llvm-svn: 123423
|
| |
|
|
| |
llvm-svn: 123422
|
| |
|
|
|
|
| |
they should go *before* the new instruction not after it.
llvm-svn: 123420
|
| |
|
|
|
|
| |
Fix some callers to better deal with debug values.
llvm-svn: 123419
|
| |
|
|
|
|
|
|
|
|
|
|
| |
While there, I noticed that the transform "undef >>a X -> undef" was wrong.
For example if X is 2 then the top two bits must be equal, so the result can
not be anything. I fixed this in the constant folder as well. Also, I made
the transform for "X << undef" stronger: it now folds to undef always, even
though X might be zero. This is in accordance with the LangRef, but I must
admit that it is fairly aggressive. Also, I added "i32 X << 32 -> undef"
following the LangRef and the constant folder, likewise fairly aggressive.
llvm-svn: 123417
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
after sext's generated for addressing that got folded. Previously we compiled
test5 into:
_test5: ## @test5
## BB#0:
movq -8(%rsp), %rax ## 8-byte Reload
movq (%rdi,%rax), %rdi
addq %rdx, %rdi
movslq %esi, %rax
movq %rax, -8(%rsp) ## 8-byte Spill
movq %rdi, %rax
ret
which is insane and wrong. Now we produce:
_test5: ## @test5
## BB#0:
movslq %esi, %rax
movq (%rdi,%rax), %rax
addq %rdx, %rax
ret
llvm-svn: 123414
|
| |
|
|
|
|
|
| |
This approach also works when the terminator doesn't have a slot index. (Which
can happen??)
llvm-svn: 123413
|
| |
|
|
| |
llvm-svn: 123411
|
| |
|
|
|
|
|
|
|
|
|
| |
Add methods for accessing the (single) entry / exit edge of a region. If no such
edge exists, null is returned. Both accessors return the start block of the
corresponding edge. The edge can finally be formed by utilizing
Region::getEntry() or Region::getExit();
Contributed by: Andreas Simbuerger <simbuerg@fim.uni-passau.de>
llvm-svn: 123410
|
| |
|
|
|
|
| |
Fixes <rdar://problem/8857982>.
llvm-svn: 123409
|
| |
|
|
| |
llvm-svn: 123408
|
| |
|
|
| |
llvm-svn: 123406
|
| |
|
|
| |
llvm-svn: 123405
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
requires supporting
the symbolic immediate names used for these instructions, fixing their pretty-printers, and
adding proper encoding information for them.
With this, we can properly pretty-print and encode assembly like:
mrc p15, #0, r3, c13, c0, #3
Fixes <rdar://problem/8857858>.
llvm-svn: 123404
|
| |
|
|
|
|
| |
So it's possible for some bits of every 8 bits to be encoded already, and the rest still needs to be fixed up.
llvm-svn: 123403
|
| |
|
|
| |
llvm-svn: 123400
|
| |
|
|
| |
llvm-svn: 123399
|
| |
|
|
| |
llvm-svn: 123397
|
| |
|
|
| |
llvm-svn: 123396
|
| |
|
|
|
|
| |
directional local labels like 1f and 2b.
llvm-svn: 123393
|
| |
|
|
|
|
| |
happy.
llvm-svn: 123389
|
| |
|
|
|
|
|
|
|
| |
set up the source operands. The original instr has an immediate operand that
should be replaced with the frame reg operand rather than just adding the
reg operand. Previously, the instruction ended up with too many operands
causing an assert() when adding the default predicate. rdar://8825456
llvm-svn: 123387
|
| |
|
|
|
|
|
| |
It will still return an iterator that points to the first terminator or end(),
but there may be DBG_VALUE instructions following the first terminator.
llvm-svn: 123384
|
| |
|
|
| |
llvm-svn: 123383
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a minor extension of SROA to handle a special case that is
important for some ARM NEON operations. Some of the NEON intrinsics
return multiple values, which are handled as struct types containing
multiple elements of the same vector type. The corresponding return
types declared in the arm_neon.h header have equivalent arrays. We
need SROA to recognize that it can split up those arrays and structs
into separate vectors, even though they are not always accessed with
the same type. SROA already handles loads and stores of an entire
alloca by using insertvalue/extractvalue to access the individual
pieces, and that code works the same regardless of whether the type
is a struct or an array. So, all that needs to be done is to check
for compatible arrays and homogeneous structs.
llvm-svn: 123381
|
| |
|
|
|
|
|
| |
SROA only split up structs and arrays one level at a time, so padding can
only cause trouble if it is located in between the struct or array elements.
llvm-svn: 123380
|
| |
|
|
|
|
| |
the comment I added): an extern weak global may have a null address.
llvm-svn: 123373
|
| |
|
|
|
|
|
|
| |
is "X != 0 -> X" when X is a boolean. This occurs a lot because of the way
llvm-gcc converts gcc's conditional expressions. Add this, and a few other
similar transforms for completeness.
llvm-svn: 123372
|
| |
|
|
|
|
|
|
| |
in the right direction. It eliminated some hacks and will unblock codegen
work. But it's far from being done. It doesn't reject illegal expressions,
e.g. (FOO - :lower16:BAR). It also doesn't work in Thumb2 mode at all.
llvm-svn: 123369
|
| |
|
|
|
|
| |
16 bytes for PR8969. Update all testcases accordingly.
llvm-svn: 123367
|
| |
|
|
| |
llvm-svn: 123364
|
| |
|
|
| |
llvm-svn: 123358
|
| |
|
|
|
|
|
|
| |
.code 32 if the TargetMachine's isThumb() boolean does not match. The correct
fix is to switch ARM subtargets at that point and is tracked by rdar://8856789
which is bigger task.
llvm-svn: 123353
|
| |
|
|
| |
llvm-svn: 123352
|
| |
|
|
| |
llvm-svn: 123351
|
| |
|
|
| |
llvm-svn: 123350
|
| |
|
|
| |
llvm-svn: 123347
|
| |
|
|
|
|
| |
further on the associated testcase before aborting.
llvm-svn: 123346
|
| |
|
|
|
|
| |
PathV2::is_symlink.
llvm-svn: 123345
|
| |
|
|
| |
llvm-svn: 123342
|
| |
|
|
| |
llvm-svn: 123341
|
| |
|
|
|
|
|
|
|
|
|
| |
that way, unfortunately. If you want to change them to work additively instead
of a one-variant-kind-per-symbolref, that's great and I completely agree it's
worth doing, but it really should be a separate patch. Until then, this isn't
correct."
So I am reverting this bit until a more opportune time.
llvm-svn: 123340
|
| |
|
|
|
|
| |
after all.
llvm-svn: 123339
|