- Aug 10, 2015
-
-
James Y Knight authored
The LDD/STD instructions can load/store a 64bit quantity from/to memory to/from a consecutive even/odd pair of (32-bit) registers. They are part of SparcV8, and also present in SparcV9. (Although deprecated there, as you can store 64bits in one register). As recommended on llvmdev in the thread "How to enable use of 64bit load/store for 32bit architecture" from Apr 2015, I've modeled the 64-bit load/store operations as working on a v2i32 type, rather than making i64 a legal type, but with few legal operations. The latter does not (currently) work, as there is much code in llvm which assumes that if i64 is legal, operations like "add" will actually work on it. The same assumption does not hold for v2i32 -- for vector types, it is workable to support only load/store, and expand everything else. This patch: - Adds a new register class, IntPair, for even/odd pairs of registers. - Modifies the list of reserved registers, the stack spilling code, and register copying code to support the IntPair register class. - Adds support in AsmParser. (note that in asm text, you write the name of the first register of the pair only. So the parser has to morph the single register into the equivalent paired register). - Adds the new instructions themselves (LDD/STD/LDDA/STDA). - Hooks up the instructions and registers as a vector type v2i32. Adds custom legalizer to transform i64 load/stores into v2i32 load/stores and bitcasts, so that the new instructions can actually be generated, and marks all operations other than load/store on v2i32 as needing to be expanded. - Copies the unfortunate SelectInlineAsm hack from ARMISelDAGToDAG. This hack undoes the transformation of i64 operands into two arbitrarily-allocated separate i32 registers in SelectionDAGBuilder. and instead passes them in a single IntPair. (Arbitrarily allocated registers are not useful, asm code expects to be receiving a pair, which can be passed to ldd/std.) Also adds a bunch of test cases covering all the bugs I've added along the way. Differential Revision: http://reviews.llvm.org/D8713 llvm-svn: 244484
-
Rafael Espindola authored
llvm-svn: 244483
-
Rafael Espindola authored
llvm-svn: 244482
-
Jon Roelofs authored
I looked into adding a warning / error for this to FileCheck, but there doesn't seem to be a good way to avoid it triggering on the instances of it in RUN lines. llvm-svn: 244481
-
Rafael Espindola authored
llvm-svn: 244480
-
Chad Rosier authored
llvm-svn: 244479
-
Yaron Keren authored
llvm-svn: 244476
-
Igor Laevsky authored
Differential Revision: http://reviews.llvm.org/D11687 llvm-svn: 244474
-
Yaron Keren authored
llvm-svn: 244472
-
Yaron Keren authored
llvm-svn: 244471
-
Yaron Keren authored
variable initialization from its usage in the push_back making collapse of the two statements unlikely even without a comment. llvm-svn: 244470
-
Mark Heffernan authored
This change adds the unroll metadata "llvm.loop.unroll.enable" which directs the optimizer to unroll a loop fully if the trip count is known at compile time, and unroll partially if the trip count is not known at compile time. This differs from "llvm.loop.unroll.full" which explicitly does not unroll a loop if the trip count is not known at compile time. The "llvm.loop.unroll.enable" is intended to be added for loops annotated with "#pragma unroll". llvm-svn: 244466
-
Chad Rosier authored
llvm-svn: 244465
-
Sanjay Patel authored
llvm-svn: 244464
-
Sanjay Patel authored
llvm-svn: 244463
-
Yaron Keren authored
llvm-svn: 244461
-
Sanjay Patel authored
llvm-svn: 244460
-
Sanjay Patel authored
llvm-svn: 244458
-
Yaron Keren authored
llvm-svn: 244457
-
Yaron Keren authored
llvm-svn: 244455
-
Aaron Ballman authored
llvm-svn: 244452
-
Silviu Baranga authored
Summary: This adds a hook to TTI which enables us to selectively turn on by default interleaved access vectorization for targets on which we have have performed the required benchmarking. Reviewers: rengolin Subscribers: rengolin, llvm-commits Differential Revision: http://reviews.llvm.org/D11901 llvm-svn: 244449
-
Fraser Cormack authored
The scalarizer can cache incorrect entries when walking up a chain of insertelement instructions. This occurs when it encounters more than one instruction that it is not actively searching for, as it unconditionally caches every element it finds. The fix is to only cache the first element that it isn't searching for so we don't overwrite correct entries. Reviewers: hfinkel Differential Revision: http://reviews.llvm.org/D11559 llvm-svn: 244448
-
Rafael Espindola authored
llvm-svn: 244447
-
Michael Kruse authored
llvm-svn: 244445
-
Michael Kruse authored
Summary: Analogously to Function::viewCFG(), RegionInfo::view() and RegionInfo::viewOnly() are meant to be called in debugging sessions. They open a viewer to show how RegionInfo currently understands the region hierarchy. The functions viewRegion(Function*) and viewRegionOnly(Function*) invoke a fresh region analysis of the function in contrast to viewRegion(RegionInfo*) and viewRegionOnly(RegionInfo*) which show the current analysis result. Reviewers: grosser Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11875 llvm-svn: 244444
-
Michael Kruse authored
This allows printing region graphs when only the RegionInfo (e.g. Region::getRegionInfo()), but no RegionInfoPass object is available. Specifically, we will use this to print RegionInfo graphs in the debugger. Differential version: http://reviews.llvm.org/D11874 Reviewed-by: grosser llvm-svn: 244442
-
Michael Kruse authored
Authorized-by: grosser llvm-svn: 244441
-
Michael Kruse authored
llvm-svn: 244440
-
Robert Lougher authored
PR24139 contains an analysis of poor register allocation. One of the findings was that when calculating the spill weight, a rematerializable interval once split is no longer rematerializable. This is because the isRematerializable check in CalcSpillWeights.cpp does not follow the copies introduced by live range splitting (after splitting, the live interval register definition is a copy which is not rematerializable). Reviewers: qcolombet Differential Revision: http://reviews.llvm.org/D11686 llvm-svn: 244439
-
Marina Yatsina authored
llvm-svn: 244438
-
Yaron Keren authored
llvm-svn: 244434
-
NAKAMURA Takumi authored
Note, I didn't reformat entirely, but partially where I touched in previous commits. llvm-svn: 244432
-
NAKAMURA Takumi authored
llvm-svn: 244431
-
NAKAMURA Takumi authored
llvm-svn: 244430
-
NAKAMURA Takumi authored
llvm-svn: 244429
-
Craig Topper authored
llvm-svn: 244426
-
- Aug 09, 2015
-
-
Saleem Abdulrasool authored
The SP was always unconditionally assigned to later, but initialised early. This delays the initialisation, and avoids the dead store. Identified by clang static analysis. No functional change intended. llvm-svn: 244423
-
Adam Nemet authored
This is no longer used in any of the callers. Also remove the logic of handling this argument. llvm-svn: 244421
-
Adam Nemet authored
LoopDistribution does its own filtering now. llvm-svn: 244420
-