Skip to content
  1. Aug 29, 2012
  2. Aug 28, 2012
    • Jack Carter's avatar
      The instruction DEXT may be transformed into DEXTU or DEXTM depending · cd6b0e13
      Jack Carter authored
      on the size of the extraction and its position in the 64 bit word.
      
      This patch allows support of the dext transformations with mips64 direct
      object output.
      
      0 <= msb < 32 0 <= lsb < 32 0 <= pos < 32 1 <= size <= 32
      DINS
      The field is entirely contained in the right-most word of the doubleword
      
      32 <= msb < 64 0 <= lsb < 32 0 <= pos < 32 2 <= size <= 64
      DINSM
      The field straddles the words of the doubleword
      
      32 <= msb < 64 32 <= lsb < 64 32 <= pos < 64 1 <= size <= 32
      DINSU
      The field is entirely contained in the left-most word of the doubleword
      
      llvm-svn: 162782
      cd6b0e13
    • Michael Liao's avatar
      Explicitly update the number of nodes to be traversed · 710e1a59
      Michael Liao authored
      llvm-svn: 162780
      710e1a59
    • Jack Carter's avatar
      Some instructions are passed to the assembler to be · c20a21b8
      Jack Carter authored
      transformed to the final instruction variant. An
      example would be dsrll which is transformed into 
      dsll32 if the shift value is greater than 32.
      
      For direct object output we need to do this transformation
      in the codegen. If the instruction was inside branch
      delay slot, it was being missed. This patch corrects this
      oversight.
      
      llvm-svn: 162779
      c20a21b8
    • Roman Divacky's avatar
      Emit word of zeroes after the last instruction as a start of the mandatory · 8c4b6a30
      Roman Divacky authored
      traceback table on PowerPC64. This helps gdb handle exceptions. The other
      mandatory fields are ignored by gdb and harder to implement so just add
      there a FIXME.
      
      Patch by Bill Schmidt. PR13641.
      
      llvm-svn: 162778
      8c4b6a30
    • Akira Hatanaka's avatar
      Follow-up patch to r162731. · 206cefe6
      Akira Hatanaka authored
      Fix a couple of bugs in mips' long branch pass.
      This patch was supposed to be committed along with r162731, so I don't have a
      new test case.
      
      llvm-svn: 162777
      206cefe6
    • Jakob Stoklund Olesen's avatar
      Add a MachineOperand::isTied() flag. · e56c60c5
      Jakob Stoklund Olesen authored
      While in SSA form, a MachineInstr can have pairs of tied defs and uses.
      The tied operands are used to represent read-modify-write operands that
      must be assigned the same physical register.
      
      Previously, tied operand pairs were computed from fixed MCInstrDesc
      fields, or by using black magic on inline assembly instructions.
      
      The isTied flag makes it possible to add tied operands to any
      instruction while getting rid of (some of) the inlineasm magic.
      
      Tied operands on normal instructions are needed to represent predicated
      individual instructions in SSA form. An extra <tied,imp-use> operand is
      required to represent the output value when the instruction predicate is
      false.
      
      Adding a predicate to:
      
        %vreg0<def> = ADD %vreg1, %vreg2
      
      Will look like:
      
        %vreg0<tied,def> = ADD %vreg1, %vreg2, pred:3, %vreg7<tied,imp-use>
      
      The virtual register %vreg7 is the value given to %vreg0 when the
      predicate is false. It will be assigned the same physreg as %vreg0.
      
      This commit adds the isTied flag and sets it based on MCInstrDesc when
      building an instruction. The flag is not used for anything yet.
      
      llvm-svn: 162774
      e56c60c5
    • Jakob Stoklund Olesen's avatar
      Don't allow TargetFlags on MO_Register MachineOperands. · dba99d0d
      Jakob Stoklund Olesen authored
      Register operands are manipulated by a lot of target-independent code,
      and it is not always possible to preserve target flags. That means it is
      not safe to use target flags on register operands.
      
      None of the targets in the tree are using register operand target flags.
      External targets should be using immediate operands to annotate
      instructions with operand modifiers.
      
      llvm-svn: 162770
      dba99d0d
    • Hal Finkel's avatar
      Add PPC Freescale e500mc and e5500 subtargets. · 742b535e
      Hal Finkel authored
      Add subtargets for Freescale e500mc (32-bit) and e5500 (64-bit) to
      the PowerPC backend.
      
      Patch by Tobias von Koch.
      
      llvm-svn: 162764
      742b535e
    • Benjamin Kramer's avatar
      InstCombine: Defensively avoid undefined shifts by limiting the amount to the bit width. · 1e1a1ded
      Benjamin Kramer authored
      No test case, undefined shifts get folded early, but can occur when other
      transforms generate a constant. Thanks to Duncan for bringing this up.
      
      llvm-svn: 162755
      1e1a1ded
    • Benjamin Kramer's avatar
    • Nadav Rotem's avatar
      · d457787f
      Nadav Rotem authored
      Make sure that we don't call getZExtValue on values > 64 bits.
      Thanks Benjamin for noticing this.
      
      llvm-svn: 162749
      d457787f
    • Nadav Rotem's avatar
      · 11935b29
      Nadav Rotem authored
      Teach InstCombine to canonicalize  [SU]div+[AL]shl patterns.
      
      For example:
        %1 = lshr i32 %x, 2
        %2 = udiv i32 %1, 100
      
      rdar://12182093
      
      llvm-svn: 162743
      11935b29
    • Bill Wendling's avatar
      The commutative flag is already correctly set within the multiclass. If we set · cc567180
      Bill Wendling authored
      it here, then a 'register-memory' version would wrongly get the commutative
      flag.
      <rdar://problem/12180135>
      
      llvm-svn: 162741
      cc567180
    • Craig Topper's avatar
      72f51c39
    • Craig Topper's avatar
      Merge AVX_SET0PSY/AVX_SET0PDY/AVX2_SET0 into a single post-RA pseudo. · bd509eea
      Craig Topper authored
      llvm-svn: 162738
      bd509eea
    • Michael Liao's avatar
      Fix PR12312 · b7d85b63
      Michael Liao authored
      - Add a target-specific DAG optimization to recognize a pattern PTEST-able.
        Such a pattern is a OR'd tree with X86ISD::OR as the root node. When
        X86ISD::OR node has only its flag result being used as a boolean value and
        all its leaves are extracted from the same vector, it could be folded into an
        X86ISD::PTEST node.
      
      llvm-svn: 162735
      b7d85b63
    • Jakob Stoklund Olesen's avatar
      Remove extra MayLoad/MayStore flags from atomic_load/store. · 87cb471e
      Jakob Stoklund Olesen authored
      These extra flags are not required to properly order the atomic
      load/store instructions. SelectionDAGBuilder chains atomics as if they
      were volatile, and SelectionDAG::getAtomic() sets the isVolatile bit on
      the memory operands of all atomic operations.
      
      The volatile bit is enough to order atomic loads and stores during and
      after SelectionDAG.
      
      This means we set mayLoad on atomic_load, mayStore on atomic_store, and
      mayLoad+mayStore on the remaining atomic read-modify-write operations.
      
      llvm-svn: 162733
      87cb471e
    • Jakob Stoklund Olesen's avatar
      Revert r162713: "Add ATOMIC_LDR* pseudo-instructions to model atomic_load on ARM." · b3de7b17
      Jakob Stoklund Olesen authored
      This wasn't the right way to enforce ordering of atomics.
      
      We are already setting the isVolatile bit on memory operands of atomic
      operations which is good enough to enforce the correct ordering.
      
      llvm-svn: 162732
      b3de7b17
    • Akira Hatanaka's avatar
      Fix mips' long branch pass. · b5af7121
      Akira Hatanaka authored
      Instructions emitted to compute branch offsets now use immediate operands
      instead of symbolic labels. This change was needed because there were problems
      when R_MIPS_HI16/LO16 relocations were used to make shared objects.
      
      llvm-svn: 162731
      b5af7121
    • Hal Finkel's avatar
      Split several PPC instruction classes. · 679c73cb
      Hal Finkel authored
      Slight reorganisation of PPC instruction classes for scheduling. No
      functionality change for existing subtargets.
       - Clearly separate load/store-with-update instructions from regular loads and stores.
       - Split IntRotateD -> IntRotateD and IntRotateDI
       - Split out fsub and fadd from FPGeneral -> FPAddSub
       - Update existing itineraries
      
      Patch by Tobias von Koch.
      
      llvm-svn: 162729
      679c73cb
    • Akira Hatanaka's avatar
      Fix bug 13532. · adb14f56
      Akira Hatanaka authored
      In SelectionDAGLegalize::ExpandLegalINT_TO_FP, expand INT_TO_FP nodes without
      using any f64 operations if f64 is not a legal type.
      
      Patch by Stefan Kristiansson. 
      
      llvm-svn: 162728
      adb14f56
    • Hal Finkel's avatar
      Allow remat of LI on PPC. · 686f2ee2
      Hal Finkel authored
      Allow load-immediates to be rematerialised in the register coalescer for
      PPC. This makes test/CodeGen/PowerPC/big-endian-formal-args.ll fail,
      because it relies on a register move getting emitted. The immediate load is
      equivalent, so change this test case.
      
      Patch by Tobias von Koch.
      
      llvm-svn: 162727
      686f2ee2
    • Hal Finkel's avatar
      Add the Freescale vendor to Triple. · b5d177e5
      Hal Finkel authored
      Adds the vendor 'fsl' (used by Freescale SDK) to Triple. This will allow
      clang support for Freescale cross-compile configurations.
      
      Patch by Tobias von Koch.
      
      llvm-svn: 162726
      b5d177e5
    • Hal Finkel's avatar
      Eliminate redundant CR moves on PPC32. · 5ab37803
      Hal Finkel authored
      The 32-bit ABI requires CR bit 6 to be set if the call has fp arguments and
      unset if it doesn't. The solution up to now was to insert a MachineNode to
      set/unset the CR bit, which produces a CR vreg. This vreg was then copied
      into CR bit 6. When the register allocator saw a bunch of these in the same
      function, it allocated the set/unset CR bit in some random CR register (1
      extra instruction) and then emitted CR moves before every vararg function
      call, rather than just setting and unsetting CR bit 6 directly before every
      vararg function call. This patch instead inserts a PPCcrset/PPCcrunset
      instruction which are then matched by a dedicated instruction pattern.
      
      Patch by Tobias von Koch.
      
      llvm-svn: 162725
      5ab37803
    • Hal Finkel's avatar
      Optimize zext on PPC64. · e39526a7
      Hal Finkel authored
      The zeroextend IR instruction is lowered to an 'and' node with an immediate
      mask operand, which in turn gets legalised to a sequence of ori's & ands.
      This can be done more efficiently using the rldicl instruction.
      
      Patch by Tobias von Koch.
      
      llvm-svn: 162724
      e39526a7
    • Jakob Stoklund Olesen's avatar
      More missing mayLoad flags on AVX multiclasses. · 89d6b29d
      Jakob Stoklund Olesen authored
      llvm-svn: 162714
      89d6b29d
    • Jakob Stoklund Olesen's avatar
      Add ATOMIC_LDR* pseudo-instructions to model atomic_load on ARM. · b24cb8c5
      Jakob Stoklund Olesen authored
      It is not safe to use normal LDR instructions because they may be
      reordered by the scheduler. The ATOMIC_LDR pseudos have a mayStore flag
      that prevents reordering.
      
      Atomic loads are also prevented from participating in rematerialization
      and load folding.
      
      llvm-svn: 162713
      b24cb8c5
    • Marshall Clow's avatar
      Fix compile error when building with C++11 - clang thinks that PRIx64 is a... · ef271cce
      Marshall Clow authored
      Fix compile error when building with C++11 - clang thinks that PRIx64 is a user-defined suffix or something
      
      llvm-svn: 162704
      ef271cce
    • Bill Wendling's avatar
Loading