Skip to content
  1. Dec 19, 2012
  2. Dec 18, 2012
    • Jakob Stoklund Olesen's avatar
      Verify bundle flags for consistency in MachineVerifier. · 29c27719
      Jakob Stoklund Olesen authored
      The new bidirectional bundle flags are redundant, so inadvertent bundle
      tearing can be detected in the machine code verifier.
      
      llvm-svn: 170463
      29c27719
    • Jakob Stoklund Olesen's avatar
      Don't allow the automatically updated MI flags to be set directly. · a33f504b
      Jakob Stoklund Olesen authored
      The bundle-related MI flags need to be kept in sync with the neighboring
      instructions. Don't allow the bulk flag-setting setFlags() function to
      change them.
      
      Also don't copy MI flags when cloning an instruction. The clone's bundle
      flags will be set when it is explicitly inserted into a bundle.
      
      llvm-svn: 170459
      a33f504b
    • Jakob Stoklund Olesen's avatar
      Tighten up the splice() API for bundled instructions. · 78eaf05f
      Jakob Stoklund Olesen authored
      Remove the instr_iterator versions of the splice() functions. It doesn't
      seem useful to be able to splice sequences of instructions that don't
      consist of full bundles.
      
      The normal splice functions that take MBB::iterator arguments are not
      changed, and they can move whole bundles around without any problems.
      
      llvm-svn: 170456
      78eaf05f
    • Andrew Trick's avatar
      MISched: add dependence to ExitSU to model live-out latency. · ec256481
      Andrew Trick authored
      llvm-svn: 170454
      ec256481
    • Andrew Trick's avatar
      MISched: Cleanup, redundant statement. · ef235698
      Andrew Trick authored
      llvm-svn: 170453
      ef235698
    • Andrew Trick's avatar
    • Andrew Trick's avatar
    • Andrew Trick's avatar
      MISched: cleanup, use the proper iterator type. · 493b867b
      Andrew Trick authored
      llvm-svn: 170450
      493b867b
    • Andrew Trick's avatar
    • Jakob Stoklund Olesen's avatar
      Tighten the insert() API for bundled instructions. · 422e07b0
      Jakob Stoklund Olesen authored
      The normal insert() function takes an MBB::iterator position, and
      inserts a stand-alone MachineInstr as before.
      
      The insert() function that takes an MBB::instr_iterator position can
      insert instructions inside a bundle, and will now update the bundle
      flags correctly when that happens.
      
      When the insert position is between two bundles, it is unclear whether
      the instruction should be appended to the previous bundle, prepended to
      the next bundle, or stand on its own. The MBB::insert() function doesn't
      bundle the instruction in that case, use the MIBundleBuilder class for
      that.
      
      llvm-svn: 170437
      422e07b0
    • Hal Finkel's avatar
      Check multiple register classes for inline asm tied registers · 943f76d1
      Hal Finkel authored
      A register can be associated with several distinct register classes.
      For example, on PPC, the floating point registers are each associated with
      both F4RC (which holds f32) and F8RC (which holds f64). As a result, this code
      would fail when provided with a floating point register and an f64 operand
      because it would happen to find the register in the F4RC class first and
      return that. From the F4RC class, SDAG would extract f32 as the register
      type and then assert because of the invalid implied conversion between
      the f64 value and the f32 register.
      
      Instead, search all register classes. If a register class containing the
      the requested register has the requested type, then return that register
      class. Otherwise, as before, return the first register class found that
      contains the requested register.
      
      llvm-svn: 170436
      943f76d1
    • Jakob Stoklund Olesen's avatar
      Tighten up the erase/remove API for bundled instructions. · ccfb5fb4
      Jakob Stoklund Olesen authored
      Most code is oblivious to bundles and uses the MBB::iterator which only
      visits whole bundles. MBB::erase() operates on whole bundles at a time
      as before.
      
      MBB::remove() now refuses to remove bundled instructions. It is not safe
      to remove all instructions in a bundle without deleting them since there
      is no way of returning pointers to all the removed instructions.
      
      MBB::remove_instr() and MBB::erase_instr() will now update bundle flags
      correctly, lifting individual instructions out of bundles while leaving
      the remaining bundle intact.
      
      The MachineInstr convenience functions are updated so
      
        eraseFromParent() erases a whole bundle as before
        eraseFromBundle() erases a single instruction, leaving the rest of its bundle.
        removeFromParent() refuses to operate on bundled instructions, and
        removeFromBundle() lifts a single instruction out of its bundle.
      
      These functions will no longer accidentally split or coalesce bundles -
      bundle flags are updated to preserve the existing bundling, and explicit
      bundleWith* / unbundleFrom* functions should be used to change the
      instruction bundling.
      
      This API update is still a work in progress. I am going to update APIs
      first so they maintain bundle flags automatically when possible. Then
      I'll add stricter verification of the bundle flags.
      
      llvm-svn: 170384
      ccfb5fb4
  3. Dec 17, 2012
  4. Dec 16, 2012
    • Dmitri Gribenko's avatar
      Declare class DwarfDebug before use instead of relying on a forward declaration · 2943ce80
      Dmitri Gribenko authored
      from some other unrelated header.
      
      Patch by Kai.
      
      llvm-svn: 170284
      2943ce80
    • Reed Kotler's avatar
      This patch is needed to make c++ exceptions work for mips16. · aee4d5d1
      Reed Kotler authored
      Mips16 is really a processor decoding mode (ala thumb 1) and in the same
      program, mips16 and mips32 functions can exist and can call each other.
      
      If a jal type instruction encounters an address with the lower bit set, then
      the processor switches to mips16 mode (if it is not already in it). If the
      lower bit is not set, then it switches to mips32 mode.
      
      The linker knows which functions are mips16 and which are mips32.
      When relocation is performed on code labels, this lower order bit is
      set if the code label is a mips16 code label.
      
      In general this works just fine, however when creating exception handling
      tables and dwarf, there are cases where you don't want this lower order
      bit added in.
      
      This has been traditionally distinguished in gas assembly source by using a
      different syntax for the label.
      
      lab1:      ; this will cause the lower order bit to be added
      lab2=.     ; this will not cause the lower order bit to be added
      
      In some cases, it does not matter because in dwarf and debug tables
      the difference of two labels is used and in that case the lower order
      bits subtract each other out.
      
      To fix this, I have added to mcstreamer the notion of a debuglabel.
      The default is for label and debug label to be the same. So calling
      EmitLabel and EmitDebugLabel produce the same result.
      
      For various reasons, there is only one set of labels that needs to be
      modified for the mips exceptions to work. These are the "$eh_func_beginXXX" 
      labels.
      
      Mips overrides the debug label suffix from ":" to "=." .
      
      This initial patch fixes exceptions. More changes most likely
      will be needed to DwarfCFException to make all of this work
      for actual debugging. These changes will be to emit debug labels in some
      places where a simple label is emitted now.
      
      Some historical discussion on this from gcc can be found at:
      http://gcc.gnu.org/ml/gcc-patches/2008-08/msg00623.html
      http://gcc.gnu.org/ml/gcc-patches/2008-11/msg01273.html 
      
      llvm-svn: 170279
      aee4d5d1
  5. Dec 15, 2012
  6. Dec 14, 2012
Loading