- Mar 07, 2015
-
-
Rui Ueyama authored
Both File and Atom have virtual destructors. We don't need to repeat that in derived classes. llvm-svn: 231568
-
Aaron Ballman authored
llvm-svn: 231567
-
Aaron Ballman authored
llvm-svn: 231566
-
Benjamin Kramer authored
llvm-svn: 231565
-
Benjamin Kramer authored
I disabled putting the new global into the same COMDAT as the function for now. There's a fundamental problem when we inline references to the global but still have the global in a COMDAT linked to the inlined function. Since this is only an optimization there may be other versions of the COMDAT around that are missing the new global and hell breaks loose at link time. I hope the chromium build doesn't break this time :) llvm-svn: 231564
-
Andrea Di Biagio authored
This patch fixes the logic in the DAGCombiner that folds an AND node according to rule: (and (X (load V)), C) -> (X (load V)) An AND between a vector load 'X' and a constant build_vector 'C' can be folded into the load itself only if we can prove that the AND operation is redundant. The algorithm implemented by 'visitAND' firstly computes the splat value 'S' from C, and then checks if S has the lower 'B' bits set (where B is the size in bits of the vector element type). The algorithm takes into account also the 'undef' bits in the splat mask. Unfortunately, the algorithm only worked under the assumption that the size of S is a multiple of the vector element type. With this patch, we conservatively avoid folding the AND if the splat bits are not compatible with the vector element type. Added X86 test and-load-fold.ll Differential Revision: http://reviews.llvm.org/D8085 llvm-svn: 231563
-
Kuba Brecka authored
llvm-svn: 231562
-
Chandler Carruth authored
build this header in a module. llvm-svn: 231561
-
Chandler Carruth authored
libc++. This lets me almost self-host on Linux with libc++ and libc++abi very simply. Currently, MCJIT and OrcJIT are failing due to uncaught exceptions, and the Go binding tests are failing to build due to not linking in the correct C++ standard library. llvm-svn: 231560
-
Chandler Carruth authored
simplicity in build systems, silence '-stdlib=libc++' when linking. Even if we're not linking C++ code per-se, we may be passing this flag so that when we are linking C++ code we pick up the desired standard library. While most build systems already provide separate C and C++ compile flags, many conflate link flags. Sadly, CMake is among them causing this warning in a libc++ selfhost. llvm-svn: 231559
-
Chandler Carruth authored
generation. llvm-svn: 231558
-
Chandler Carruth authored
llvm-svn: 231557
-
Chandler Carruth authored
This will provide the analogous replacements for the PassManagerBuilder and other code long term. This code is extracted from the opt tool currently, and I plan to extend it as I build up support for using the new pass manager in Clang and other places. Mailing this out for review in part to let folks comment on the terrible names here. A brief word about why I chose the names I did. The library is called "Passes" to try and make it clear that it is a high-level utility and where *all* of the passes come together and are registered in a common library. I didn't want it to be *limited* to a registry though, the registry is just one component. The class is a "PassBuilder" but this name I'm less happy with. It doesn't build passes in any traditional sense and isn't a Builder-style API at all. The class is a PassRegisterer or PassAdder, but neither of those really make a lot of sense. This class is responsible for constructing passes for registry in an analysis manager or for population of a pass pipeline. If anyone has a better name, I would love to hear it. The other candidate I looked at was PassRegistrar, but that doesn't really fit either. There is no register of all the passes in use, and so I think continuing the "registry" analog outside of the registry of pass *names* and *types* is a mistake. The objects themselves are just objects with the new pass manager. Differential Revision: http://reviews.llvm.org/D8054 llvm-svn: 231556
-
Simon Pilgrim authored
This patch attempts to convert a SCALAR_TO_VECTOR using an operand from an EXTRACT_VECTOR_ELT into a VECTOR_SHUFFLE. This prevents many cases of spilling scalar data between the gpr + simd registers. At present the optimization only accepts cases where there is no TRUNC of the scalar type (i.e. all types must match). Differential Revision: http://reviews.llvm.org/D8132 llvm-svn: 231554
-
Jordan Rose authored
In theory we could assume a CF property is stored at +0 if there's not a custom setter, but that's not really worth the complexity. What we do know is that a CF property can't have ownership attributes, and so we shouldn't assume anything about the ownership of the ivar. rdar://problem/20076963 llvm-svn: 231553
-
Rui Ueyama authored
Atoms with fallback atoms are never be added to the symbol table. However, we added such atoms to _undefines array. We had to call isCoalescedAway to identify and skip them. We should just stop adding them in the first place. This seems to make the linker ~1% faster in my test case. llvm-svn: 231552
-
Rui Ueyama authored
If an undefined symbol is added to the symbol table by the previous call of SymbolTable::add, SymbolTable::isDefined will always return false for the same symbol. llvm-svn: 231551
-
Vince Harron authored
Linux configure+make builds have ~175 tests failing that aren't failing in cmake builds. The tests have error messages like "'a.out' doesn't contain the architecture x86-64" ObjectFileELF plugin wasn't loaded when this message was output. I found ScriptInterpreterPython::InitializePrivate() is calling Debugger::Terminate(), which terminates ObjectFileELF (and lots of other stuff) setup earlier in the InitializeForLLGS. So I moved python Init/Term from Init/TermForLLGS to Init/Term llvm-svn: 231550
-
Rui Ueyama authored
This is yet another optimization patch. Previously we called SymbolTable::isDefined() and SymbolTable::findByName() from a very frequently executed function. Because isDefined calls findByName, findByName is called twice on each iteration. findByName is not a cheap function. It computes a hash value for a given symbol name. When linking C++ programs, it can be expensive because of C++ mangled long symbols. This patch reduces the number of call from 2 to 1. Performance improvements by this patch was larger than I expected. Linking time of chrome.dll gets almost 5% shorter. llvm-svn: 231549
-
Anton Yartsev authored
llvm-svn: 231548
-
Eric Christopher authored
llvm-svn: 231547
-
Eric Christopher authored
non-temporary enabling options. This is part of removing misched-bench as an option. llvm-svn: 231546
-
Rui Ueyama authored
Previously we added all undefined symbols found in object files to the dead strip root. This patch makes the linker to stop doing that. Undefined symbols would be resolved anyway, so this patch doesn't change the linker behavior. It should slightly improve performance but it's really marginal. This is a cleanup. llvm-svn: 231545
-
Frederic Riss authored
Doing this gets function's low_pc and global variable's locations right in the output debug info. It also could get right other attributes that need to be relocated (in linker terms), but I don't know of any other than the address attributes. This doesn't fixup low_pc attributes in compile_unit, lexical_block or inlined subroutine, nor does it get right high_pc attributes for function. This will come in a subsequent commit. llvm-svn: 231544
-
Rui Ueyama authored
llvm-svn: 231543
-
Rui Ueyama authored
llvm-svn: 231542
-
Hans Wennborg authored
This broke the Chromium build. Links were failing with messages like: obj/dbus/libdbus_test_support.a(obj/dbus/dbus_test_support.mock_object_proxy.o):../../dbus/mock_object_proxy.cc:function dbus::MockObjectProxy::Detach(): warning: relocation refers to discarded section /usr/local/google/work/chromium/src/third_party/binutils/Linux_x64/Release/bin/ld.gold: error: treating warnings as errors llvm-svn: 231541
-
Anton Yartsev authored
llvm-svn: 231540
-
Eric Christopher authored
to disable lane switching if we don't actually have the instruction set we want to switch to. Models the earlier check above the conditional for the pass. The testcase is one that triggered with the assert that's added as part of the fix, use it to avoid adding a new testcase as it highlights the same problem. llvm-svn: 231539
-
Richard Smith authored
of extern "C" declarations. This is simpler and vastly more efficient for modules builds (we no longer need to load *all* extern "C" declarations to determine if we have a redeclaration). No functionality change intended. llvm-svn: 231538
-
Greg Clayton authored
Help for _regexp-break wasn't very clear. Added more detailed explanations of all things that can be typed by the _regexp-break command. <rdar://problem/12281058> llvm-svn: 231537
-
David Majnemer authored
llvm-svn: 231536
-
Greg Clayton authored
Make sure to re-read the file data you can get from OptionValueFileSpec::GetFileContents(...) when the file has changed. This means you can set an expression prefix file with: (lldb) settings set target.expr-prefix /tmp/to/prefix.txt And you can run an expression and modify your expression prefix file in another editor without having to type: (lldb) settings set target.expr-prefix /tmp/to/prefix.txt again... <rdar://problem/12155942> llvm-svn: 231535
-
David Majnemer authored
This is a little nicer as it keeps the contents of .xdata away from normal .rdata; we expect .xdata to be far colder than .rdata. llvm-svn: 231534
-
David Majnemer authored
We didn't create type info based on the unqualified pointee type, causing RTTI mismatches. llvm-svn: 231533
-
Richard Smith authored
llvm-svn: 231532
-
Frederic Riss authored
Reference attributes are mainly handled by just creating DIEEntry attributes for them. There is a special case for DW_FORM_ref_addr attributes though, because the DIEEntry code needs a DwarfDebug code to emit them (and we don't have one as we do no CodeGen). In that case, just use DIEInteger attributes with the right form. llvm-svn: 231531
-
Frederic Riss authored
The start offset of a linked unit is known before starting to clone its DIEs. Handling DW_FORM_ref_addr attributes requires that this offset is set while cloning the unit. Split CompileUnit::computeOffsets() into setStartOffset() and computeNextUnitOffset() and call them repsectively before cloning the DIEs and right after. llvm-svn: 231530
-
Frederic Riss authored
dsymutil needs to 'patch' attribute values after creating them. Just add this trivial capability. llvm-svn: 231529
-
Olivier Sallenave authored
llvm-svn: 231528
-