| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
discussions with Andy. Fundamentally, the previous algorithm is both
counter productive on several fronts and prioritizing things which
aren't necessarily the most important: static branch prediction.
The new algorithm uses the existing loop CFG structure information to
walk through the CFG itself to layout blocks. It coalesces adjacent
blocks within the loop where the CFG allows based on the most likely
path taken. Finally, it topologically orders the block chains that have
been formed. This allows it to choose a (mostly) topologically valid
ordering which still priorizes fallthrough within the structural
constraints.
As a final twist in the algorithm, it does violate the CFG when it
discovers a "hot" edge, that is an edge that is more than 4x hotter than
the competing edges in the CFG. These are forcibly merged into
a fallthrough chain.
Future transformations that need te be added are rotation of loop exit
conditions to be fallthrough, and better isolation of cold block chains.
I'm also planning on adding statistics to model how well the algorithm
does at laying out blocks based on the probabilities it receives.
The old tests mostly still pass, and I have some new tests to add, but
the nested loops are still behaving very strangely. This almost seems
like working-as-intended as it rotated the exit branch to be
fallthrough, but I'm not convinced this is actually the best layout. It
is well supported by the probabilities for loops we currently get, but
those are pretty broken for nested loops, so this may change later.
llvm-svn: 142743
|
| |
|
|
| |
llvm-svn: 142742
|
| |
|
|
| |
llvm-svn: 142741
|
| |
|
|
|
|
|
| |
element types, even though the element extraction code does. It is surprising
that this bug has been here for so long. Fixes <rdar://problem/10318778>.
llvm-svn: 142740
|
| |
|
|
|
|
|
|
| |
change clients to use AnalysisContext instead.
WIP to remove/reduce ExprEngine's usage of AnalysisManager.
llvm-svn: 142739
|
| |
|
|
| |
llvm-svn: 142738
|
| |
|
|
|
|
| |
multiply instructions.
llvm-svn: 142737
|
| |
|
|
| |
llvm-svn: 142736
|
| |
|
|
|
|
| |
elimination on them too.
llvm-svn: 142735
|
| |
|
|
| |
llvm-svn: 142734
|
| |
|
|
|
|
|
| |
const expression evaluation subclasses, and remove some APValue copying and
malloc traffic in the process.
llvm-svn: 142733
|
| |
|
|
| |
llvm-svn: 142732
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
able to constant fold load instructions where the argument is a constant.
Second, we should be able to watch multiple PHI nodes through the loop; this
patch only supports PHIs in loop headers, more can be done here.
With this patch, we now constant evaluate:
static const int arr[] = {1, 2, 3, 4, 5};
int test() {
int sum = 0;
for (int i = 0; i < 5; ++i) sum += arr[i];
return sum;
}
llvm-svn: 142731
|
| |
|
|
| |
llvm-svn: 142730
|
| |
|
|
| |
llvm-svn: 142729
|
| |
|
|
| |
llvm-svn: 142728
|
| |
|
|
| |
llvm-svn: 142727
|
| |
|
|
|
|
| |
correctness along the way.
llvm-svn: 142726
|
| |
|
|
| |
llvm-svn: 142725
|
| |
|
|
|
|
|
| |
SHL inserts zeros from the right, thus even when the original
sign_extend_inreg value was of 1-bit, we need to sra.
llvm-svn: 142724
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Former RUN line does not make sense on Win32 hosts.
Win32 hosts would not be expected to set appropriate $PWD.
Latter RUN line might be made valid if PathV2::is_absolute("/foo") would be true. Unfortunately, "/foo" should not be treated as absolute path on Win32.
FYI, on mingw32 with MSYS bash (it has 'shell' feature);
Former) $PWD is set as "X:/hogehoge/test/Driver"
Latter) PWD=/foo sets "X:/root/to/msys/foo" to $PWD.
llvm-svn: 142721
|
| |
|
|
|
|
| |
-fdebug-compilation-dir. pwd[0] might not be '/' on Win32 hosts.
llvm-svn: 142720
|
| |
|
|
| |
llvm-svn: 142718
|
| |
|
|
|
|
| |
classes in the expression parser.
llvm-svn: 142717
|
| |
|
|
|
|
| |
code. Apparently this is what GCC does, and some code depends on this. Fixes <rdar://problem/10321089>.
llvm-svn: 142716
|
| |
|
|
|
|
| |
commands.
llvm-svn: 142715
|
| |
|
|
|
|
| |
TopologicallySortedCFG).
llvm-svn: 142714
|
| |
|
|
|
|
| |
PostOrderCFGView.
llvm-svn: 142713
|
| |
|
|
|
|
| |
correctly even after the process has quit.
llvm-svn: 142712
|
| |
|
|
| |
llvm-svn: 142711
|
| |
|
|
|
|
|
|
| |
A patina of gdb's "display" command, intended mostly for simply monitoring
a variable as you step through source code. Formatters do not work, e.g.
display/x $pc does not work.
llvm-svn: 142710
|
| |
|
|
|
|
|
| |
None private methods if their implementation have attribute, they must exactly
match those in their declarations. // rdar://10271563
llvm-svn: 142709
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add benchmarks for expression evaluations (TestExpressionCmd.py) and disassembly (TestDoAttachThenDisassembly.py).
An example:
[17:45:55] johnny:/Volumes/data/lldb/svn/trunk/test $ ./bench.py 2>&1 | grep -P '^lldb.*benchmark:'
lldb startup delay (create fresh target) benchmark: Avg: 0.104274 (Laps: 30, Total Elapsed Time: 3.128214)
lldb startup delay (set first breakpoint) benchmark: Avg: 0.102216 (Laps: 30, Total Elapsed Time: 3.066470)
lldb frame variable benchmark: Avg: 1.649162 (Laps: 20, Total Elapsed Time: 32.983245)
lldb stepping benchmark: Avg: 0.104409 (Laps: 50, Total Elapsed Time: 5.220461)
lldb expr cmd benchmark: Avg: 0.206774 (Laps: 25, Total Elapsed Time: 5.169350)
lldb disassembly benchmark: Avg: 0.089086 (Laps: 10, Total Elapsed Time: 0.890859)
llvm-svn: 142708
|
| |
|
|
|
|
| |
Add "nexti" an "ni" as aliases for thread step-inst-over.
llvm-svn: 142707
|
| |
|
|
|
|
|
| |
that the set of callee-saved registers is correct for the specific platform.
<rdar://problem/10313708> & ctor_dtor_count & ctor_dtor_count-2
llvm-svn: 142706
|
| |
|
|
|
|
|
| |
- Size of long double is 16 bytes for both N32 and N64.
- Size of pointers and long is 8 bytes for N64.
llvm-svn: 142705
|
| |
|
|
| |
llvm-svn: 142704
|
| |
|
|
| |
llvm-svn: 142703
|
| |
|
|
|
|
|
| |
that Objective-C methods returning types incompatible
with "id" can be properly cast.
llvm-svn: 142702
|
| |
|
|
| |
llvm-svn: 142701
|
| |
|
|
|
|
|
|
| |
for the function type. Update a testcase accordingly.
Patch initially by Anders Waldenborg!
llvm-svn: 142700
|
| |
|
|
| |
llvm-svn: 142699
|
| |
|
|
| |
llvm-svn: 142698
|
| |
|
|
| |
llvm-svn: 142697
|
| |
|
|
|
|
|
|
|
|
|
|
| |
referenced again and
in such a case just write out a reference of a previously serialized Stmt, instead
of serializing it all over again.
This saves memory + space + [de]serializing time, and avoids blowing up memory
with pathological cases. rdar://10293911
llvm-svn: 142696
|
| |
|
|
| |
llvm-svn: 142695
|
| |
|
|
| |
llvm-svn: 142694
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
class declaration which forces any such class and any
class that inherits from such a class to have their
typeinfo symbols be marked as weak.
// rdar://10246395
A test/CodeGenCXX/weak-extern-typeinfo.cpp
M lib/Sema/SemaDeclCXX.cpp
M lib/Sema/SemaDeclAttr.cpp
M lib/CodeGen/CGRTTI.cpp
llvm-svn: 142693
|
| |
|
|
|
|
| |
suggestion!
llvm-svn: 142692
|
| |
|
|
| |
llvm-svn: 142691
|