Skip to content
  1. Oct 11, 2012
  2. Oct 10, 2012
    • Nadav Rotem's avatar
      Patch by Shuxin Yang <shuxin.llvm@gmail.com>. · 17418964
      Nadav Rotem authored
      Original message:
      
      The attached is the fix to radar://11663049. The optimization can be outlined by following rules:
      
         (select (x != c), e, c) -> select (x != c), e, x),
         (select (x == c), c, e) -> select (x == c), x, e)
      where the <c> is an integer constant.
      
       The reason for this change is that : on x86, conditional-move-from-constant needs two instructions;
      however, conditional-move-from-register need only one instruction.
      
        While the LowerSELECT() sounds to be the most convenient place for this optimization, it turns out to be a bad place. The reason is that by replacing the constant <c> with a symbolic value, it obscure some instruction-combining opportunities which would otherwise be very easy to spot. For that reason, I have to postpone the change to last instruction-combining phase.
      
        The change passes the test of "make check-all -C <build-root/test" and "make -C project/test-suite/SingleSource".
      
      llvm-svn: 165661
      17418964
    • Bill Schmidt's avatar
      When generating spill and reload code for vector registers on PowerPC, · b9bc4740
      Bill Schmidt authored
      the compiler makes use of GPR0.  However, there are two flavors of
      GPR0 defined by the target:  the 32-bit GPR0 (R0) and the 64-bit GPR0
      (X0).  The spill/reload code makes use of R0 regardless of whether we
      are generating 32- or 64-bit code.
      
      This patch corrects the problem in the obvious manner, using X0 and
      ADDI8 for 64-bit and R0 and ADDI for 32-bit.
      
      llvm-svn: 165658
      b9bc4740
    • Bill Schmidt's avatar
      The PowerPC VRSAVE register has been somewhat of an odd beast since · 38d94587
      Bill Schmidt authored
      the Altivec extensions were introduced.  Its use is optional, and
      allows the compiler to communicate to the operating system which
      vector registers should be saved and restored during a context switch.
      In practice, this information is ignored by the various operating
      systems using the SVR4 ABI; the kernel saves and restores the entire
      register state.  Setting the VRSAVE register is no longer performed by
      the AIX XL compilers, the IBM i compilers, or by GCC on Power Linux
      systems.  It seems best to avoid this logic within LLVM as well.
      
      This patch avoids generating code to update and restore VRSAVE for the
      PowerPC SVR4 ABIs (32- and 64-bit).  The code remains in place for the
      Darwin ABI.
      
      llvm-svn: 165656
      38d94587
    • Micah Villmow's avatar
      Add in support for expansion of all of the comparison operations to the... · 0242b9b5
      Micah Villmow authored
      Add in support for expansion of all of the comparison operations to the absolute minimum required set. This allows a backend to expand any arbitrary set of comparisons as long as a minimum set is supported.
      The minimum set of required instructions is ISD::AND, ISD::OR, ISD::SETO(or ISD::SETOEQ) and ISD::SETUO(or ISD::SETUNE). Everything is expanded into one of two patterns:
      Pattern 1: (LHS CC1 RHS) Opc (LHS CC2 RHS)
      Pattern 2: (LHS CC1 LHS) Opc (RHS CC2 RHS)
      
      llvm-svn: 165655
      0242b9b5
    • Sean Silva's avatar
      Revert r165652: "Remove unnecessary RTTI from the build." · c399c753
      Sean Silva authored
      ... Apparently the RTTI is still necessary for some reason.
      
      llvm-svn: 165654
      c399c753
    • Sean Silva's avatar
      Remove unnecessary RTTI from the build. · 9b72524e
      Sean Silva authored
      llvm-svn: 165652
      9b72524e
    • Sean Silva's avatar
      tblgen: Compile TableGen without RTTI. · bd7d2431
      Sean Silva authored
      TableGen no longer needs RTTI!
      
      llvm-svn: 165651
      bd7d2431
    • Sean Silva's avatar
      tblgen: Use semantically correct RTTI functions. · 88eb8dd4
      Sean Silva authored
      Also, some minor cleanup.
      
      llvm-svn: 165647
      88eb8dd4
    • Sean Silva's avatar
      tblgen: Mechanically move dynamic_cast<> to dyn_cast<>. · fb509ed1
      Sean Silva authored
      Some of these dyn_cast<>'s would be better phrased as isa<> or cast<>.
      That will happen in a future patch.
      
      There are also two dyn_cast_or_null<>'s slipped in instead of
      dyn_cast<>'s, since they were causing crashes with just dyn_cast<>.
      
      llvm-svn: 165646
      fb509ed1
    • Michael Liao's avatar
      Add support for FP_ROUND from v2f64 to v2f32 · e999b865
      Michael Liao authored
      - Due to the current matching vector elements constraints in
        ISD::FP_ROUND, rounding from v2f64 to v4f32 (after legalization from
        v2f32) is scalarized. Add a customized v2f32 widening to convert it
        into a target-specific X86ISD::VFPROUND to work around this
        constraints.
      
      llvm-svn: 165631
      e999b865
    • Michael Liao's avatar
      Add alternative support for FP_ROUND from v2f32 to v2f64 · effae0c8
      Michael Liao authored
      - Due to the current matching vector elements constraints in ISD::FP_EXTEND,
        rounding from v2f32 to v2f64 is scalarized. Add a customized v2f32 widening
        to convert it into a target-specific X86ISD::VFPEXT to work around this
        constraints. This patch also reverts a previous attempt to fix this issue by
        recovering the scalarized ISD::FP_EXTEND pattern and thus significantly
        reduces the overhead of supporting non-power-2 vector FP extend.
      
      llvm-svn: 165625
      effae0c8
    • Stepan Dyatkovskiy's avatar
      Fix for LDRB instruction: · 283baa00
      Stepan Dyatkovskiy authored
      SDNode for LDRB_POST_IMM is invalid: number of registers added to SDNode fewer
      that described in .td.
      
      7 ops is needed, but SDNode with only 6 is created.
      
      In more details:
      In ARMInstrInfo.td, in multiclass AI2_ldridx, in definition _POST_IMM, offset
      operand is defined as am2offset_imm. am2offset_imm is complex parameter type,
      and actually it consists from dummy register and imm itself. As I understood
      trick with dummy reg was made for AsmParser. In ARMISelLowering.cpp, this dummy
      register was not added to SDNode, and it cause crash in Peephole Optimizer pass.
      
      The problem fixed by setting up additional dummy reg when emitting
      LDRB_POST_IMM instruction.
      
      llvm-svn: 165617
      283baa00
    • Stepan Dyatkovskiy's avatar
      Issue description: · f13dbb8e
      Stepan Dyatkovskiy authored
      SchedulerDAGInstrs::buildSchedGraph ignores dependencies between FixedStack
      objects and byval parameters. So loading byval parameters from stack may be
      inserted *before* it will be stored, since these operations are treated as
      independent.
      
      Fix:
      Currently ARMTargetLowering::LowerFormalArguments saves byval registers with
      FixedStack MachinePointerInfo. To fix the problem we need to store byval
      registers with MachinePointerInfo referenced to first the "byval" parameter.
      
      Also commit adds two new fields to the InputArg structure: Function's argument
      index and InputArg's part offset in bytes relative to the start position of
      Function's argument. E.g.: If function's argument is 128 bit width and it was
      splitted onto 32 bit regs, then we got 4 InputArg structs with same arg index,
      but different offset values. 
      
      llvm-svn: 165616
      f13dbb8e
    • Bill Wendling's avatar
      Cleanup. Get rid of now dead code. · 7f1c5472
      Bill Wendling authored
      llvm-svn: 165613
      7f1c5472
    • Bill Wendling's avatar
      Remove the final bits of Attributes being declared in the Attribute · bbcdf4e2
      Bill Wendling authored
      namespace. Use the attribute's enum value instead. No functionality change
      intended.
      
      llvm-svn: 165610
      bbcdf4e2
    • Lang Hames's avatar
      My earlier "fix" for PBQP (see r165201) was incorrect. The real issue was that · 05fee08d
      Lang Hames authored
      checkRegMaskInterference only initializes the bitmask on the first interference.
      
      This fixes PR14027 and (re)fixes PR13945.
      
      llvm-svn: 165608
      05fee08d
    • Bill Wendling's avatar
      Pass into the AttributeWithIndex::get method an ArrayRef of attribute · ed42e799
      Bill Wendling authored
      enums. These are then created via the correct Attributes creation method.
      
      llvm-svn: 165607
      ed42e799
    • Andrew Trick's avatar
      misched: fall-back to a target hook for instr bundles. · c334bd45
      Andrew Trick authored
      llvm-svn: 165606
      c334bd45
    • Andrew Trick's avatar
      misched: Use the TargetSchedModel interface wherever possible. · dd79f0fc
      Andrew Trick authored
      Allows the new machine model to be used for NumMicroOps and OutputLatency.
      
      Allows the HazardRecognizer to be disabled along with itineraries.
      
      llvm-svn: 165603
      dd79f0fc
    • Andrew Trick's avatar
      whitespace · d9296ec2
      Andrew Trick authored
      llvm-svn: 165601
      d9296ec2
    • Bill Wendling's avatar
      Have 'addFnAttr' take the attribute enum value. Then have it build the... · f319e990
      Bill Wendling authored
      Have 'addFnAttr' take the attribute enum value. Then have it build the attribute object and add it appropriately. No functionality change.
      
      llvm-svn: 165595
      f319e990
    • Reed Kotler's avatar
      Reorder some parts of the td file to by in alphabetical order · 0f2e44a1
      Reed Kotler authored
      llvm-svn: 165590
      0f2e44a1
    • Andrew Kaylor's avatar
      Adding comments to clarify the reason for non-standard style in these files. · 10bc2b45
      Andrew Kaylor authored
      Patch committed on behalf of Kirill Uhanov
      
      llvm-svn: 165589
      10bc2b45
Loading