Skip to content
  1. Mar 12, 2010
  2. Mar 11, 2010
  3. Mar 10, 2010
  4. Mar 06, 2010
  5. Mar 05, 2010
  6. Mar 04, 2010
  7. Mar 02, 2010
  8. Mar 01, 2010
  9. Feb 27, 2010
  10. Feb 25, 2010
  11. Feb 24, 2010
  12. Feb 23, 2010
  13. Feb 22, 2010
  14. Feb 21, 2010
  15. Feb 19, 2010
    • Duncan Sands's avatar
      Revert commits 96556 and 96640, because commit 96556 breaks the · d0bf6f64
      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
      d0bf6f64
  16. Feb 18, 2010
    • Evan Cheng's avatar
      Some dag combiner goodness: · 0ceb68a5
      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
      0ceb68a5
  17. Feb 16, 2010
    • Evan Cheng's avatar
      Look for SSE and instructions of this form: (and x, (build_vector c1,c2,c3,c4)). · 82b04130
      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
      82b04130
  18. Feb 15, 2010
  19. Feb 12, 2010
  20. Feb 11, 2010
  21. Feb 10, 2010
  22. Feb 08, 2010
  23. Feb 06, 2010
  24. Feb 05, 2010
Loading