Skip to content
  1. Mar 14, 2008
  2. Mar 13, 2008
  3. Mar 12, 2008
    • Evan Cheng's avatar
      Experimental scheduler change to schedule / coalesce the copies added for... · 65e9d5f1
      Evan Cheng authored
      Experimental scheduler change to schedule / coalesce the copies added for function livein's. Take 2008-03-10-RegAllocInfLoop.ll, the schedule looks like this after these copies are inserted:
      
      entry: 0x12049d0, LLVM BB @0x1201fd0, ID#0:
      Live Ins: %EAX %EDX %ECX
              %reg1031<def> = MOVPC32r 0
              %reg1032<def> = ADD32ri %reg1031, <es:_GLOBAL_OFFSET_TABLE_>, %EFLAGS<imp-def>
              %reg1028<def> = MOV32rr %EAX
              %reg1029<def> = MOV32rr %EDX
              %reg1030<def> = MOV32rr %ECX
              %reg1027<def> = MOV8rm %reg0, 1, %reg0, 0, Mem:LD(1,1) [0x1201910 + 0]
              %reg1025<def> = MOV32rr %reg1029
              %reg1026<def> = MOV32rr %reg1030
              %reg1024<def> = MOV32rr %reg1028
      
      The copies unnecessarily increase register pressure and it will end up requiring a physical register to be spilled.
      
      With -schedule-livein-copies:
      entry: 0x12049d0, LLVM BB @0x1201fa0, ID#0:
      Live Ins: %EAX %EDX %ECX
              %reg1031<def> = MOVPC32r 0
              %reg1032<def> = ADD32ri %reg1031, <es:_GLOBAL_OFFSET_TABLE_>, %EFLAGS<imp-def>
              %reg1024<def> = MOV32rr %EAX
              %reg1025<def> = MOV32rr %EDX
              %reg1026<def> = MOV32rr %ECX
              %reg1027<def> = MOV8rm %reg0, 1, %reg0, 0, Mem:LD(1,1) [0x12018e0 + 0]
      
      Much better!
      
      llvm-svn: 48307
      65e9d5f1
    • Ted Kremenek's avatar
      Changed CallRetValSymbol to SymbolConjured to allow "conjured" symbols to be... · e2f6d6cd
      Ted Kremenek authored
      Changed CallRetValSymbol to SymbolConjured to allow "conjured" symbols to be created for any expression, not just CallExprs.
      Added experimental support for conjuring symbols during assingments where the RHS is "unknown".  This allows more value tracking for path-sensitivity.
      Fixed bug in "assumption" logic when processing symbolic constraints; we would improperly mark constraints we didn't support as infeasible.
      
      llvm-svn: 48306
      e2f6d6cd
    • Duncan Sands's avatar
      Initial soft-float support for LegalizeTypes. I rewrote · 723849a1
      Duncan Sands authored
      the fcopysign expansion from LegalizeDAG to get rid of
      what seems to be a bug: the use of sign extension means
      that when copying the sign bit from an f32 to an f64,
      the upper 32 bits of the f64 (now an i64) are set, not
      just the top bit...  I also generalized it to work for
      any sized floating point types, and removed the bogosity:
        SDOperand Mask1 = (SrcVT == MVT::f64)
          ? DAG.getConstantFP(BitsToDouble(1ULL << 63), SrcVT)
          : DAG.getConstantFP(BitsToFloat(1U << 31), SrcVT);
        Mask1 = DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Mask1);
      (here SrcNVT is an integer with the same size as SrcVT).
      As far as I can see this takes a 1 << 63, converts to
      a double, converts that to a floating point constant
      then converts that to an integer constant, ending up
      with... 1 << 63 as an integer constant!  So I just
      generate this integer constant directly.
      
      llvm-svn: 48305
      723849a1
Loading