- Jul 31, 2020
-
-
Lang Hames authored
The -harness option enables new testing use-cases for llvm-jitlink. It takes a list of objects to treat as a test harness for any regular objects passed to llvm-jitlink. If any files are passed using the -harness option then the following transformations are applied to all other files: (1) Symbols definitions that are referenced by the harness files are promoted to default scope. (This enables access to statics from test harness). (2) Symbols definitions that clash with definitions in the harness files are deleted. (This enables interposition by test harness). (3) All other definitions in regular files are demoted to local scope. (This causes untested code to be dead stripped, reducing memory cost and eliminating spurious unresolved symbol errors from untested code). These transformations allow the harness files to reference and interpose symbols in the regular object files, which can be used to support execution tests (including fuzz tests) of functions in relocatable objects produced by a build. -
Lang Hames authored
This allows clients to detect invalid transformations applied by JITLink passes (e.g. inserting or removing symbols in unexpected ways) and terminate linking with an error. This change is used to simplify the error propagation logic in ObjectLinkingLayer.
-
Zequan Wu authored
-
Rahul Joshi authored
Differential Revision: https://reviews.llvm.org/D84984
-
Matt Arsenault authored
Avoid recursively calling copyPhysReg for AGPR handling. This was dropping the necessary super register implicit defs to avoid liveness verifier errors.
-
Thomas Raoux authored
This allow declaring buffers and alloc of vectors so that we can support vector load/store. Differential Revision: https://reviews.llvm.org/D84982
-
Nathan James authored
Reviewed By: gribozavr2 Differential Revision: https://reviews.llvm.org/D84926
-
Richard Smith authored
We previously used a non-aggregate RValue to represent the passed value, which violated the assumptions of call arg lowering in some cases, in particular on 32-bit Windows, where we'd end up producing an FCA store with TBAA metadata, that the IR verifier would reject.
-
Jez Ng authored
-
Changpeng Fang authored
Summary: This is in response to the review of https://reviews.llvm.org/D84873: The expensive check should be reordered last Reviewers: arsenm Differential Revision: https://reviews.llvm.org/D84890
-
Jez Ng authored
codesign (or more specifically libstuff) checks that each section in __LINKEDIT ends where the next one starts -- no gaps are permitted. This diff achieves it by aligning every section's start and end points to WordSize. Remarks: ld64 appears to satisfy the constraint by adding padding bytes when generating the __LINKEDIT data, e.g. by emitting BIND_OPCODE_DONE (which is a 0x0 byte) repeatedly. I think the approach this diff takes is a bit more elegant, but I'm not sure if it's too restrictive. In particular, it assumes padding always uses the zero byte. But we can revisit this later. Reviewed By: #lld-macho, compnerd Differential Revision: https://reviews.llvm.org/D84718
-
Jez Ng authored
Tools like `install_name_tool` and `codesign` may modify the Mach-O header and increase its size. The linker has to provide padding to make this possible. This diff does that, plus sets its default value to 32 bytes (which is what ld64 does). Unlike ld64, however, we lay out our sections *exactly* `-headerpad` bytes from the header, whereas ld64 just treats the padding requirement as a lower bound. ld64 actually starts laying out the non-header sections in the __TEXT segment from the end of the (page-aligned) segment rather than the front, so its binaries typically have more than `-headerpad` bytes of actual padding. We should consider implementing the same alignment behavior. Reviewed By: #lld-macho, compnerd Differential Revision: https://reviews.llvm.org/D84714
-
Jez Ng authored
The C++ ABI requires dylibs to pass a pointer to __cxa_atexit which does e.g. cleanup of static global variables. The C++ spec says that the pointer can point to any address in one of the dylib's segments, but in practice ld64 seems to set it to point to the header, so that's what's implemented here. Reviewed By: #lld-macho, smeenai Differential Revision: https://reviews.llvm.org/D83603
-
Nikita Popov authored
Pass the abs poison flag to the underlying ConstantRange implementation, allowing CVP to simplify based on it. Importantly, this recognizes that abs with poison flag is actually non-negative...
-
Jon Roelofs authored
This fixes an assertion failure that was being triggered in SelectionDAG::getZeroExtendInReg(), where it was trying to extend the <2xi32> to i64 (which should have been <2xi64>). Fixes: rdar://66016901 Differential Revision: https://reviews.llvm.org/D84884
-
Jonas Devlieghere authored
- Remove the link to the Python 3 job which no longer exists. - Add a link to the reproducer job.
-
Nikita Popov authored
This just adds the ConstantRange support, including exhaustive testing. It's not wired up to the IR intrinsic flag yet.
-
Jonas Devlieghere authored
-
Peiyuan Song authored
Differential Revision: https://reviews.llvm.org/D84757
-
Peiyuan Song authored
Differential Revision: https://reviews.llvm.org/D84756
-
Nikita Popov authored
Wire up ConstantRange::intrinsic() to the existing primitives for min, max and abs. The poison flag on abs is not yet taken into account.
-
Nikita Popov authored
-
Petr Hosek authored
These are needed on Windows. Differential Revision: https://reviews.llvm.org/D83999
-
Peter Steinfeld authored
When declaring the same variable twice with an initialization, we were failing an internal check. I fixed this by checking to see if the associated symbol already had an error. I added tests for pointer and non-pointer initialization of duplicate names. Differential Revision: https://reviews.llvm.org/D84969
-
Petr Hosek authored
Clang and GCC have a feature (-MD flag) to create a dependency file in a format that build systems such as Make or Ninja can read, which specifies all the additional inputs such .h files. This change introduces the same functionality to lld bringing it to feature parity with ld and gold which gained this feature recently. See https://sourceware.org/bugzilla/show_bug.cgi?id=22843 for more details and discussion. The implementation corresponds to -MD -MP compiler flag where the generated dependency file also includes phony targets which works around the errors where the dependency is removed. This matches the format used by ld and gold. Fixes PR42806 Differential Revision: https://reviews.llvm.org/D82437
-
Nikita Popov authored
Determine whether switch edges are feasible based on range information, and remove non-feasible edges lateron. This does not try to determine whether the default edge is dead, as we'd have to determine that the range is fully covered by the cases for that. Another limitation here is that we don't remove dead cases that have the same successor as a live case. I'm not handling this because I wanted to keep the edge removal based on feasible edges only, rather than inspecting ranges again there -- this does not seem like a particularly useful case to handle. Differential Revision: https://reviews.llvm.org/D84270
-
Jonas Devlieghere authored
On the ARM buildbot the returned architecture is `armv8l` while getArchitecture() just returns `arm`.
-
Florian Hahn authored
Currently we skip alias sets with only reads or a single write and no reads, but still add the pointers to the list of pointers in RtCheck. This can lead to cases where we try to access a pointer that does not exist when grouping checks. In most cases, the way we access PositionMap masked that, as the value would default to index 0. But in the example in PR46854 it causes a crash. This patch updates the logic to avoid adding pointers for alias sets that do not need any checks. It makes things slightly more verbose, by first checking the numbers of reads/writes and bailing out early if we don't need checks for the alias set. I think this makes the logic a bit simpler to follow. Reviewed By: anemet Differential Revision: https://reviews.llvm.org/D84608
-
Alexander Belyaev authored
Differential Revision: https://reviews.llvm.org/D84917
-
Sanjay Patel authored
-
Ettore Tiotto authored
ThinLTO is run using a single thread on Linux on Power. The compute_thread_count() routine calls getHostNumPhysicalCores which returns -1 by default, and so `MaxThreadCount is set to 1. unsigned llvm::ThreadPoolStrategy::compute_thread_count() const { int MaxThreadCount = UseHyperThreads ? computeHostNumHardwareThreads() : sys::getHostNumPhysicalCores(); if (MaxThreadCount <= 0) MaxThreadCount = 1; … } Fix: provide custom implementation of getHostNumPhysicalCores for Linux on Power and Linux on Z. Reviewed By: Kai, uweigand Differential Revision: https://reviews.llvm.org/D84764 -
Wouter van Oortmerssen authored
LLVM selection dag assumes "switch" indices are pointer sized, which causes problems for our 32-bit br_table. The new function ensures 32-bit operands don't get unnecessarily extended, and 64-bit operands get truncated. Note that the changes to the existing test test exactly that: the addition of -NEXT in 2 places ensures no extension is inserted (which the test previously ignored) and that the wrap is present (previously omitted in wasm64 mode). Differential Revision: https://reviews.llvm.org/D84705
-
Stanislav Mekhanoshin authored
We are using undef on the indirect move source subreg and then using implicit super-reg. This creates a problem in RA when Greedy decides to split the register. It reassigns the implicit super-reg but does not bother to change undef source because it is really does not matter. The fix is to stop lying to RA and drop undef flag. This has also hit a problem in SIFoldOperands as it can fold immediate into an indirect move since there is no undef flag anymore. That results in multiple test failures, so added the check for this case. Differential Revision: https://reviews.llvm.org/D84899
-
Jonas Devlieghere authored
-
Jordan Rupprecht authored
This test was added in D74217 (and the `.categories` file later added in ccf1c30c) around the same time I moved the test tree from `lldb/packages/Python/lldbsuite/test` to `lldb/test/API` (D71151). Since this got lost in the move, it isn't running. (I introduced an intentional syntax error, and `ninja check-lldb` passes). I moved it to the correct location, and now it runs and passes -- locally, at least -- as `ninja check-lldb-api-tools-lldb-server-registers-target-xml-reading`.
-
Simon Pilgrim authored
Avoid an unnecessary pass by value.
-
Yuanfang Chen authored
Problem: Right now, our "Running pass" is not accurate when passes are wrapped in adaptor because adaptor is never skipped and a pass could be skipped. The other problem is that "Running pass" for a adaptor is before any "Running pass" of passes/analyses it depends on. (for example, FunctionToLoopPassAdaptor). So the order of printing is not the actual order. Solution: Doing things like PassManager::Debuglogging is very intrusive because we need to specify Debuglogging whenever adaptor is created. (Actually, right now we're not specifying Debuglogging for some sub-PassManagers. Check PassBuilder) This patch move debug logging for pass as a PassInstrument callback. We could be sure that all running passes are logged and in the correct order. This could also be used to implement hierarchy pass logging in legacy PM. We could also move logging of pass manager to this if we want. The test fixes looks messy. It includes changes: - Remove PassInstrumentationAnalysis - Remove PassAdaptor - If a PassAdaptor is for a real pass, the pass is added - Pass reorder (to the correct order), related to PassAdaptor - Add missing passes (due to Debuglogging not passed down) Reviewed By: asbirlea, aeubanks Differential Revision: https://reviews.llvm.org/D84774
-
Craig Topper authored
Hans' speculative fix in b7292f2d didn't work for me. This seems to.
-
Johannes Doerfert authored
-
Jordan Rupprecht authored
-