Skip to content
  1. Jul 10, 2003
    • Vikram S. Adve's avatar
      Several important bug fixes: · 4f420ce3
      Vikram S. Adve authored
      (1) Cannot use ANDN(ot), ORN, and XORN for boolean ops, only bitwise ops.
      
      (2) Conditional move instructions must distinguish signed and unsigned
          condition codes, e.g., MOVLE vs. MOVLEU.
      
      (3) Conditional-move-on-register was using the cond-move-on-cc opcodes,
          which produces a valid-looking instruction with bogus registers!
      
      (4) Here's a really cute one: dividing-by-2^k for negative numbers needs to
          add 2^k-1 before shifting, not add 1 after shifting.  Sadly, these
          are the same when k=0 so our poor test case worked fine.
      
      (5) Casting between signed and unsigned values was not correct:
          completely reimplemented.
      
      (6) Zero-extension on unsigned values was bogus: I was only doing the
          SRL and not the SLLX before it.  Don't know WHAT I was thinking!
      
      (7) And the most important class of changes: Sign-extensions on signed values.
          Signed values are not sign-extended after ordinary operations,
          so they must be sign-extended before the following cases:
      	-- passing to an external or unknown function
      	-- returning from a function
      	-- using as operand 2 of DIV or REM
      	-- using as either operand of condition-code setting operation
                 (currently only SUBCC), with smaller than 32-bit operands
      
      
      Also, a couple of improvements:
      
      (1) Fold cast-to-bool into Not(bool).  Need to do this for And, Or, XOR also.
      
      (2) Convert SetCC-Const into a conditional-move-on-register (case 41)
          if the constant is 0.  This was only being done for branch-on-SetCC-Const
          when the branch is folded with the SetCC-Const.
      
      llvm-svn: 7159
      4f420ce3
    • Vikram S. Adve's avatar
      Bug fix in creating constants: need 1U << 31, not 1 << 31. · 8ea738a9
      Vikram S. Adve authored
      llvm-svn: 7158
      8ea738a9
    • Vikram S. Adve's avatar
      Fold cast-to-bool into not. Later, this should also be folded into other · 2f90c823
      Vikram S. Adve authored
      boolean operations: AND, OR, XOR.
      
      llvm-svn: 7157
      2f90c823
    • Vikram S. Adve's avatar
      Values stored in CallArgsDescriptor cannot be const. · e2e50f28
      Vikram S. Adve authored
      llvm-svn: 7156
      e2e50f28
    • Vikram S. Adve's avatar
      isMarkedForSpill() should be const. · abf331db
      Vikram S. Adve authored
      llvm-svn: 7155
      abf331db
    • Vikram S. Adve's avatar
      Change interface to MachineInstr::substituteValue to specify more precisely · 689adb19
      Vikram S. Adve authored
      which args can be substituted: defsOnly, defsAndUses or usesOnly.
      
      llvm-svn: 7154
      689adb19
    • Vikram S. Adve's avatar
    • Vikram S. Adve's avatar
      Several fixes to handling of int CC register: · 5224b19d
      Vikram S. Adve authored
      (1) An int CC live range must be spilled if there are any interferences,
          even if no other "neighbour" in the interf. graph has been allocated
          that reg. yet.  This is actually true of any class with only one reg!
      
      (2) SparcIntCCRegClass::colorIGNode sets the color even if the LR must
          be spilled so that the machine-independent spill code doesn't have to
          make the machine-dependent decision of which CC name to use based on
          operand type: %xcc or %icc.  (These are two halves of the same
      register.)
      
      (3) LR->isMarkedForSpill() is no longer the same as LR->hasColor().
          These should never have been the same, and this is necessary now for #2.
      
      (4) All RDCCR and WRCCR instructions are directly generated with the
          phony number for %ccr so that EmitAssembly/EmitBinary doesn't have to
          deal with this.
      
      llvm-svn: 7152
      5224b19d
    • Vikram S. Adve's avatar
      Several fixes to handling of int CC register: · 65280676
      Vikram S. Adve authored
      (1) An int CC live range must be spilled if there are any interferences,
          even if no other "neighbour" in the interf. graph has been allocated
          that reg. yet.  This is actually true of any class with only one reg!
      
      (2) SparcIntCCRegClass::colorIGNode sets the color even if the LR must
          be spilled so that the machine-independent spill code doesn't have to
          make the machine-dependent decision of which CC name to use based on
          operand type: %xcc or %icc.  (These are two halves of the same register.)
      
      (3) LR->isMarkedForSpill() is no longer the same as LR->hasColor().
          These should never have been the same, and this is necessary now for #2.
      
      (4) All RDCCR and WRCCR instructions are directly generated with the
          phony number for %ccr so that EmitAssembly/EmitBinary doesn't have to
          deal with this.
      
      llvm-svn: 7151
      65280676
    • Misha Brukman's avatar
      c18333ac
    • Misha Brukman's avatar
      `Occurrence' has no `a' and the `r' is doubled. · 069e6b5b
      Misha Brukman authored
      llvm-svn: 7140
      069e6b5b
  2. Jul 09, 2003
  3. Jul 08, 2003
  4. Jul 07, 2003
  5. Jul 06, 2003
  6. Jul 03, 2003
  7. Jul 02, 2003
Loading