- Feb 28, 2014
-
-
Hal Finkel authored
The CR bit tracking code broke PPC/Darwin; trying to get it working again... (the darwin11 builder, which defaults to the darwin ABI when running PPC tests, asserted when running test/CodeGen/PowerPC/inverted-bool-compares.ll) llvm-svn: 202459
-
Reid Kleckner authored
llvm-svn: 202458
-
Reid Kleckner authored
It makes our -fdump-record-layouts a little more sane. llvm-svn: 202457
-
Todd Fiala authored
This is related to: http://llvm.org/bugs/show_bug.cgi?id=15258 I ran this test 10 times successfully against Ubuntu 12.04 LTS x86_64 with lldb built with gcc 4.8.2 and July 2013 libedit. llvm-svn: 202456
-
Hal Finkel authored
Cannot use negative numbers in case statements without running afoul of -Wc++11-narrowing. llvm-svn: 202455
-
NAKAMURA Takumi authored
llvm-svn: 202454
-
Hal Finkel authored
The backend currently enables CR-bit tracking by default at -O2 and higher. These flags allow the user to override that default. llvm-svn: 202453
-
Alexander Kornienko authored
Summary: Added a naive NOLINT implementation. It doesn't care about specific linter categories, just the "// NOLINT" on the same line as a diagnostic. Reviewers: klimek Reviewed By: klimek CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2896 llvm-svn: 202452
-
Hal Finkel authored
This change enables tracking i1 values in the PowerPC backend using the condition register bits. These bits can be treated on PowerPC as separate registers; individual bit operations (and, or, xor, etc.) are supported. Tracking booleans in CR bits has several advantages: - Reduction in register pressure (because we no longer need GPRs to store boolean values). - Logical operations on booleans can be handled more efficiently; we used to have to move all results from comparisons into GPRs, perform promoted logical operations in GPRs, and then move the result back into condition register bits to be used by conditional branches. This can be very inefficient, because the throughput of these CR <-> GPR moves have high latency and low throughput (especially when other associated instructions are accounted for). - On the POWER7 and similar cores, we can increase total throughput by using the CR bits. CR bit operations have a dedicated functional unit. Most of this is more-or-less mechanical: Adjustments were needed in the calling-convention code, support was added for spilling/restoring individual condition-register bits, and conditional branch instruction definitions taking specific CR bits were added (plus patterns and code for generating bit-level operations). This is enabled by default when running at -O2 and higher. For -O0 and -O1, where the ability to debug is more important, this feature is disabled by default. Individual CR bits do not have assigned DWARF register numbers, and storing values in CR bits makes them invisible to the debugger. It is critical, however, that we don't move i1 values that have been promoted to larger values (such as those passed as function arguments) into bit registers only to quickly turn around and move the values back into GPRs (such as happens when values are returned by functions). A pair of target-specific DAG combines are added to remove the trunc/extends in: trunc(binary-ops(binary-ops(zext(x), zext(y)), ...) and: zext(binary-ops(binary-ops(trunc(x), trunc(y)), ...) In short, we only want to use CR bits where some of the i1 values come from comparisons or are used by conditional branches or selects. To put it another way, if we can do the entire i1 computation in GPRs, then we probably should (on the POWER7, the GPR-operation throughput is higher, and for all cores, the CR <-> GPR moves are expensive). POWER7 test-suite performance results (from 10 runs in each configuration): SingleSource/Benchmarks/Misc/mandel-2: 35% speedup MultiSource/Benchmarks/Prolangs-C++/city/city: 21% speedup MultiSource/Benchmarks/MiBench/automotive-susan: 23% speedup SingleSource/Benchmarks/CoyoteBench/huffbench: 13% speedup SingleSource/Benchmarks/Misc-C++/Large/sphereflake: 13% speedup SingleSource/Benchmarks/Misc-C++/mandel-text: 10% speedup SingleSource/Benchmarks/Misc-C++-EH/spirit: 10% slowdown MultiSource/Applications/lemon/lemon: 8% slowdown llvm-svn: 202451
-
Hal Finkel authored
Unfortunately, it is currently impossible to use a PatFrag as part of an output pattern (the part of the pattern that has instructions in it) in TableGen. Looking at the current implementation, this was clearly intended to work (there is already code in place to expand patterns in the output DAG), but is currently broken by the baked-in type-checking assumption and the order in which the pattern fragments are processed (output pattern fragments need to be processed after the instruction definitions are processed). Fixing this is fairly simple, but requires some way of differentiating output patterns from the existing input patterns. The simplest way to handle this seems to be to create a subclass of PatFrag, and so that's what I've done here. As a simple example, this allows us to write: def crnot : OutPatFrag<(ops node:$in), (CRNOR $in, $in)>; def : Pat<(not i1:$in), (crnot $in)>; which captures the core use case: handling of repeated subexpressions inside of complicated output patterns. This will be used by an upcoming commit to the PowerPC backend. llvm-svn: 202450
-
Hal Finkel authored
This extract-and-trunc vector optimization cannot work for i1 values as currently implemented, and so I'm disabling this for now for i1 values. In the future, this can be fixed properly. Soon I'll commit support for i1 CR bit tracking in the PowerPC backend, and this will be covered by one of the existing regression tests. llvm-svn: 202449
-
Todd Fiala authored
This is related to: http://llvm.org/bugs/show_bug.cgi?id=15278 I ran this 20 times in a row without failure at svn r202440 on Ubuntu 12.04 LTS x86_64 using July 2013 libedit and gcc 4.8.2. llvm-svn: 202448
-
Greg Clayton authored
llvm-svn: 202447
-
Todd Fiala authored
I could not get http://llvm.org/bugs/show_bug.cgi?id=16016) to fail on my end running 10 times in a row. Re-enabling the test. llvm-svn: 202446
-
Rui Ueyama authored
llvm-svn: 202445
-
Richard Trieu authored
llvm-svn: 202444
-
Ben Langmuir authored
Revert r202442, which broke the buildbots. llvm-svn: 202443
-
Ben Langmuir authored
Pass through the externally-visible names that we got from the VFS down to FileManager, and test that this is the name showing up in __FILE__, diagnostics, and debug information. llvm-svn: 202442
-
- Feb 27, 2014
-
-
Reid Kleckner authored
llvm-svn: 202441
-
Sylvestre Ledru authored
llvm-svn: 202440
-
Ben Langmuir authored
Keep the copy constructor around, and add a FIXME that we should really remove it as soon as we have C++11 std::map's emplace function. llvm-svn: 202439
-
Rui Ueyama authored
This is the data structure listed on Microsoft PE/COFF Spec Revision 8.3, p. 80. The name of the struct is not mentioned in the Microsoft PE/COFF spec, so I made it up. llvm-svn: 202438
-
rdar://problem/16135814Bob Wilson authored
In r201528, I changed the PGO instrumentation counter for a "do" loop to not include the fall-through count. That fall-through count is included later, b it means that this assertion may fail for "do" loops. llvm-svn: 202437
-
Ted Kremenek authored
This is a heuristic. Many switch statements, although they look covered over an enum, may actually handle at runtime more values than in the enum. This is overly conservative, as there are some cases that clearly can be ruled as being clearly unreachable, e.g. 'switch (42) { case 1: ... }'. We can refine this later. llvm-svn: 202436
-
Ted Kremenek authored
llvm-svn: 202435
-
Ted Kremenek authored
llvm-svn: 202434
-
Andrew Trick authored
This is a temporary workaround for native arm linux builds: PR18996: Changing regalloc order breaks "lencod" on native arm linux builds. llvm-svn: 202433
-
Andrew Trick authored
llvm-svn: 202432
-
Greg Clayton authored
1 - There were some outdated options being passed to clang 2 - There were some bad paths being passed as options 3 - The path to the main.cpp file ("/tmp/main.cpp") was wrong when the tests were being run, now we create a temp file 4 - Added a new ActionType::eNone to do nothing (no continue, step, or kill) llvm-svn: 202431
-
Chandler Carruth authored
seems unlikely to be added. It also doesn't seem like it should be part of the build system at all (consider out-of-tree builds). We should probably add nice, easy tool for this that works both for svn client trees and git-svn client trees, but it probably won't be spelled "make update". llvm-svn: 202430
-
Rui Ueyama authored
llvm-svn: 202429
-
Todd Fiala authored
This change fixes up issues with specifying the size of the i386 register infos for FPU registers. The bug was that for the i386 register context, the size of the FPU registers were still being computed based on the x86_64 FXSAVE structure. This change permits the FPR_SIZE macro to optionally be defined outside of RegisterInfos_i386.h, which RegisterContextLinux_i386.cpp does properly. It redefines the FPR_i386 structure with all the accessible parts that RegisterInfos_i386.h wants to see, which we had not done before when we made the overall size of the structure properly sized a recently. This change also modifies POSIXThread to create a RegisterContextLinux_i386 only when the host is 32-bit; otherwise, it uses the RegisterContextLinux_x86_64, which works properly for 32-bit and 64-bit inferiors on a 64-bit host. I tested this debugging a Linux x86 exe on an x86 host (Ubuntu 13.10 x86), and debugging a Linux x86 exe and a Linux x86-64 exe on an x86-64 host (Ubuntu 12.04 LTS). Those cases all worked. Thanks to Matthew Gardiner who discoverd may key insights into tracking down the issue. The motivation for this change and some of the code originates from him via this thread: http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20140224/010554.html llvm-svn: 202428
-
John McCall authored
or virtual functions, but permit that error to be downgraded to a warning (with -Wno-error=incompatible-ms-struct), and officially support this kind of dual, ABI-mixing layout. The basic problem here is that projects which use ms_struct are often not very circumspect about what types they annotate; for example, some projects enable the pragma in a prefix header and then only selectively disable it around system header inclusions. They may only care about binary compatibility with MSVC for a subset of those structs, but that doesn't mean they have no binary compatibility concerns at all for the rest; thus we are essentially forced into supporting this hybrid ABI. But it's reasonable for us to at least point out the places where we're not making any guarantees. The original diagnostic was for dynamic classes, i.e. those with virtual functions or virtual bases; I've extended it to include all classes with bases, because we are not actually making any attempt to duplicate MSVC's base subobject layout in ms_struct (and it is indeed quite different from Itanium, even for non-virtual bases). rdar://16178895 llvm-svn: 202427
-
Jim Ingham authored
<rdar://problem/16140277> llvm-svn: 202426
-
Reid Kleckner authored
Summary: This merges VFPtrInfo and VBTableInfo into VPtrInfo, since they hold almost the same information. With that change, the vbtable mangling code can easily be applied to vftable data and we magically get the correct, unambiguous vftable names. Fixes PR17748. Reviewers: timurrrr, majnemer CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2893 llvm-svn: 202425
-
Greg Clayton authored
Changed all "localhost" to "127.0.0.1" to prevent potentially long name lookups. <rdar://problem/16154630> llvm-svn: 202424
-
Greg Clayton authored
llvm-svn: 202423
-
Roman Divacky authored
expensive libcall. Also, Qp_neg is not implemented on at least FreeBSD. This is also what gcc is doing. llvm-svn: 202422
-
Ben Langmuir authored
This reverts commit r202420, which broke the build. llvm-svn: 202421
-
Ben Langmuir authored
This cleans up some constructors that would not be safe once FileEntry owns the storage for its name. These were already suspect, since they wouldn't work if the FileEntry had an open file descriptor. The only user for these constructors was in UniqueFileContainer, which wasn't a very useful abstraction anyway. So it and UniqueDirContainer have been replaced with std::map<UniqueID, *>. This change should not affect anything outside the FileManager. llvm-svn: 202420
-