Skip to content
  1. Jul 12, 2012
    • Evan Cheng's avatar
      Instcombine was transforming: · 493eb32f
      Evan Cheng authored
        %shr = lshr i64 %key, 3
        %0 = load i64* %val, align 8
        %sub = add i64 %0, -1
        %and = and i64 %sub, %shr
        ret i64 %and
      
      to:
        %shr = lshr i64 %key, 3
        %0 = load i64* %val, align 8
        %sub = add i64 %0, 2305843009213693951
        %and = and i64 %sub, %shr
        ret i64 %and
      
      The demanded bit optimization is actually a pessimization because add -1 would
      be codegen'ed as a sub 1. Teach the demanded constant shrinking optimization
      to check for negated constant to make sure it is actually reducing the width
      of the constant.
      
      rdar://11793464
      
      llvm-svn: 160101
      493eb32f
    • Jim Grosbach's avatar
      TableGen: Location information for diagnostic. · d2aabd3b
      Jim Grosbach authored
      def Pat<...>;
      
      Results in 'record name is not a string!' diagnostic. Not the best,
      but the lack of location information moves it from not very helpful
      into completely useless. We're in the Record class when throwing the
      error, so just add the location info directly.
      
      llvm-svn: 160098
      d2aabd3b
    • Manman Ren's avatar
      ARM: fix typo in comments · 88a0d331
      Manman Ren authored
      llvm-svn: 160093
      88a0d331
    • Manman Ren's avatar
      ARM: Fix optimizeCompare to correctly check safe condition. · 34cb93e1
      Manman Ren authored
      It is safe if CPSR is killed or re-defined.
      When we are done with the basic block, check whether CPSR is live-out.
      Do not optimize away cmp if CPSR is live-out.
      
      llvm-svn: 160090
      34cb93e1
    • Jack Carter's avatar
      Patch for Mips direct object generation. · 570ae0b1
      Jack Carter authored
      When WriteFragmentData() case FT_align called
      Asm.getBackend().writeNopData() is called, nothing
      is done since Mips implementation of writeNopData just
      returned "true".
      
      For some reason this has not caused problems in 32 bit
      mode, but in 64 bit mode it caused an assert when processing
      multiple function units.
      
      The test case included will assert without this patch. It
      runs twice with different flags to prevent false positives
      due to changes in code generation over time.
      
      llvm-svn: 160084
      570ae0b1
  2. Jul 11, 2012
  3. Jul 10, 2012
    • Chad Rosier's avatar
      Move [get|set]BasePtrStackAdjustment() from MachineFrameInfo to · 97c22142
      Chad Rosier authored
      X86MachineFunctionInfo as this is currently only used by X86. If this ever
      becomes an issue on another arch (e.g., ARM) then we can hoist it back out.
      
      llvm-svn: 160009
      97c22142
    • Chad Rosier's avatar
      Add newline. · 3ee9a4c2
      Chad Rosier authored
      llvm-svn: 160006
      3ee9a4c2
    • Chad Rosier's avatar
      Add test case accidentally omitted from r160002. · 579b1fee
      Chad Rosier authored
      llvm-svn: 160004
      579b1fee
    • Chad Rosier's avatar
      Add support for dynamic stack realignment in the presence of dynamic allocas on · bdb08ac5
      Chad Rosier authored
      X86.  Basically, this is a reapplication of r158087 with a few fixes.
      
      Specifically, (1) the stack pointer is restored from the base pointer before
      popping callee-saved registers and (2) in obscure cases (see comments in patch)
      we must cache the value of the original stack adjustment in the prologue and
      apply it in the epilogue.
      
      rdar://11496434
      
      llvm-svn: 160002
      bdb08ac5
    • Chandler Carruth's avatar
      Fix a bug where I didn't test for an empty range before inspecting the · 77d94001
      Chandler Carruth authored
      back of it.
      
      I don't have anything even remotely close to a test case for this. It
      only broke two build bots, both of them doing bootstrap builds, one of
      them a dragonegg bootstrap. It doesn't break for me when I bootstrap
      either. It doesn't reproduce every time or on many machines during the
      bootstrap. Many thanks to Duncan Sands who got the exact command (and
      stage of the bootstrap) which failed on the dragonegg bootstrap and
      managed to get it to trigger under valgrind with debug symbols. The fix
      was then found by inspection.
      
      llvm-svn: 159993
      77d94001
    • Nadav Rotem's avatar
      · d908ddc1
      Nadav Rotem authored
      Improve the loading of load-anyext vectors by allowing the codegen to load
      multiple scalars and insert them into a vector. Next, we shuffle the elements
      into the correct places, as before.
      Also fix a small dagcombine bug in SimplifyBinOpWithSameOpcodeHands, when the
      migration of bitcasts happened too late in the SelectionDAG process.
      
      llvm-svn: 159991
      d908ddc1
    • Richard Barton's avatar
      Fix instruction description of VMOV (between two ARM core registers and two... · 1dc44dce
      Richard Barton authored
      Fix instruction description of VMOV (between two ARM core registers and two single-precision resiters) (and do it properly this time!
      
      llvm-svn: 159989
      1dc44dce
    • Craig Topper's avatar
      Reverse assembler/disassembler operand order for gather instructions. · be41e2da
      Craig Topper authored
      llvm-svn: 159983
      be41e2da
    • Chandler Carruth's avatar
      Add an efficient merge operation to LiveInterval and use it to avoid · e18614dd
      Chandler Carruth authored
      quadratic behavior when performing pathological merges. Fixes the core
      element of PR12652.
      
      There is only one user of addRangeFrom left: join. I'm hoping to
      refactor further in a future patch and have join use this merge
      operation as well.
      
      llvm-svn: 159982
      e18614dd
    • Chandler Carruth's avatar
      Teach LiveIntervals how to verify themselves and start using it in some · ac766b9b
      Chandler Carruth authored
      of the trick merge routines. This adds a layer of testing that was
      necessary when implementing more efficient (and complex) merge logic for
      this datastructure.
      
      No functionality changed here.
      
      llvm-svn: 159981
      ac766b9b
    • Jim Grosbach's avatar
      ARM: Allow more flexible patterns in NEON formats. · 16b43dbb
      Jim Grosbach authored
      Some NEON instructions want to match against normal SDNodes for some
      operand types and Intrinsics for others. For example, CTLZ. To enable this,
      switch from explicitly requiring Intrinsic on the class templates to using
      SDPatternOperator instead.
      
      llvm-svn: 159974
      16b43dbb
    • Jim Grosbach's avatar
      Allow intrinsics to be used in place of node matchables. · 70006820
      Jim Grosbach authored
      TableGen has support for using an intrinics name directly in a DAG,
      but this breaks down when referring to just a node, as that's
      handled initializer list stuff entirely via subclassing in the
      parser. That is, using an instrinsic like "(int_my_intrinsic ...)"
      works fine. Using it standalone for parameterizing the operator
      in such a DAG does not.
      
      Fixing this is simple enough, as we simply declare Intrinsic
      as deriving from SDPatternOperator, which is the class name
      intended for exactly this purpose in TargetSelectionDAG.td.
      
      When the intrinsic is actually used in the DAG pattern, it will
      be recognized and expanded to an intrinsic_wo_chain (et. al.)
      just like when it's used directly.
      
      Incoming ARM NEON cleanup based on this and a bit of functionality
      improvement after that.
      
      llvm-svn: 159973
      70006820
Loading