Skip to content
  1. May 19, 2013
  2. May 17, 2013
  3. May 13, 2013
    • Rafael Espindola's avatar
      Remove the MachineMove class. · 227144c2
      Rafael Espindola authored
      It was just a less powerful and more confusing version of
      MCCFIInstruction. A side effect is that, since MCCFIInstruction uses
      dwarf register numbers, calls to getDwarfRegNum are pushed out, which
      should allow further simplifications.
      
      I left the MachineModuleInfo::addFrameMove interface unchanged since
      this patch was already fairly big.
      
      llvm-svn: 181680
      227144c2
  4. May 10, 2013
  5. Apr 21, 2013
  6. Apr 20, 2013
  7. Apr 16, 2013
  8. Apr 14, 2013
  9. Apr 13, 2013
  10. Apr 09, 2013
  11. Apr 07, 2013
    • Jakob Stoklund Olesen's avatar
      Implement LowerCall_64 for the SPARC v9 64-bit ABI. · a30f4832
      Jakob Stoklund Olesen authored
      There is still no support for byval arguments (which I don't think are
      needed) and varargs.
      
      llvm-svn: 178993
      a30f4832
    • Jakob Stoklund Olesen's avatar
      Implement LowerReturn_64 for SPARC v9. · edaf66b0
      Jakob Stoklund Olesen authored
      Integer return values are sign or zero extended by the callee, and
      structs up to 32 bytes in size can be returned in registers.
      
      The CC_Sparc64 CallingConv definition is shared between
      LowerFormalArguments_64 and LowerReturn_64. Function arguments and
      return values are passed in the same registers.
      
      The inreg flag is also used for return values. This is required to handle
      C functions returning structs containing floats and ints:
      
        struct ifp {
          int i;
          float f;
        };
      
        struct ifp f(void);
      
      LLVM IR:
      
        define inreg { i32, float } @f() {
           ...
           ret { i32, float } %retval
        }
      
      The ABI requires that %retval.i is returned in the high bits of %i0
      while %retval.f goes in %f1.
      
      Without the inreg return value attribute, %retval.i would go in %i0 and
      %retval.f would go in %f3 which is a more efficient way of returning
      %multiple values, but it is not ABI compliant for returning C structs.
      
      llvm-svn: 178966
      edaf66b0
  12. Apr 06, 2013
    • Jakob Stoklund Olesen's avatar
      SPARC v9 stack pointer bias. · 03d9f7fd
      Jakob Stoklund Olesen authored
      64-bit SPARC v9 processes use biased stack and frame pointers, so the
      current function's stack frame is located at %sp+BIAS .. %fp+BIAS where
      BIAS = 2047.
      
      This makes more local variables directly accessible via [%fp+simm13]
      addressing.
      
      llvm-svn: 178965
      03d9f7fd
    • Jakob Stoklund Olesen's avatar
      Complete formal arguments for the SPARC v9 64-bit ABI. · 1c9a95ab
      Jakob Stoklund Olesen authored
      All arguments are formally assigned to stack positions and then promoted
      to floating point and integer registers. Since there are more floating
      point registers than integer registers, this can cause situations where
      floating point arguments are assigned to registers after integer
      arguments that where assigned to the stack.
      
      Use the inreg flag to indicate 32-bit fragments of structs containing
      both float and int members.
      
      The three-way shadowing between stack, integer, and floating point
      registers requires custom argument lowering. The good news is that
      return values are passed in the exact same way, and we can share the
      code.
      
      Still missing:
      
       - Update LowerReturn to handle structs returned in registers.
       - LowerCall.
       - Variadic functions.
      
      llvm-svn: 178958
      1c9a95ab
  13. Apr 04, 2013
  14. Apr 03, 2013
    • Jakob Stoklund Olesen's avatar
      Add 64-bit compare + branch for SPARC v9. · d9bbdfd3
      Jakob Stoklund Olesen authored
      The same compare instruction is used for 32-bit and 64-bit compares. It
      sets two different sets of flags: icc and xcc.
      
      This patch adds a conditional branch instruction using the xcc flags for
      64-bit compares.
      
      llvm-svn: 178621
      d9bbdfd3
  15. Apr 02, 2013
    • Jakob Stoklund Olesen's avatar
      Add 64-bit load and store instructions. · 8eabc3ff
      Jakob Stoklund Olesen authored
      There is only a few new instructions, the rest is handled with patterns.
      
      llvm-svn: 178528
      8eabc3ff
    • Jakob Stoklund Olesen's avatar
      Basic 64-bit ALU operations. · 917e07f0
      Jakob Stoklund Olesen authored
      SPARC v9 extends all ALU instructions to 64 bits, so we simply need to
      add patterns to use them for both i32 and i64 values.
      
      llvm-svn: 178527
      917e07f0
    • Jakob Stoklund Olesen's avatar
      Materialize 64-bit immediates. · bddb20ee
      Jakob Stoklund Olesen authored
      The last resort pattern produces 6 instructions, and there are still
      opportunities for materializing some immediates in fewer instructions.
      
      llvm-svn: 178526
      bddb20ee
    • Jakob Stoklund Olesen's avatar
      Add 64-bit shift instructions. · c1d1a481
      Jakob Stoklund Olesen authored
      SPARC v9 defines new 64-bit shift instructions. The 32-bit shift right
      instructions are still usable as zero and sign extensions.
      
      This adds new F3_Sr and F3_Si instruction formats that probably should
      be used for the 32-bit shifts as well. They don't really encode an
      simm13 field.
      
      llvm-svn: 178525
      c1d1a481
    • Jakob Stoklund Olesen's avatar
      Add predicates for distinguishing 32-bit and 64-bit modes. · 739d722e
      Jakob Stoklund Olesen authored
      The 'sparc' architecture produces 32-bit code while 'sparcv9' produces
      64-bit code.
      
      It is also possible to run 32-bit code using SPARC v9 instructions with:
      
        llc -march=sparc -mattr=+v9
      
      llvm-svn: 178524
      739d722e
    • Jakob Stoklund Olesen's avatar
      Add support for 64-bit calling convention. · 0b21f35a
      Jakob Stoklund Olesen authored
      This is far from complete, but it is enough to make it possible to write
      test cases using i64 arguments.
      
      Missing features:
      - Floating point arguments.
      - Receiving arguments on the stack.
      - Calls.
      
      llvm-svn: 178523
      0b21f35a
    • Jakob Stoklund Olesen's avatar
      Add an I64Regs register class for 64-bit registers. · 5ad3b353
      Jakob Stoklund Olesen authored
      We are going to use the same registers for 32-bit and 64-bit values, but
      in two different register classes. The I64Regs register class has a
      larger spill size and alignment.
      
      The addition of an i64 register class confuses TableGen's type
      inference, so it is necessary to clarify the type of some immediates and
      the G0 register.
      
      In 64-bit mode, pointers are i64 and should use the I64Regs register
      class. Implement getPointerRegClass() to dynamically provide the pointer
      register class depending on the subtarget. Use ptr_rc and iPTR for
      memory operands.
      
      Finally, add the i64 type to the IntRegs register class. This register
      class is not used to hold i64 values, I64Regs is for that. The type is
      required to appease TableGen's type checking in output patterns like this:
      
        def : Pat<(add i64:$a, i64:$b), (ADDrr $a, $b)>;
      
      SPARC v9 uses the same ADDrr instruction for i32 and i64 additions, and
      TableGen doesn't know to check the type of register sub-classes.
      
      llvm-svn: 178522
      5ad3b353
  16. Mar 24, 2013
  17. Mar 23, 2013
  18. Mar 14, 2013
    • Hal Finkel's avatar
      Provide the register scavenger to processFunctionBeforeFrameFinalized · 5a765fdd
      Hal Finkel authored
      Add the current PEI register scavenger as a parameter to the
      processFunctionBeforeFrameFinalized callback.
      
      This change is necessary in order to allow the PowerPC target code to
      set the register scavenger frame index after the save-area offset
      adjustments performed by processFunctionBeforeFrameFinalized. Only
      after these adjustments have been made is it possible to estimate
      the size of the stack frame.
      
      llvm-svn: 177108
      5a765fdd
  19. Mar 07, 2013
Loading