- Mar 31, 2009
-
-
Dan Gohman authored
llvm-svn: 68113
-
Dan Gohman authored
instructions. This fixes lua. llvm-svn: 68083
-
- Mar 29, 2009
-
-
Duncan Sands authored
when using -soft-float. Based on a patch by Jakob Stoklund Olesen. llvm-svn: 67996
-
- Mar 28, 2009
-
-
Arnold Schwaighofer authored
a CALL and a RET node more generic. Add a test for tail calls with a void return. llvm-svn: 67943
-
Arnold Schwaighofer authored
Enable tail call optimization for functions that return a struct (bug 3664) and for functions that return types that need extending (e.g i1). llvm-svn: 67934
-
Evan Cheng authored
Optimize some 64-bit multiplication by constants into two lea's or one lea + shl since imulq is slow (latency 5). e.g. x * 40 => shlq $3, %rdi leaq (%rdi,%rdi,4), %rax This has the added benefit of allowing more multiply to be folded into addressing mode. e.g. a * 24 + b => leaq (%rdi,%rdi,2), %rax leaq (%rsi,%rax,8), %rax llvm-svn: 67917
-
Dan Gohman authored
llvm-svn: 67881
-
Dan Gohman authored
default constructor produces an uninitialized APInt. This fixes PR3896. llvm-svn: 67879
-
- Mar 26, 2009
-
-
Bill Wendling authored
llvm-svn: 67742
-
- Mar 25, 2009
-
-
Evan Cheng authored
Also fixes SDISel so it *does not* force promote return value if the function is not marked signext / zeroext. llvm-svn: 67701
-
Dale Johannesen authored
stoppoint nodes around until Legalize; doing this imposed an ordering on a sequence of loads that came from different lines, interfering with scheduling. llvm-svn: 67692
-
- Mar 24, 2009
-
-
Chris Lattner authored
the target constraint specifies a specific physreg. llvm-svn: 67618
-
Chris Lattner authored
llvm-svn: 67617
-
Chris Lattner authored
fail. llvm-svn: 67616
-
Dan Gohman authored
canClobberPhysRegDefs if the successor node doesn't clobber any physical registers. llvm-svn: 67587
-
Dan Gohman authored
help out the register pressure reduction heuristics in the case of nodes with multiple uses. Currently this uses very conservative heuristics, so it doesn't have a broad impact, but in cases where it does help it can make a big difference. llvm-svn: 67586
-
- Mar 23, 2009
-
-
Dan Gohman authored
a data dependency on the load node, so it really needs a data-dependence edge to the load node, even if the load previously existed. And add a few comments. llvm-svn: 67554
-
Dan Gohman authored
actually have uses, which reflects the way it's used. llvm-svn: 67540
-
Dan Gohman authored
in an SUnit, instead of just the first one. This fix is needed by some upcoming scheduler changes. llvm-svn: 67531
-
Dan Gohman authored
defs, regardless of whether they are actually used. llvm-svn: 67528
-
Dan Gohman authored
explicitly flush it. llvm-svn: 67526
-
Evan Cheng authored
Model inline asm constraint which ties an input to an output register as machine operand TIED_TO constraint. This eliminated the need to pre-allocate registers for these. This also allows register allocator can eliminate the unneeded copies. llvm-svn: 67512
-
- Mar 20, 2009
-
-
Dan Gohman authored
llvm-svn: 67400
-
Evan Cheng authored
For inline asm output operand that matches an input. Encode the input operand index in the high bits. llvm-svn: 67387
-
Sanjiv Gupta authored
llvm-svn: 67370
-
- Mar 18, 2009
-
-
Mon P Wang authored
and expanding a bit convert (PR3711). In both cases, we extract the valid part of the widen vector and then do the conversion. llvm-svn: 67175
-
Rafael Espindola authored
Some architectures (like x86) don't require it. This fixes bug 3779. llvm-svn: 67132
-
- Mar 17, 2009
-
-
Chris Lattner authored
size by the array amount as an i32 value instead of promoting from i32 to i64 then doing the multiply. Not doing this broke wrap-around assumptions that the optimizers (validly) made. The ultimate real fix for this is to introduce i64 version of alloca and remove mallocinst. This fixes PR3829 llvm-svn: 67093
-
Mon P Wang authored
vector shuffle mask. Forced the mask to be built using i32. Note: this will be irrelevant once vector_shuffle no longer takes a build vector for the shuffle mask. llvm-svn: 67076
-
- Mar 14, 2009
-
-
Mon P Wang authored
if FPConstant is legal because if the FPConstant doesn't need to be stored in a constant pool, the transformation is unlikely to be profitable. llvm-svn: 66994
-
Dan Gohman authored
ptrtoint and inttoptr in X86FastISel. These casts aren't always handled in the generic FastISel code because X86 sometimes needs custom code to do truncation and zero-extension. llvm-svn: 66988
-
- Mar 13, 2009
-
-
Dan Gohman authored
by inserting explicit zero extensions where necessary. Included is a testcase where SelectionDAG produces a virtual register holding an i1 value which FastISel previously mistakenly assumed to be zero-extended. llvm-svn: 66941
-
Evan Cheng authored
Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues. 1. ConstantPoolSDNode alignment field is log2 value of the alignment requirement. This is not consistent with other SDNode variants. 2. MachineConstantPool alignment field is also a log2 value. 3. However, some places are creating ConstantPoolSDNode with alignment value rather than log2 values. This creates entries with artificially large alignments, e.g. 256 for SSE vector values. 4. Constant pool entry offsets are computed when they are created. However, asm printer group them by sections. That means the offsets are no longer valid. However, asm printer uses them to determine size of padding between entries. 5. Asm printer uses expensive data structure multimap to track constant pool entries by sections. 6. Asm printer iterate over SmallPtrSet when it's emitting constant pool entries. This is non-deterministic. Solutions: 1. ConstantPoolSDNode alignment field is changed to keep non-log2 value. 2. MachineConstantPool alignment field is also changed to keep non-log2 value. 3. Functions that create ConstantPool nodes are passing in non-log2 alignments. 4. MachineConstantPoolEntry no longer keeps an offset field. It's replaced with an alignment field. Offsets are not computed when constant pool entries are created. They are computed on the fly in asm printer and JIT. 5. Asm printer uses cheaper data structure to group constant pool entries. 6. Asm printer compute entry offsets after grouping is done. 7. Change JIT code to compute entry offsets on the fly. llvm-svn: 66875
-
Bill Wendling authored
llvm-svn: 66867
-
Bill Wendling authored
llvm-svn: 66866
-
Dan Gohman authored
llvm-svn: 66843
-
- Mar 12, 2009
-
-
Chris Lattner authored
related transformations out of target-specific dag combine into the ARM backend. These were added by Evan in r37685 with no testcases and only seems to help ARM (e.g. test/CodeGen/ARM/select_xform.ll). Add some simple X86-specific (for now) DAG combines that turn things like cond ? 8 : 0 -> (zext(cond) << 3). This happens frequently with the recently added cp constant select optimization, but is a very general xform. For example, we now compile the second example in const-select.ll to: _test: movsd LCPI2_0, %xmm0 ucomisd 8(%esp), %xmm0 seta %al movzbl %al, %eax movl 4(%esp), %ecx movsbl (%ecx,%eax,4), %eax ret instead of: _test: movl 4(%esp), %eax leal 4(%eax), %ecx movsd LCPI2_0, %xmm0 ucomisd 8(%esp), %xmm0 cmovbe %eax, %ecx movsbl (%ecx), %eax ret This passes multisource and dejagnu. llvm-svn: 66779
-
Evan Cheng authored
Enable Chris' value propagation change. It make available known sign, zero, one bits information for values that are live out of basic blocks. The goal is to eliminate unnecessary sext, zext, truncate of values that are live-in to blocks. This does not handle PHI nodes yet. llvm-svn: 66777
-
- Mar 11, 2009
-
-
Chris Lattner authored
alignment of the generated constant pool entry to the desired alignment of a type. If we don't do this, we end up trying to do movsd from 4-byte alignment memory. This fixes 450.soplex and 456.hmmer. llvm-svn: 66641
-
- Mar 10, 2009
-
-
Evan Cheng authored
llvm-svn: 66574
-