| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 97818
|
| |
|
|
|
|
| |
itself passed as a pointer, then it's obviously not safe to do a tail call.
llvm-svn: 97797
|
| |
|
|
|
|
| |
fully understand.
llvm-svn: 97782
|
| |
|
|
|
|
| |
clobber registers in a different order.
llvm-svn: 97741
|
| |
|
|
| |
llvm-svn: 97536
|
| |
|
|
|
|
| |
by constants into leas + shl regardless if optimizing for code size. The size saving from using imulq isn't worth it. Also, the lea and shl instructions may expose further optimization.
llvm-svn: 97507
|
| |
|
|
| |
llvm-svn: 97310
|
| |
|
|
|
|
| |
just discarding one of the registers.
llvm-svn: 97100
|
| |
|
|
|
|
| |
the hopes of fixing PPC bootstrap.
llvm-svn: 97040
|
| |
|
|
|
|
|
|
|
|
|
| |
necessary to swap the operands to handle NaN and negative zero properly.
Also, reintroduce logic for checking for NaN conditions when forming
SSE min and max instructions, fixed to take into consideration NaNs and
negative zeros. This allows forming min and max instructions in more
cases.
llvm-svn: 97025
|
| |
|
|
| |
llvm-svn: 97011
|
| |
|
|
|
|
| |
signed value.
llvm-svn: 96990
|
| |
|
|
|
|
|
| |
don't alis it in the MMX .td file with a different width,
split into two X86ISD opcodes. This fixes an x86 testcase.
llvm-svn: 96859
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
during a tail call. A parameter might overwrite this stack slot during the tail
call.
The sequence during a tail call is:
1.) load return address to temp reg
2.) move parameters (might involve storing to return address stack slot)
3.) store return address to new location from temp reg
If the stack location is marked immutable CodeGen can colocate load (1) with the
store (3).
This fixes bug 6225.
llvm-svn: 96783
|
| |
|
|
|
|
|
|
|
|
| |
SSE min and max instructions. The real thing this code needs to be
concerned about is negative zero.
Update the sse-minmax.ll test accordingly, and add tests for
-enable-unsafe-fp-math mode as well.
llvm-svn: 96775
|
| |
|
|
|
|
|
|
| |
create an X86ISD::Cmp node with result type i64 on the
CodeGen/X86/shift-i256.ll testcase and the new isel was assert on it
downstream.
llvm-svn: 96768
|
| |
|
|
|
|
|
|
|
| |
for ages (we emitted a reference to a stub, but no stub was emitted). The code inside x86-32/macho target objfile lowering should actually be the generic one - move it there.
This (I really, really hope) should fix EH issues on ppc/darwin
and arm/darwin.
llvm-svn: 96755
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dragonegg self-host build. I reverted 96640 in order to revert
96556 (96640 goes on top of 96556), but it also looks like with
both of them applied the breakage happens even earlier. The
symptom of the 96556 miscompile is the following crash:
llvm[3]: Compiling AlphaISelLowering.cpp for Release build
cc1plus: /home/duncan/tmp/tmp/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:4982: void llvm::SelectionDAG::ReplaceAllUsesWith(llvm::SDNode*, llvm::SDNode*, llvm::SelectionDAG::DAGUpdateListener*): Assertion `(!From->hasAnyUseOfValue(i) || From->getValueType(i) == To->getValueType(i)) && "Cannot use this version of ReplaceAllUsesWith!"' failed.
Stack dump:
0. Running pass 'X86 DAG->DAG Instruction Selection' on function '@_ZN4llvm19AlphaTargetLowering14LowerOperationENS_7SDValueERNS_12SelectionDAGE'
g++: Internal error: Aborted (program cc1plus)
This occurs when building LLVM using LLVM built by LLVM (via
dragonegg). Probably LLVM has miscompiled itself, though it
may have miscompiled GCC and/or dragonegg itself: at this point
of the self-host build, all of GCC, LLVM and dragonegg were built
using LLVM. Unfortunately this kind of thing is extremely hard
to debug, and while I did rummage around a bit I didn't find any
smoking guns, aka obviously miscompiled code.
Found by bisection.
r96556 | evancheng | 2010-02-18 03:13:50 +0100 (Thu, 18 Feb 2010) | 5 lines
Some dag combiner goodness:
Transform br (xor (x, y)) -> br (x != y)
Transform br (xor (xor (x,y), 1)) -> br (x == y)
Also normalize (and (X, 1) == / != 1 -> (and (X, 1)) != / == 0 to match to "test on x86" and "tst on arm"
r96640 | evancheng | 2010-02-19 01:34:39 +0100 (Fri, 19 Feb 2010) | 16 lines
Transform (xor (setcc), (setcc)) == / != 1 to
(xor (setcc), (setcc)) != / == 1.
e.g. On x86_64
%0 = icmp eq i32 %x, 0
%1 = icmp eq i32 %y, 0
%2 = xor i1 %1, %0
br i1 %2, label %bb, label %return
=>
testl %edi, %edi
sete %al
testl %esi, %esi
sete %cl
cmpb %al, %cl
je LBB1_2
llvm-svn: 96672
|
| |
|
|
|
|
|
|
| |
Transform br (xor (x, y)) -> br (x != y)
Transform br (xor (xor (x,y), 1)) -> br (x == y)
Also normalize (and (X, 1) == / != 1 -> (and (X, 1)) != / == 0 to match to "test on x86" and "tst on arm"
llvm-svn: 96556
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
If there exists a use of a build_vector that's the bitwise complement of the mask,
then transform the node to
(and (xor x, (build_vector -1,-1,-1,-1)), (build_vector ~c1,~c2,~c3,~c4)).
Since this transformation is only useful when 1) the given build_vector will
become a load from constpool, and 2) (and (xor x -1), y) matches to a single
instruction, I decided this is appropriate as a x86 specific transformation.
rdar://7323335
llvm-svn: 96389
|
| |
|
|
|
|
| |
Personality / FDE / LSDA / TType encoding depending on target / options (e.g. code model / relocation model) - MCIzation of Dwarf EH printer to use encoding information - Stub generation for ELF target (needed for indirect references) - Some other small changes here and there
llvm-svn: 96285
|
| |
|
|
|
|
| |
change to SelectionDAG build APIs.
llvm-svn: 96228
|
| |
|
|
|
|
| |
isInteger, we now have isFloatTy and isIntegerTy. Requested by Chris!
llvm-svn: 96223
|
| |
|
|
|
|
| |
This should fix alot of problems we saw so far, e.g. PRs 5851 & 2936
llvm-svn: 95980
|
| |
|
|
|
|
|
| |
use a multipattern that generates both the 1-byte and 4-byte
versions from the same defm
llvm-svn: 95901
|
| |
|
|
|
|
|
|
|
|
|
| |
on custom
lowering and requires that certain types exist in ValueTypes.h. Modified widening to
check if an op can trap and if so, the widening algorithm will apply only the op on
the defined elements. It is safer to do this in widening because the optimizer can't
guarantee removing unused ops in some cases.
llvm-svn: 95823
|
| |
|
|
| |
llvm-svn: 95781
|
| |
|
|
| |
llvm-svn: 95593
|
| |
|
|
|
|
| |
its current purpose.
llvm-svn: 95564
|
| |
|
|
|
|
| |
unnecessary stack adjustments.
llvm-svn: 95475
|
| |
|
|
| |
llvm-svn: 95408
|
| |
|
|
|
|
| |
TSFlags directly instead of a TargetInstrDesc.
llvm-svn: 95405
|
| |
|
|
| |
llvm-svn: 95351
|
| |
|
|
| |
llvm-svn: 95295
|
| |
|
|
|
|
|
|
| |
after callee register pops. X86 isel lowering is using EAX / R11 and it was somehow adding that to function live out. That prevented the real function return register from being added to the function live out list and bad things happen.
This fixes 483.xalancbmk (with tail call opt).
llvm-svn: 95280
|
| |
|
|
|
|
| |
down a self-hosting issue.
llvm-svn: 95259
|
| |
|
|
|
|
| |
if the callee is a result of bitcast to avoid losing necessary zext / sext etc.
llvm-svn: 95195
|
| |
|
|
|
|
| |
of the type which is just a pointer. This is not known to break stuff but is wrong nevertheless.
llvm-svn: 95163
|
| |
|
|
| |
llvm-svn: 95160
|
| |
|
|
|
|
| |
sibcall eligibility.
llvm-svn: 95130
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
where callee's arguments are already in the caller's own caller's stack and
they line up perfectly. e.g.
extern int foo(int a, int b, int c);
int bar(int a, int b, int c) {
return foo(a, b, c);
}
llvm-svn: 95053
|
| |
|
|
| |
llvm-svn: 95017
|
| |
|
|
| |
llvm-svn: 94970
|
| |
|
|
| |
llvm-svn: 94949
|
| |
|
|
| |
llvm-svn: 94946
|
| |
|
|
|
|
| |
registers.
llvm-svn: 94873
|
| |
|
|
| |
llvm-svn: 94804
|
| |
|
|
|
|
|
|
| |
type is different from its inputs.
This fixes PR6146.
llvm-svn: 94731
|
| |
|
|
|
|
|
|
|
| |
even when -tailcallopt is not specified and it does not require changing ABI.
First case is the most trivial one. Perform tail call optimization when both
the caller and callee do not return values and when the callee does not take
any input arguments.
llvm-svn: 94664
|
| |
|
|
|
|
|
|
|
| |
Target independent isel should always pass along the "tail call" property. Change
target hook LowerCall's parameter "isTailCall" into a refernce. If the target
decides it's impossible to honor the tail call request, it should set isTailCall
to false to make target independent isel happy.
llvm-svn: 94626
|