| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
Fixes PR11761: bad IR w/ redundant Phi elim
llvm-svn: 148177
|
| |
|
|
|
|
|
| |
need to make a deep copy of each of the std::maps. Use a std::map of the
std::map instead. This improves the compile time of sqlite3 by ~2%.
llvm-svn: 148003
|
| |
|
|
| |
llvm-svn: 147980
|
| |
|
|
|
|
| |
This appears to improve sqlite3's compile time by ~2%.
llvm-svn: 147978
|
| |
|
|
|
|
|
|
| |
comments.
This interface is misleading and dangerous, but it is actually what we need for unrolling.
llvm-svn: 147926
|
| |
|
|
|
|
|
|
| |
the comment.
Fixes constvars.exp on the gdb test builder.
llvm-svn: 147897
|
| |
|
|
|
|
|
| |
conventions. Also, clarify the grouping of one of the asserts to silence
-Wparentheses.
llvm-svn: 147863
|
| |
|
|
| |
llvm-svn: 147855
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These heuristics are sufficient for enabling IV chains by
default. Performance analysis has been done for i386, x86_64, and
thumbv7. The optimization is rarely important, but can significantly
speed up certain cases by eliminating spill code within the
loop. Unrolled loops are prime candidates for IV chains. In many
cases, the final code could still be improved with more target
specific optimization following LSR. The goal of this feature is for
LSR to make the best choice of induction variables.
Instruction selection may not completely take advantage of this
feature yet. As a result, there could be cases of slight code size
increase.
Code size can be worse on x86 because it doesn't support postincrement
addressing. In fact, when chains are formed, you may see redundant
address plus stride addition in the addressing mode. GenerateIVChains
tries to compensate for the common cases.
On ARM, code size increase can be mitigated by using postincrement
addressing, but downstream codegen currently misses some opportunities.
llvm-svn: 147826
|
| |
|
|
|
|
| |
Patch by Joe Groff!
llvm-svn: 147781
|
| |
|
|
|
|
| |
replaceCongruentPhis checkin.
llvm-svn: 147709
|
| |
|
|
| |
llvm-svn: 147707
|
| |
|
|
| |
llvm-svn: 147700
|
| |
|
|
|
|
| |
isIVUserOrOperand.
llvm-svn: 147686
|
| |
|
|
| |
llvm-svn: 147683
|
| |
|
|
|
|
|
| |
Values, rather than just Instructions, since it's interesting
for ConstantExprs too.
llvm-svn: 147560
|
| |
|
|
|
|
|
|
| |
"phony" insertion point.
Fixes rdar://10619599: "SelectionDAGBuilder shouldn't visit PHI nodes!" assert
llvm-svn: 147439
|
| |
|
|
|
|
| |
it to simplify a few matchers.
llvm-svn: 147403
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
captured. This allows the tracker to look at the specific use, which may be
especially interesting for function calls.
Use this to fix 'nocapture' deduction in FunctionAttrs. The existing one does
not iterate until a fixpoint and does not guarantee that it produces the same
result regardless of iteration order. The new implementation builds up a graph
of how arguments are passed from function to function, and uses a bottom-up walk
on the argument-SCCs to assign nocapture. This gets us nocapture more often, and
does so rather efficiently and independent of iteration order.
llvm-svn: 147327
|
| |
|
|
|
|
|
|
|
| |
undef zero.
unsigned foo(unsigned x) { return 31 - __builtin_clz(x); }
now compiles into a single "bsrl" instruction on x86.
llvm-svn: 147255
|
| |
|
|
|
|
|
|
|
|
| |
probability wouldn't be considered "hot" in some weird loop structures
or other compounding probability patterns. This makes it much harder to
confuse, but isn't really a principled fix. I'd actually like it if we
could model a zero probability, as it would make this much easier to
reason about. Suggestions for how to do this better are welcome.
llvm-svn: 147142
|
| |
|
|
|
|
| |
debug info) and for being vector operations. Fixes regression from r147037.
llvm-svn: 147093
|
| |
|
|
| |
llvm-svn: 147092
|
| |
|
|
|
|
|
| |
call site of an intrinsic is also not an inline candidate. While here, make it
more obvious that this code ignores all intrinsics. Noticed by inspection!
llvm-svn: 147037
|
| |
|
|
| |
llvm-svn: 147036
|
| |
|
|
| |
llvm-svn: 146986
|
| |
|
|
|
|
| |
http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
llvm-svn: 146960
|
| |
|
|
|
|
| |
Fixes PR11571: Instruction does not dominate all uses
llvm-svn: 146950
|
| |
|
|
|
|
| |
attribute themselve.
llvm-svn: 146851
|
| |
|
|
|
|
|
|
|
| |
pointer or a reference type - we actually just want the size of the
pointer then for that.
Fixes rdar://10335756
llvm-svn: 146785
|
| |
|
|
| |
llvm-svn: 146744
|
| |
|
|
| |
llvm-svn: 146665
|
| |
|
|
|
|
|
|
|
| |
into Analysis as a standalone function, since there's no need for
it to be in VMCore. Also, update it to use isKnownNonZero and
other goodies available in Analysis, making it more precise,
enabling more aggressive optimization.
llvm-svn: 146610
|
| |
|
|
| |
llvm-svn: 146597
|
| |
|
|
| |
llvm-svn: 146549
|
| |
|
|
|
|
|
|
|
|
|
| |
subdirectories to traverse into.
- Originally I wanted to avoid this and just autoscan, but this has one key
flaw in that new subdirectories can not automatically trigger a rerun of the
llvm-build tool. This is particularly a pain when switching back and forth
between trees where one has added a subdirectory, as the dependencies will
tend to be wrong. This will also eliminates FIXME implicitly.
llvm-svn: 146436
|
| |
|
|
| |
llvm-svn: 146409
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
indicates whether the intrinsic has a defined result for a first
argument equal to zero. This will eventually allow these intrinsics to
accurately model the semantics of GCC's __builtin_ctz and __builtin_clz
and the X86 instructions (prior to AVX) which implement them.
This patch merely sets the stage by extending the signature of these
intrinsics and establishing auto-upgrade logic so that the old spelling
still works both in IR and in bitcode. The upgrade logic preserves the
existing (inefficient) semantics. This patch should not change any
behavior. CodeGen isn't updated because it can use the existing
semantics regardless of the flag's value.
Note that this will be followed by API updates to Clang and DragonEgg.
Reviewed by Nick Lewycky!
llvm-svn: 146357
|
| |
|
|
|
|
|
|
| |
don't do this now, but add a test case to prevent this from happening in the
future.
Additional test for rdar://9892684
llvm-svn: 145879
|
| |
|
|
| |
llvm-svn: 145801
|
| |
|
|
| |
llvm-svn: 145771
|
| |
|
|
|
|
|
|
|
| |
just to remove no blocks from the maps.
-15% on ARMDisassembler.cpp (Release build). It's not that great to add another
layer of caching to the caching-heavy LVI but I don't see a better way.
llvm-svn: 145770
|
| |
|
|
|
|
| |
rdar://10514247
llvm-svn: 145730
|
| |
|
|
|
|
| |
Add FIXMEs to places that are non-trivial to fix.
llvm-svn: 145661
|
| |
|
|
|
|
| |
for the suggestion, Eric.
llvm-svn: 145643
|
| |
|
|
|
|
| |
TLI isn't being passed to ensure we don't miss opportunities to fold calls.
llvm-svn: 145641
|
| |
|
|
|
|
| |
rdar://10500969
llvm-svn: 145639
|
| |
|
|
|
|
|
| |
where it appeared beneficial to pass.
More of rdar://10500969
llvm-svn: 145630
|
| |
|
|
|
|
|
| |
InstructionSimplify.cpp. Other fixups as needed.
Part of rdar://10500969
llvm-svn: 145559
|
| |
|
|
| |
llvm-svn: 145556
|