- Feb 19, 2010
-
-
Duncan Sands authored
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
-
- Feb 18, 2010
-
-
Evan Cheng authored
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
-
- Feb 16, 2010
-
-
Evan Cheng authored
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
-
- Feb 15, 2010
-
-
Anton Korobeynikov authored
Preliminary patch to improve dwarf EH generation - Hooks to return 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
-
David Greene authored
Remove an assumption of default arguments. This is in anticipation of a change to SelectionDAG build APIs. llvm-svn: 96228
-
Duncan Sands authored
isInteger, we now have isFloatTy and isIntegerTy. Requested by Chris! llvm-svn: 96223
-
- Feb 12, 2010
-
-
Anton Korobeynikov authored
This should fix alot of problems we saw so far, e.g. PRs 5851 & 2936 llvm-svn: 95980
-
- Feb 11, 2010
-
-
Chris Lattner authored
use a multipattern that generates both the 1-byte and 4-byte versions from the same defm llvm-svn: 95901
-
Mon P Wang authored
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
-
- Feb 10, 2010
-
-
Dan Gohman authored
llvm-svn: 95781
-
- Feb 08, 2010
-
-
Chris Lattner authored
llvm-svn: 95593
-
Dan Gohman authored
its current purpose. llvm-svn: 95564
-
- Feb 06, 2010
-
-
Evan Cheng authored
Do not emit callseq instructions around sibcalls. This eliminated some unnecessary stack adjustments. llvm-svn: 95475
-
- Feb 05, 2010
-
-
Chris Lattner authored
llvm-svn: 95408
-
Chris Lattner authored
TSFlags directly instead of a TargetInstrDesc. llvm-svn: 95405
-
Evan Cheng authored
llvm-svn: 95351
-
- Feb 04, 2010
-
-
Evan Cheng authored
llvm-svn: 95295
-
Evan Cheng authored
Indirect tail call has to go through a call preserved register since it's 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
-
- Feb 03, 2010
-
-
Evan Cheng authored
Speculatively disable x86 automatic tail call optimization while we track down a self-hosting issue. llvm-svn: 95259
-
Evan Cheng authored
Allow all types of callee's to be tail called. But avoid automatic tailcall if the callee is a result of bitcast to avoid losing necessary zext / sext etc. llvm-svn: 95195
-
Evan Cheng authored
ByVal frame object size should be that of the byval argument, not the size of the type which is just a pointer. This is not known to break stuff but is wrong nevertheless. llvm-svn: 95163
-
Evan Cheng authored
llvm-svn: 95160
-
- Feb 02, 2010
-
-
Evan Cheng authored
llvm-svn: 95130
-
Evan Cheng authored
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
-
- Feb 01, 2010
-
-
Evan Cheng authored
llvm-svn: 95017
-
Evan Cheng authored
llvm-svn: 94970
-
- Jan 31, 2010
-
-
Evan Cheng authored
llvm-svn: 94949
-
Evan Cheng authored
llvm-svn: 94946
-
- Jan 30, 2010
-
-
Evan Cheng authored
llvm-svn: 94873
-
- Jan 29, 2010
-
-
Evan Cheng authored
llvm-svn: 94804
-
- Jan 28, 2010
-
-
Evan Cheng authored
Fix a bug introduced by r94490 where it created a X86ISD::CMP whose output type is different from its inputs. This fixes PR6146. llvm-svn: 94731
-
- Jan 27, 2010
-
-
Evan Cheng authored
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
-
Evan Cheng authored
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
-
Evan Cheng authored
llvm-svn: 94610
-
- Jan 26, 2010
-
-
Evan Cheng authored
llvm-svn: 94583
-
Evan Cheng authored
llvm-svn: 94570
-
Chris Lattner authored
which is more convenient, and change getPICJumpTableRelocBaseExpr to take a MachineFunction to match. Next, move the X86 code that create a PICBase symbol to X86TargetLowering::getPICBaseSymbol from X86MCInstLower::GetPICBaseSymbol, which was an asmprinter specific library. This eliminates a 'gross hack', and allows us to implement X86ISelLowering::getPICJumpTableRelocBaseExpr which now calls it. This in turn allows us to eliminate the X86AsmPrinter::printPICJumpTableSetLabel method, which was the only overload of printPICJumpTableSetLabel. llvm-svn: 94526
-
Chris Lattner authored
jump table entry kind, instead of overloading AsmPrinter::printPICJumpTableEntry. This has a pretty horrible and inefficient FIXME around how @GOTOFF is currently smashed into the mcsymbol name, but otherwise this is much cleaner. llvm-svn: 94516
-
Evan Cheng authored
llvm-svn: 94490
-
Chris Lattner authored
entries with @GOTOFF whih is EK_GPRel32BlockAddress. llvm-svn: 94474
-