- Nov 05, 2018
-
-
Craig Topper authored
llvm-svn: 346118
-
Dylan McKay authored
This patch fixes a bug in the AVR FRMIDX expansion logic. The expansion would leave a leftover operand from the original FRMIDX, but now attached to a MOVWRdRr instruction. The MOVWRdRr instruction did not expect this operand and so LLVM rejected the machine instruction. This would trigger an assertion: Assertion failed: ((isImpReg || Op.isRegMask() || MCID->isVariadic() || OpNo < MCID->getNumOperands() || isMetaDataOp) && "Trying to add an operand to a machine instr that is already done!"), function addOperand, file llvm/lib/CodeGen/MachineInstr.cpp Tim fixed this so that now the FRMIDX is expanded correctly into a well-formed MOVWRdRr. Patch by Tim Neumann llvm-svn: 346117 -
Dean Michael Berris authored
Summary: Prior to this change, we can run into situations where the TSC we're getting when exiting a function is less than the TSC we got when entering it. This would sometimes cause the counter for cumulative call times overflow, which was erroneously also being stored as a signed 64-bit integer. This change addresses both these issues while adding provisions for tracking CPU migrations. We do this because moving from one CPU to another doesn't guarantee that the timestamp counter for some architectures aren't guaranteed to be synchronised. For the moment, we leave the provisions there until we can update the data format to include the counting of CPU migrations we can catch. We update the necessary tests as well, ensuring that our expectations for the cycle accounting to be met in case of counter wraparound. Reviewers: mboerger Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D54088 llvm-svn: 346116
-
Craig Topper authored
v2i8/v2i16/v2i32 are promoted to v2i64. pmuludq takes a v2i64 input and produces a v2i64 output. Since we don't about the upper bits of the type legalized multiply we can use the pmuludq to produce the multiply result for the bits we do care about. llvm-svn: 346115
-
Dylan McKay authored
This is an AVR-specific workaround for a limitation of the register allocator that only exposes itself on targets with high register contention like AVR, which only has three pointer registers. The three pointer registers are X, Y, and Z. In most nontrivial functions, Y is reserved for the frame pointer, as per the calling convention. This leaves X and Z. Some instructions, such as LPM ("load program memory"), are only defined for the Z register. Sometimes this just leaves X. When the backend generates a LDDWRdPtrQ instruction with Z as the destination pointer, it usually trips up the register allocator with this error message: LLVM ERROR: ran out of registers during register allocation This patch is a hacky workaround. We ban the LDDWRdPtrQ instruction from ever using the Z register as an operand. This gives the register allocator a bit more space to allocate, fixing the regalloc exhaustion error. Here is a description from the patch author Peter Nimmervoll As far as I understand the problem occurs when LDDWRdPtrQ uses the ptrdispregs register class as target register. This should work, but the allocator can't deal with this for some reason. So from my testing, it seams like (and I might be totally wrong on this) the allocator reserves the Z register for the ICALL instruction and then the register class ptrdispregs only has 1 register left and we can't use Y for source and destination. Removing the Z register from DREGS fixes the problem but removing Y register does not. More information about the bug can be found on the avr-rust issue tracker at https://github.com/avr-rust/rust/issues/37. A bug has raised to track the removal of this workaround and a proper fix; PR39553 at https://bugs.llvm.org/show_bug.cgi?id=39553. Patch by Peter Nimmervoll llvm-svn: 346114 -
Kristof Umann authored
One of the reasons why AnalyzerOptions is so chaotic is that options can be retrieved from the command line whenever and wherever. This allowed for some options to be forgotten for a looooooong time. Have you ever heard of "region-store-small-struct-limit"? In order to prevent this in the future, I'm proposing to restrict AnalyzerOptions' interface so that only checker options can be retrieved without special getters. I would like to make every option be accessible only through a getter, but checkers from plugins are a thing, so I'll have to figure something out for that. This also forces developers who'd like to add a new option to register it properly in the .def file. This is done by * making the third checker pointer parameter non-optional, and checked by an assert to be non-null. * I added new, but private non-checkers option initializers, meant only for internal use, * Renamed these methods accordingly (mind the consistent name for once with getBooleanOption!): - getOptionAsString -> getCheckerStringOption, - getOptionAsInteger -> getCheckerIntegerOption * The 3 functions meant for initializing data members (with the not very descriptive getBooleanOption, getOptionAsString and getOptionAsUInt names) were renamed to be overloads of the getAndInitOption function name. * All options were in some way retrieved via getCheckerOption. I removed it, and moved the logic to getStringOption and getCheckerStringOption. This did cause some code duplication, but that's the only way I could do it, now that checker and non-checker options are separated. Note that the non-checker version inserts the new option to the ConfigTable with the default value, but the checker version only attempts to find already existing entries. This is how it always worked, but this is clunky and I might end reworking that too, so we can eventually get a ConfigTable that contains the entire configuration of the analyzer. Differential Revision: https://reviews.llvm.org/D53483 llvm-svn: 346113
-
Kristof Umann authored
Windows buildbots break with the previous commit '[analyzer][PlistMacroExpansion] Part 2.: Retrieving the macro name and primitive expansion'. This patch attempts to solve this issue. llvm-svn: 346112
-
Kristof Umann authored
llvm-svn: 346111
-
Craig Topper authored
llvm-svn: 346110
-
David Carlier authored
Reviewers: JDevlieghere, tatyana-krasnukha Reviwed By: tatyana-krasnukha Differential Revision: https://reviews.llvm.org/D54084 llvm-svn: 346109
-
Vedant Kumar authored
Using TargetTransformInfo allows the splitting pass to factor in the code size cost of instructions as it decides whether or not outlining is profitable. This did not regress the overall amount of outlining seen on the handful of internal frameworks I tested. Thanks to Jun Bum Lim for suggesting this! Differential Revision: https://reviews.llvm.org/D53835 llvm-svn: 346108
-
Petr Hosek authored
-static relies on lld's behavior, but -Bstatic/dynamic is supported across all linkers. Differential Revision: https://reviews.llvm.org/D54082 llvm-svn: 346107
-
Craig Topper authored
llvm-svn: 346106
-
Craig Topper authored
llvm-svn: 346105
-
Marshall Clow authored
llvm-svn: 346104
-
Sylvestre Ledru authored
llvm-svn: 346103
-
Craig Topper authored
Summary: This also enables some constant folding from KnownBits propagation. This helps on some cases vXi64 case in 32-bit mode where constant vectors appear as vXi32 and a bitcast. This can prevent getNode from constant folding sra/shl/srl. Reviewers: RKSimon, spatel Reviewed By: spatel Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D54069 llvm-svn: 346102
-
Sylvestre Ledru authored
llvm-svn: 346101
-
Kamil Rytarowski authored
D53915 llvm-svn: 346100
-
- Nov 04, 2018
-
-
Dave Lee authored
Summary: There are 2 changes here: 1. Use system sed instead of the sed found in the user's path. This fixes this script in the case the user has gnu-sed in their $PATH before bsd sed since `-i ''` isn't compatible and you need `-i` instead. 2. `set -e` in this script so it fails as soon as one of these commands fail instead of throwing errors for each file if they fail Since this is only ran on macOS, and we're already using this absolute path below, this seems like a safe addition Reviewers: kastiglione, beanz Reviewed By: kastiglione Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D49776 llvm-svn: 346099 -
Kamil Rytarowski authored
This fixes sanitization of this library call on NetBSD. Extracted as a part of D42050. llvm-svn: 346098
-
Sanjay Patel authored
In PR39475: https://bugs.llvm.org/show_bug.cgi?id=39475 ..we may fail to recognize/simplify fabs() in some cases because we do not canonicalize fcmp with a -0.0 operand. Adding that canonicalization can cause regressions on min/max FP tests, so that's this patch: for the purpose of determining whether something is min/max, let the value returned by the select determine how we treat a 0.0 operand in the fcmp. This patch doesn't actually change the -0.0 to +0.0. It just changes the analysis, so we don't fail to recognize equivalent min/max patterns that only differ in the signbit of 0.0. Differential Revision: https://reviews.llvm.org/D54001 llvm-svn: 346097
-
Kristof Umann authored
llvm-svn: 346096
-
Kristof Umann authored
This patch adds a couple new functions to acquire the macro's name, and also expands it, although it doesn't expand the arguments, as seen from the test files Differential Revision: https://reviews.llvm.org/D52794 llvm-svn: 346095
-
Pavel Labath authored
Thanks to Dávid Bolvanský for pointing that out. llvm-svn: 346094
-
Pavel Labath authored
Summary: A fairly simple operation as setting a breakpoint (writing a breakpoint opcode) at a given address was going through three classes: NativeProcessProtocol which called NativeBreakpointList, which then called SoftwareBrekpoint, only to end up again in NativeProcessProtocol to do the actual writing itself. This is unnecessarily complex and can be simplified by moving all of the logic into NativeProcessProtocol class itself, removing a lot of boilerplate. One of the reeasons for this complexity was that (it seems) NativeBreakpointList class was meant to hold both software and hardware breakpoints. However, that never materialized, and hardware breakpoints are stored in a separate map holding only hardware breakpoints. Essentially, this patch makes software breakpoints follow that approach by replacing the heavy SoftwareBraekpoint with a light struct of the same name, which holds only the data necessary to describe one breakpoint. The rest of the logic is in the main class. As, at the lldb-server level, handling software and hardware breakpoints is very different, this seems like a reasonable state of things. Reviewers: krytarowski, zturner, clayborg Subscribers: mgorny, lldb-commits Differential Revision: https://reviews.llvm.org/D52941 llvm-svn: 346093
-
Craig Topper authored
This makes this code consistent with the nearly identical code in visitZERO_EXTEND. llvm-svn: 346090
-
Jan Kratochvil authored
dotest.py started reporting: Exception: Found multiple tests with the name TestSampleTest.py After the commit of: https://reviews.llvm.org/D54056 llvm-svn: 346089
-
Petr Hosek authored
This makes the tests stricter by not only matching the runtime file name, but the entire path into the resource directory. Differential Revision: https://reviews.llvm.org/D54064 llvm-svn: 346088
-
Craig Topper authored
[SelectionDAG] Remove special methods for creating *_EXTEND_VECTOR_INREG nodes. Move asserts into getNode. These methods were just wrappers around getNode with additional asserts (identical and repeated 3 times). But getNode already has a switch that can be used to hold these asserts that allows them to be shared for all 3 opcodes. This also enables checking on the places that create these nodes without using the wrappers. The rest of the patch is just changing all callers to use getNode directly. llvm-svn: 346087
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346086
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346085
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346084
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Acked-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346083
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346082
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346081
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346080
-
Jan Vesely authored
Signed-off-by:
Jan Vesely <jan.vesely@rutgers.edu> Reviewed-By:
Aaron Watry <awatry@gmail.com> llvm-svn: 346079
-
Jan Vesely authored
Signed-off-by:Jan Vesely <jan.vesely@rutgers.edu> Reviewer: Aaron Watry llvm-svn: 346078
-
Jan Vesely authored
Signed-off-by:Jan Vesely <jan.vesely@rutgers.edu> Reviewer: Aaron Watry llvm-svn: 346077
-