- Apr 05, 2013
-
-
Adrian Prantl authored
llvm-svn: 178804
-
- Apr 04, 2013
-
-
Eli Bendersky authored
llvm-svn: 178771
-
Manman Ren authored
the target system. It was hard-coded to 4 bytes before. I can't get llvm to generate a ref_addr on a reasonably sized testing case. rdar://problem/13559431 llvm-svn: 178722
-
- Apr 03, 2013
-
-
Bill Schmidt authored
For this we need to use a libcall. Previously LLVM didn't implement libcall support for frem, so I've added it in the usual straightforward manner. A test case from the bug report is included. llvm-svn: 178639
-
Eric Christopher authored
llvm-svn: 178624
-
Eric Christopher authored
llvm-svn: 178623
-
Jakob Stoklund Olesen authored
It it still possible to extract information from itineraries, for example. llvm-svn: 178582
-
- Apr 02, 2013
-
-
Jakob Stoklund Olesen authored
This should fix the PPC buildbots. llvm-svn: 178558
-
Jakob Stoklund Olesen authored
The new instruction scheduling models provide information about the number of cycles consumed on each processor resource. This makes it possible to estimate ILP more accurately than simply counting instructions / issue width. The functions getResourceDepth() and getResourceLength() now identify the limiting processor resource, and return a cycle count based on that. This gives more precise resource information, particularly in traces that use one resource a lot more than others. llvm-svn: 178553
-
Arnold Schwaighofer authored
This is helps on architectures where i8,i16 are not legal but we have byte, and short loads/stores. Allowing us to merge copies like the one below on ARM. copy(char *a, char *b, int n) { do { int t0 = a[0]; int t1 = a[1]; b[0] = t0; b[1] = t1; radar://13536387 llvm-svn: 178546
-
- Apr 01, 2013
-
-
Arnold Schwaighofer authored
We would also like to merge sequences that involve a variable index like in the example below. int index = *idx++ int i0 = c[index+0]; int i1 = c[index+1]; b[0] = i0; b[1] = i1; By extending the parsing of the base pointer to handle dags that contain a base, index, and offset we can handle examples like the one above. The dag for the code above will look something like: (load (i64 add (i64 copyfromreg %c) (i64 signextend (i8 load %index)))) (load (i64 add (i64 copyfromreg %c) (i64 signextend (i32 add (i32 signextend (i8 load %index)) (i32 1))))) The code that parses the tree ignores the intermediate sign extensions. However, if there is a sign extension it needs to be on all indexes. (load (i64 add (i64 copyfromreg %c) (i64 signextend (add (i8 load %index) (i8 1)))) vs (load (i64 add (i64 copyfromreg %c) (i64 signextend (i32 add (i32 signextend (i8 load %index)) (i32 1))))) radar://13536387 llvm-svn: 178483
-
- Mar 30, 2013
-
-
Benjamin Kramer authored
Fixes the crash reported in PR15608. llvm-svn: 178429
-
Eric Christopher authored
llvm-svn: 178386
-
- Mar 29, 2013
-
-
Eric Christopher authored
die values. A lot of DIEs have 10 attributes in C++ code (example clang), none had more than 12. Seems like a good default. llvm-svn: 178366
-
Eric Christopher authored
entire original compile unit has been constructed. llvm-svn: 178365
-
Benjamin Kramer authored
It was superseded by MachineBlockPlacement and disabled by default since LLVM 3.1. llvm-svn: 178349
-
Nadav Rotem authored
llvm-svn: 178346
-
Chad Rosier authored
immediate in a register. I don't believe this should ever fail, but I see no harm in trying to make this code bullet proof. I've added an assert to ensure my assumtion is correct. If the assertion fires something is wrong and we should fix it, rather then just silently fall back to SelectionDAG isel. llvm-svn: 178305
-
- Mar 27, 2013
-
-
Hal Finkel authored
This is a follow-up to r178073 (which should actually make target-customized spilling work again). I still don't have a regression test for this (but it would be good to have one; Thumb 1 and Mips16 use this callback as well). Patch by Richard Sandiford. llvm-svn: 178137
-
- Mar 26, 2013
-
-
Hal Finkel authored
As pointed out by Richard Sandiford, my recent updates to the register scavenger broke targets that use custom spilling (because the new code assumed that if there were no valid spill slots, than spilling would be impossible). I don't have a test case, but it should be possible to create one for Thumb 1, Mips 16, etc. llvm-svn: 178073
-
Hal Finkel authored
The previous algorithm could not deal properly with scavenging multiple virtual registers because it kept only one live virtual -> physical mapping (and iterated through operands in order). Now we don't maintain a current mapping, but rather use replaceRegWith to completely remove the virtual register as soon as the mapping is established. In order to allow the register scavenger to return a physical register killed by an instruction for definition by that same instruction, we now call RS->forward(I) prior to eliminating virtual registers defined in I. This requires a minor update to forward to ignore virtual registers. These new features will be tested in forthcoming commits. llvm-svn: 178058
-
Michael Liao authored
- Handle the case where the result of 'insert_subvect' is bitcasted before 'extract_subvec'. This removes the redundant insertf128/extractf128 pair on unaligned 256-bit vector load/store on vectors of non 64-bit integer. llvm-svn: 177945
-
- Mar 25, 2013
-
-
Shuxin Yang authored
For instance, following transformation will be disabled: x + x + x => 3.0f * x; The problem of these transformations is that it introduces a FP constant, which following Instruction-Selection pass cannot handle. Reviewed by Nadav, thanks a lot! rdar://13445387 llvm-svn: 177933
-
Eric Christopher authored
llvm-svn: 177920
-
Eric Christopher authored
llvm-svn: 177898
-
Duncan Sands authored
llvm-svn: 177869
-
Yiannis Tsiouris authored
llvm-svn: 177867
-
- Mar 23, 2013
-
-
Owen Anderson authored
Remove the type legality check from the SelectionDAGBuilder when it lowers @llvm.fmuladd to ISD::FMA nodes. Performing this check unilaterally prevented us from generating FMAs when the incoming IR contained illegal vector types which would eventually be legalized to underlying types that *did* support FMA. For example, an @llvm.fmuladd on an OpenCL float16 should become a sequence of float4 FMAs, not float4 fmul+fadd's. NOTE: Because we still call the target-specific profitability hook, individual targets can reinstate the old behavior, if desired, by simply performing the legality check inside their callback hook. They can also perform more sophisticated legality checks, if, for example, some illegal vector types can be productively implemented as FMAs, but not others. llvm-svn: 177820
-
Hal Finkel authored
177774 broke the lld-x86_64-darwin11 builder; error: error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') for (SI = 0; SI < Scavenged.size(); ++SI) ~~ ^ ~~~~~~~~~~~~~~~~ Fix this by making SI also unsigned. llvm-svn: 177780
-
Hal Finkel authored
This patch lets the register scavenger make use of multiple spill slots in order to guarantee that it will be able to provide multiple registers simultaneously. To support this, the RS's API has changed slightly: setScavengingFrameIndex / getScavengingFrameIndex have been replaced by addScavengingFrameIndex / isScavengingFrameIndex / getScavengingFrameIndices. In forthcoming commits, the PowerPC backend will use this capability in order to implement the spilling of condition registers, and some special-purpose registers, without relying on r0 being reserved. In some cases, spilling these registers requires two GPRs: one for addressing and one to hold the value being transferred. llvm-svn: 177774
-
- Mar 22, 2013
-
-
Hal Finkel authored
ScavengedRC was a dead private variable (set, but not otherwise used). No functionality change intended. llvm-svn: 177708
-
- Mar 21, 2013
-
-
Matt Arsenault authored
llvm-svn: 177620
-
Justin Holewinski authored
llvm-svn: 177600
-
- Mar 20, 2013
-
-
Nadav Rotem authored
When computing the demanded bits of Load SDNodes, make sure that we are looking at the loaded-value operand and not the ptr result (in case of pre-inc loads). rdar://13348420 llvm-svn: 177596
-
Christian Konig authored
This reverts commit 06091513c283c863296f01cc7c2e86b56bb50d02. The code is obviously wrong, but the trivial fix causes inefficient code generation on X86. Somebody with more knowledge of the code needs to take a look here. Signed-off-by:
Christian König <christian.koenig@amd.com> llvm-svn: 177529
-
Justin Holewinski authored
case of order propagation during isel. Thanks Owen for the suggestion! llvm-svn: 177525
-
Christian Konig authored
TargetOpcodes need to be treaded as Machine- and not ISD-Opcodes. Signed-off-by:
Christian König <christian.koenig@amd.com> llvm-svn: 177518
-
Justin Holewinski authored
A node's ordering is only propagated during legalization if (a) the new node does not have an ordering (is not a CSE'd node), or (b) the new node has an ordering that is higher than the node being legalized. llvm-svn: 177465
-
- Mar 19, 2013
-
-
Jakub Staszak authored
Also remove unneeded #include and forward declaration. llvm-svn: 177357
-
Jakub Staszak authored
llvm-svn: 177356
-