Andrew Trick
880e573d98
MI-Sched: handle latency of in-order operations with the new machine model.
...
The per-operand machine model allows the target to define "unbuffered"
processor resources. This change is a quick, cheap way to model stalls
caused by the latency of operations that use such resources. This only
applies when the processor's micro-op buffer size is non-zero
(Out-of-Order). We can't precisely model in-order stalls during
out-of-order execution, but this is an easy and effective
heuristic. It benefits cortex-a9 scheduling when using the new
machine model, which is not yet on by default.
MI-Sched for armv7 was evaluated on Swift (and only not enabled because
of a performance bug related to predication). However, we never
evaluated Cortex-A9 performance on MI-Sched in its current form. This
change adds MI-Sched functionality to reach performance goals on
A9. The only remaining change is to allow MI-Sched to run as a PostRA
pass.
I evaluated performance using a set of options to estimate the performance impact once MI sched is default on armv7:
-mcpu=cortex-a9 -disable-post-ra -misched-bench -scheditins=false
For a simple saxpy loop I see a 1.7x speedup. Here are the llvm-testsuite results:
(min run time over 2 runs, filtering tiny changes)
Speedups:
| Benchmarks/BenchmarkGame/recursive | 52.39% |
| Benchmarks/VersaBench/beamformer | 20.80% |
| Benchmarks/Misc/pi | 19.97% |
| Benchmarks/Misc/mandel-2 | 19.95% |
| SPEC/CFP2000/188.ammp | 18.72% |
| Benchmarks/McCat/08-main/main | 18.58% |
| Benchmarks/Misc-C++/Large/sphereflake | 18.46% |
| Benchmarks/Olden/power | 17.11% |
| Benchmarks/Misc-C++/mandel-text | 16.47% |
| Benchmarks/Misc/oourafft | 15.94% |
| Benchmarks/Misc/flops-7 | 14.99% |
| Benchmarks/FreeBench/distray | 14.26% |
| SPEC/CFP2006/470.lbm | 14.00% |
| mediabench/mpeg2/mpeg2dec/mpeg2decode | 12.28% |
| Benchmarks/SmallPT/smallpt | 10.36% |
| Benchmarks/Misc-C++/Large/ray | 8.97% |
| Benchmarks/Misc/fp-convert | 8.75% |
| Benchmarks/Olden/perimeter | 7.10% |
| Benchmarks/Bullet/bullet | 7.03% |
| Benchmarks/Misc/mandel | 6.75% |
| Benchmarks/Olden/voronoi | 6.26% |
| Benchmarks/Misc/flops-8 | 5.77% |
| Benchmarks/Misc/matmul_f64_4x4 | 5.19% |
| Benchmarks/MiBench/security-rijndael | 5.15% |
| Benchmarks/Misc/flops-6 | 5.10% |
| Benchmarks/Olden/tsp | 4.46% |
| Benchmarks/MiBench/consumer-lame | 4.28% |
| Benchmarks/Misc/flops-5 | 4.27% |
| Benchmarks/mafft/pairlocalalign | 4.19% |
| Benchmarks/Misc/himenobmtxpa | 4.07% |
| Benchmarks/Misc/lowercase | 4.06% |
| SPEC/CFP2006/433.milc | 3.99% |
| Benchmarks/tramp3d-v4 | 3.79% |
| Benchmarks/FreeBench/pifft | 3.66% |
| Benchmarks/Ptrdist/ks | 3.21% |
| Benchmarks/Adobe-C++/loop_unroll | 3.12% |
| SPEC/CINT2000/175.vpr | 3.12% |
| Benchmarks/nbench | 2.98% |
| SPEC/CFP2000/183.equake | 2.91% |
| Benchmarks/Misc/perlin | 2.85% |
| Benchmarks/Misc/flops-1 | 2.82% |
| Benchmarks/Misc-C++-EH/spirit | 2.80% |
| Benchmarks/Misc/flops-2 | 2.77% |
| Benchmarks/NPB-serial/is | 2.42% |
| Benchmarks/ASC_Sequoia/CrystalMk | 2.33% |
| Benchmarks/BenchmarkGame/n-body | 2.28% |
| Benchmarks/SciMark2-C/scimark2 | 2.27% |
| Benchmarks/Olden/bh | 2.03% |
| skidmarks10/skidmarks | 1.81% |
| Benchmarks/Misc/flops | 1.72% |
Slowdowns:
| Benchmarks/llubenchmark/llu | -14.14% |
| Benchmarks/Polybench/stencils/seidel-2d | -5.67% |
| Benchmarks/Adobe-C++/functionobjects | -5.25% |
| Benchmarks/Misc-C++/oopack_v1p8 | -5.00% |
| Benchmarks/Shootout/hash | -2.35% |
| Benchmarks/Prolangs-C++/ocean | -2.01% |
| Benchmarks/Polybench/medley/floyd-warshall | -1.98% |
| Polybench/linear-algebra/kernels/3mm | -1.95% |
| Benchmarks/McCat/09-vor/vor | -1.68% |
llvm-svn: 196516
2013-12-05 17:55:58 +00:00
Andrew Trick
093bdd1735
Machine model comments. Explain a ProcessorUnit's BufferSize.
...
llvm-svn: 196515
2013-12-05 17:55:53 +00:00
Andrew Trick
ff199a4b8e
Fix the A9 machine model. VTRN writes two registers.
...
llvm-svn: 196514
2013-12-05 17:55:49 +00:00
Andrew Trick
bb1247b9f0
comment typo and reformat
...
llvm-svn: 196513
2013-12-05 17:55:47 +00:00
Hans Wennborg
6a3816a66f
clang-format vsix cmake build: use ${LLVM_TOOLS_BINARY_DIR}/${CMAKE_CFG_INTDIR}
...
as the location for grabbing clang-format.exe, and also output the .vsix here.
This allows us to find clang-format.exe when building from a MSVC Solution.
llvm-svn: 196512
2013-12-05 17:49:58 +00:00
Alp Toker
52937abc8b
Check the initial line number without going through PresumedLoc
...
No practical difference in this case and would return 1 either way, but this is
more self-explanatory.
llvm-svn: 196511
2013-12-05 17:28:42 +00:00
Alp Toker
f6a24ce40f
Fix a tranche of comment, test and doc typos
...
llvm-svn: 196510
2013-12-05 16:25:25 +00:00
Rafael Espindola
4cc2b87375
Add a default constructor to get deterministic behavior.
...
Should fix the msan and valgrind bots.
llvm-svn: 196509
2013-12-05 16:21:17 +00:00
Arnold Schwaighofer
7ee53cac80
SLPVectorizer: An in-tree vectorized entry cannot also be a scalar external use
...
We were creating external uses for scalar values in MustGather entries that also
had a ScalarToTreeEntry (they also are present in a vectorized tuple). This
meant we would keep a value 'alive' as a scalar and vectorized causing havoc.
This is not necessary because when we create a MustGather vector we explicitly
create external uses entries for the insertelement instructions of the
MustGather vector elements.
Fixes PR18129.
radar://15582184
llvm-svn: 196508
2013-12-05 15:14:40 +00:00
Kostya Serebryany
2460c3fc73
[tsan] fix PR18146: sometimes a variable written into vptr could have an integer type (after other optimizations)
...
llvm-svn: 196507
2013-12-05 15:03:02 +00:00
Alexey Samsonov
5ca3de6e91
PR16532: work around old GCC bug in interception_type_test.cc
...
llvm-svn: 196506
2013-12-05 13:29:46 +00:00
Rui Ueyama
d2014f196b
Use !! to convert to a boolean value.
...
llvm-svn: 196505
2013-12-05 13:11:33 +00:00
Rui Ueyama
16c025e212
[PECOFF] Handle .lib files as if they are grouped by --{start,end}-group.
...
Currently we do not de-duplicate library files specified by /defaultlib option.
As a result, the same files are added multiple times to the input graph. In
particular, some popular files, such as kernel32.lib or oldnames.lib, are added
more than 10 times during linking of LLD. That makes the linker slower, as it
needs to parse the same file again and again.
This patch solves the issue by de-duplicating. The same file will be added only
once to the input graph. This patch improved the LLD linking time from 10.5
seconds to 7.7 seconds on my 4-core Core i7 Macbook Pro.
llvm-svn: 196504
2013-12-05 13:07:49 +00:00
Justin Holewinski
4459717bab
[NVPTX] Fix off-by-one error when creating the VT list for an SDNode
...
llvm-svn: 196503
2013-12-05 12:58:00 +00:00
Alexey Samsonov
2d42b1d693
Run TSan/MSan lit tests only on 64-bit platforms
...
llvm-svn: 196501
2013-12-05 12:53:36 +00:00
Alexey Samsonov
996e099d8f
Add forgotten header guards
...
llvm-svn: 196500
2013-12-05 12:52:32 +00:00
Sylvestre Ledru
13b0fba48b
Revert: "Patch from Todd Fiala that install the lldb.py module in the prefix directory and also makes install fail if the prefix directory can't be accessed"
...
Does not respect the prefix
llvm-svn: 196499
2013-12-05 12:51:47 +00:00
Matheus Almeida
a6beac1acc
[mips] Small code generation improvement for conditional operator (select)
...
in case the operands are constants and its difference is |1|.
It should be possible in those cases to rematerialize the result using
MIPS's slt and similar instructions.
The small update to some of the tests in cmov.ll, sel1c.ll and sel2c.ll was needed
otherwise the optimization implemented in this patch would have been triggered
(difference between the operands was 1) and that would have changed the semantic
of the tests.
llvm-svn: 196498
2013-12-05 12:07:05 +00:00
Sergey Matveev
9be70fbda9
[sanitizer] Introduce VReport and VPrintf macros and use them in sanitizer code.
...
Instead of "if (common_flags()->verbosity) Report(...)" we now have macros.
llvm-svn: 196497
2013-12-05 12:04:51 +00:00
Matheus Almeida
a611c0f405
[mips] Add some comments related to the optimization performed in performSELECTCombine.
...
The structure of the code was slightly modified so that the next patch is easier to read/review.
No functional changes.
llvm-svn: 196496
2013-12-05 11:56:56 +00:00
Kostya Serebryany
3b2f702d55
[tsan] fix the old tsan Makefile to build the asm files with includes
...
llvm-svn: 196495
2013-12-05 11:24:06 +00:00
Matheus Almeida
6b59c449d9
[mips][msa] Fix issue with immediate fields of LD/ST instructions
...
not being correctly encoded/decoded.
In more detail, immediate fields of LD/ST instructions should be
divided/multiplied by the size of the data format before encoding and
after decoding, respectively.
llvm-svn: 196494
2013-12-05 11:06:22 +00:00
Tim Northover
e4def5e228
ARM: fix yet another stack-folding bug
...
We were trying to fold the stack adjustment into the wrong instruction in the
situation where the entire basic-block was epilogue code. Really, it can only
ever be valid to do the folding precisely where the "add sp, ..." would be
placed so there's no need for a separate iterator to track that.
Should fix PR18136.
llvm-svn: 196493
2013-12-05 11:02:02 +00:00
Alexey Samsonov
58e44a3447
Revert r196490 and fix include paths in makefile-based build
...
llvm-svn: 196492
2013-12-05 10:40:11 +00:00
Kostya Serebryany
d4af5c241d
[asan] revert files which I accidentally commited in r196490
...
llvm-svn: 196491
2013-12-05 09:47:21 +00:00
Kostya Serebryany
9ffa232f06
[tsan] fix the include path that is broken in configure/make build but works in cmake build (PR18144). This is a quick fix. Will need to fix the configure/make build properly
...
llvm-svn: 196490
2013-12-05 09:42:59 +00:00
Kostya Serebryany
f2c93b2973
[sanitizer] fix the ppc32 build (patch by Jakub Jelinek)
...
llvm-svn: 196489
2013-12-05 08:51:48 +00:00
Richard Smith
f03bd30854
PR17983: Fix crasher bug in C++1y mode when performing a non-global array
...
delete on a class which has no array cookie and has no class-specific operator
new.
llvm-svn: 196488
2013-12-05 08:30:59 +00:00
Argyrios Kyrtzidis
9ef5775a94
[libclang] Record ranges skipped by the preprocessor and expose them with libclang.
...
Patch by Erik Verbruggen!
llvm-svn: 196487
2013-12-05 08:19:32 +00:00
Argyrios Kyrtzidis
011e6a5f44
[c-index-test] Enhance perform_test_reparse_source() to allow remapping a file
...
at a particular reparsing iteration.
Passing '-remap-file-1=from:to' will remap the files in the second iteration.
llvm-svn: 196486
2013-12-05 08:19:23 +00:00
Argyrios Kyrtzidis
a60d8ae09d
[c-index-test] For the '-remap-file=' option use ':' instead of ';' for separator.
...
lldb does not like semicolon as part of an option.
llvm-svn: 196485
2013-12-05 08:19:18 +00:00
Alp Toker
fcf30326fd
clang-format-diff.py: pass through errors to stderr, not stdout
...
Also use write() for unified diff output to avoid further processing by the
print function (e.g. trailing newline).
llvm-svn: 196484
2013-12-05 08:14:54 +00:00
Sylvestre Ledru
34efb6aee1
Fix the build failure of lldb wrt clang recent change. Patch by Todd Fiala
...
llvm-svn: 196483
2013-12-05 07:55:40 +00:00
Richard Smith
28b1939849
Update C++ status from 'SVN' to 'Clang 3.4' in preparation for release. Leave
...
boxes yellow until we release, though.
llvm-svn: 196482
2013-12-05 07:52:05 +00:00
Richard Smith
a230224be4
Implement DR482: namespace members can be redeclared with a qualified name
...
within their namespace, and such a redeclaration isn't required to be a
definition any more.
Update DR status page to say Clang 3.4 instead of SVN and add new Clang 3.5
category (but keep Clang 3.4 yellow for now).
llvm-svn: 196481
2013-12-05 07:51:02 +00:00
Kostya Serebryany
14e92c2c62
[sanitizer] support toolchains that don't understand CFI directives
...
Summary: Support toolchains that don't understand CFI directives.
Reviewers: dvyukov
Reviewed By: dvyukov
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D2336
llvm-svn: 196480
2013-12-05 07:44:35 +00:00
David Blaikie
0504cdafaa
DwarfDebug/DwarfUnit: Push abbreviation structures down into DwarfUnits to reduce duplication
...
llvm-svn: 196479
2013-12-05 07:43:55 +00:00
Alp Toker
beccbb84ad
Fix comment typo in r196476
...
llvm-svn: 196477
2013-12-05 07:16:23 +00:00
Argyrios Kyrtzidis
b9a405b33e
[objc] If an interface has no initializer marked as designated and introduces at least one new initializer,
...
don't assume that it inherits the designated initializers from the super class.
If the assumption was wrong because a new initializer was a designated one that was not marked as such,
we will emit misleading warnings for subclasses of the interface.
llvm-svn: 196476
2013-12-05 07:07:03 +00:00
Rui Ueyama
7b4721048c
Remove makeArrayRef() calls.
...
Because ArrayRef has implicit conversion from C arrays, we don't need
makeArrayRef.
llvm-svn: 196475
2013-12-05 06:55:26 +00:00
Lang Hames
50aa21aedd
Re-apply r196439, with sed patterns modified to be more DOS-path friendly.
...
llvm-svn: 196474
2013-12-05 06:17:42 +00:00
Matt Arsenault
a68c9adca6
Use isIntrinsic() instead of checking for "llvm."
...
llvm-svn: 196473
2013-12-05 06:05:43 +00:00
Rafael Espindola
117b20c492
Remove the isImplicitlyPrivate argument of getNameWithPrefix.
...
getSymbolWithGlobalValueBase use is to create a name of a new symbol based
on the name of an existing GV. Assert that and then remove the last call
to pass true to isImplicitlyPrivate.
This gives the mangler API a 1:1 mapping from GV to names, which is what we
need to drop the mangler dependency on the target (and use an extended
datalayout instead).
llvm-svn: 196472
2013-12-05 05:53:12 +00:00
Alp Toker
f907b891da
Correct word hyphenations
...
This patch tries to avoid unrelated changes other than fixing a few
hyphen-related ambiguities and contractions in nearby lines.
llvm-svn: 196471
2013-12-05 05:44:44 +00:00
Rafael Espindola
01d19d0299
Hide the stub created for MO_ExternalSymbol too.
...
given
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1)
declare void @foo()
define void @bar() {
call void @foo()
call void @llvm.memset.p0i8.i32(i8* null, i8 0, i32 188, i32 1, i1 false)
ret void
}
We used to produce
L_foo$stub:
.indirect_symbol _foo
.ascii "\364\364\364\364\364"
_memset$stub:
.indirect_symbol _memset
.ascii "\364\364\364\364\364"
We not produce a private stub for memset too.
Stubs are not needed with recent linkers, but we still produce them for darwin8.
Thanks to David Fang for confirming that gcc used to do this too.
llvm-svn: 196468
2013-12-05 05:19:12 +00:00
Matt Arsenault
89cc49fe5d
R600/SI: Add comments for number of used registers.
...
llvm-svn: 196467
2013-12-05 05:15:35 +00:00
Alp Toker
d473363876
Correct hyphenations in comments and assert messages
...
This patch tries to avoid unrelated changes other than fixing a few
hyphen-related ambiguities in nearby lines.
llvm-svn: 196466
2013-12-05 04:47:09 +00:00
Rui Ueyama
62acf8624c
Use makeArrayRef to construct ArrayRefs from C arrays.
...
llvm-svn: 196465
2013-12-05 04:41:10 +00:00
Richard Smith
72bcaeca1d
Per [dcl.meaning]p1, a name in an inline namespace can be redeclared using a
...
name from the enclosing namespace set if the name is specified as a
qualified-id.
llvm-svn: 196464
2013-12-05 04:30:04 +00:00
Richard Trieu
e99bb4b2b9
Fixed a bad assert from r194968. r194969 removed the assert.
...
llvm-svn: 196463
2013-12-05 04:27:16 +00:00