Skip to content
  1. Jan 14, 2014
  2. Jan 13, 2014
    • Cameron McInally's avatar
      Clean up RUN command for Assembler/getInt.ll. · da3bba44
      Cameron McInally authored
      llvm-svn: 199158
      da3bba44
    • Chandler Carruth's avatar
      Factor the option and checking of compiler version better. Put the · 83885973
      Chandler Carruth authored
      option with the others in the top level CMakeLists, and put the check in
      HandleLLVMOptions. This will also let it be used from the standalone
      Clang builds.
      
      llvm-svn: 199149
      83885973
    • Chandler Carruth's avatar
      Raise the minimum CMake version to 2.8.8 -- we have a report that the · 5aad86a9
      Chandler Carruth authored
      compiler version checking doesn't work on 2.8.7. This feature was
      documented in 2.8.10, but existed for an unknown amount of time before
      that.
      
      I'm actually happy to revert this and remove the use of the feature if
      there is anyone with a specific problem updating CMake. Please just let
      me know. I don't want to re-implement this CMake functionality unless
      there is a reason, and this is the only real way to find that out.
      
      llvm-svn: 199148
      5aad86a9
    • Cameron McInally's avatar
      Fix uninitialized warning in llvm/lib/IR/DataLayout.cpp. · f0379fa4
      Cameron McInally authored
      llvm-svn: 199147
      f0379fa4
    • Juergen Ributzka's avatar
      [DAG] Refactor ReassociateOps - no functional change intended. · 6840282c
      Juergen Ributzka authored
      llvm-svn: 199146
      6840282c
    • Chandler Carruth's avatar
      Add a check that the host compiler is modern to CMake, take 1. This is · 24b40f59
      Chandler Carruth authored
      likely to be reverted and re-applied a few times. The minimum versions
      we're aiming at:
      
        GCC 4.7
        Clang 3.1
        MSVC 17.0 (Visual Studio 2012)
      
      Let me know if something breaks!
      
      llvm-svn: 199145
      24b40f59
    • Juergen Ributzka's avatar
      [DAG] Teach DAG to also reassociate vector operations · 7384405f
      Juergen Ributzka authored
      This commit teaches DAG to reassociate vector ops, which in turn enables
      constant folding of vector op chains that appear later on during custom lowering
      and DAG combine.
      
      Reviewed by Andrea Di Biagio
      
      llvm-svn: 199135
      7384405f
    • Andrew Trick's avatar
      Hide the pre-RA-sched= option. · 7daf6a45
      Andrew Trick authored
      This is a very confusing option for a feature that will go away.
      
      -enable-misched is exposed instead to help triage issues with the new
      scheduler.
      
      llvm-svn: 199133
      7daf6a45
    • Weiming Zhao's avatar
      Fix PR 18369: [Thumbv8] asserts due to inconsistent CPSR liveness of IT blocks · f66be56b
      Weiming Zhao authored
      The issue is caused when Post-RA scheduler reorders a bundle instruction
      (IT block). However, it only flips the CPSR liveness of the bundle instruction,
      leaves the instructions inside the bundle unchanged, which causes inconstancy and crashes
      Thumb2SizeReduction.cpp::ReduceMBB().
      
      llvm-svn: 199127
      f66be56b
    • Rafael Espindola's avatar
      Update getLazyBitcodeModule to use ErrorOr for error handling. · 5b6c1e8e
      Rafael Espindola authored
      llvm-svn: 199125
      5b6c1e8e
    • Andrea Di Biagio's avatar
      [AArch64] Fix assertion failure caused by an invalid comparison between APInt values. · 9bc0415c
      Andrea Di Biagio authored
      APInt only knows how to compare values with the same BitWidth and asserts
      in all other cases.
      
      With this fix, function PerformORCombine does not use the APInt equality
      operator if the APInt values returned by 'isConstantSplat' differ in BitWidth.
      In that case they are different and no comparison is needed.
      
      llvm-svn: 199119
      9bc0415c
    • Joerg Sonnenberger's avatar
      Fix indentation. · 808df672
      Joerg Sonnenberger authored
      llvm-svn: 199118
      808df672
    • Richard Sandiford's avatar
      [SystemZ] Flesh out stackrestore test (frame-11.ll) · 36b37691
      Richard Sandiford authored
      ...so that it does something vaguely sensible.
      
      llvm-svn: 199117
      36b37691
    • Richard Sandiford's avatar
      [SystemZ] Add "volatile" to a dead store in variable-loc.ll · 9b9e057c
      Richard Sandiford authored
      llvm-svn: 199116
      9b9e057c
    • Richard Sandiford's avatar
      [SystemZ] Improve risbg-01.ll test · 64c0c4c0
      Richard Sandiford authored
      The old mask in f24 wasn't well chosen because the lshr would always be zero.
      CodeGen didn't detect this but InstCombine would.  The new mask ensures
      that both shifts are needed.
      
      f26 is specifically testing for a wrap-around mask.  The AND can be applied
      to just the shift left, either before or after the shift.  Again, CodeGen
      kept it in the original form but InstCombine would mask after the shift
      instead.  The exact choice of NILF isn't important for the test so I just
      dropped it and kept the rotate.
      
      llvm-svn: 199115
      64c0c4c0
    • Richard Sandiford's avatar
      [SystemZ] Optimize (sext (ashr (shl ...), ...)) · 32379b81
      Richard Sandiford authored
      ...into (ashr (shl (anyext X), ...), ...), which requires one fewer
      instruction.  The (anyext X) can sometimes be simplified too.
      
      I didn't do this in DAGCombiner because widening shifts isn't a win
      on all targets.
      
      llvm-svn: 199114
      32379b81
    • Chris Lattner's avatar
      fix a -Wdocumentation warning. · bdf51784
      Chris Lattner authored
      llvm-svn: 199113
      bdf51784
    • Tim Northover's avatar
      ARM: add test for r199108. Oops. · 7d074a5a
      Tim Northover authored
      rdar://problem/15800156
      
      llvm-svn: 199109
      7d074a5a
    • Tim Northover's avatar
      ARM: constrain Thumb LDRLIT pseudo-instructions to r0-r7. · 1328c1ae
      Tim Northover authored
      Previously we only used GPR for the destination placeholder in "ldr rD, [pc,
      incorrect codegen under the integrated assembler.
      
      This should fix both issues (which probably only affect MachO targets at the
      moment).
      
      rdar://problem/15800156
      
      llvm-svn: 199108
      1328c1ae
    • David Woodhouse's avatar
      [x86] Fix retq/retl handling in 64-bit mode · 4e033b0e
      David Woodhouse authored
      This finishes the job started in r198756, and creates separate opcodes for
      64-bit vs. 32-bit versions of the rest of the RET instructions too.
      
      LRETL/LRETQ are interesting... I can't see any justification for their
      existence in the SDM. There should be no 'LRETL' in 64-bit mode, and no
      need for a REX.W prefix for LRETQ. But this is what GAS does, and my
      Sandybridge CPU and an Opteron 6376 concur when tested as follows:
      
      asm __volatile__("pushq $0x1234\nmovq $0x33,%rax\nsalq $32,%rax\norq $1f,%rax\npushq %rax\nlretl $8\n1:");
      asm __volatile__("pushq $1234\npushq $0x33\npushq $1f\nlretq $8\n1:");
      asm __volatile__("pushq $0x33\npushq $1f\nlretq\n1:");
      asm __volatile__("pushq $0x1234\npushq $0x33\npushq $1f\nlretq $8\n1:");
      
      cf. PR8592 and commit r118903, which added LRETQ. I only added LRETIQ to
      match it.
      
      I don't quite understand how the Intel syntax parsing for ret
      instructions is working, despite r154468 allegedly fixing it. Aren't the
      explicitly sized 'retw', 'retd' and 'retq' supposed to work? I have at
      least made the 'lretq' work with (and indeed *require*) the 'q'.
      
      llvm-svn: 199106
      4e033b0e
    • Chandler Carruth's avatar
      [PM] Split DominatorTree into a concrete analysis result object which · 73523021
      Chandler Carruth authored
      can be used by both the new pass manager and the old.
      
      This removes it from any of the virtual mess of the pass interfaces and
      lets it derive cleanly from the DominatorTreeBase<> template. In turn,
      tons of boilerplate interface can be nuked and it turns into a very
      straightforward extension of the base DominatorTree interface.
      
      The old analysis pass is now a simple wrapper. The names and style of
      this split should match the split between CallGraph and
      CallGraphWrapperPass. All of the users of DominatorTree have been
      updated to match using many of the same tricks as with CallGraph. The
      goal is that the common type remains the resulting DominatorTree rather
      than the pass. This will make subsequent work toward the new pass
      manager significantly easier.
      
      Also in numerous places things became cleaner because I switched from
      re-running the pass (!!! mid way through some other passes run!!!) to
      directly recomputing the domtree.
      
      llvm-svn: 199104
      73523021
    • Chandler Carruth's avatar
      [PM][cleanup] Clean up comments and use modern doxygen in this file. · ca9af6ca
      Chandler Carruth authored
      This is a precursor to breaking the pass that computes the DominatorTree
      apart from the concrete DominatorTree.
      
      llvm-svn: 199103
      ca9af6ca
    • Elena Demikhovsky's avatar
      AVX-512: Embedded Rounding Control - encoding and printing · b19c9dc1
      Elena Demikhovsky authored
      Changed intrinsics for vrcp14/vrcp28 vrsqrt14/vrsqrt28 - aligned with GCC.
      
      llvm-svn: 199102
      b19c9dc1
    • Chandler Carruth's avatar
      [PM] Fix the const-correctness of the generic DominatorTreeBase to · db9120a0
      Chandler Carruth authored
      support notionally const queries even though they may trigger DFS
      numbering updates.
      
      The updating of DFS numbers and tracking of slow queries do not mutate
      the observable state of the domtree. They should be const to
      differentiate them from the APIs which mutate the tree directly to do
      incremental updates.
      
      This will make it possible in a world where the DominatorTree is not
      a pass but merely the result of running a pass to derive DominatorTree
      from the base class as it was originally designed, removing a huge
      duplication of API in DominatorTree.
      
      llvm-svn: 199101
      db9120a0
    • Chandler Carruth's avatar
      [PM] Pull the generic graph algorithms and data structures for dominator · e509db41
      Chandler Carruth authored
      trees into the Support library.
      
      These are all expressed in terms of the generic GraphTraits and CFG,
      with no reliance on any concrete IR types. Putting them in support
      clarifies that and makes the fact that the static analyzer in Clang uses
      them much more sane. When moving the Dominators.h file into the IR
      library I claimed that this was the right home for it but not something
      I planned to work on. Oops.
      
      So why am I doing this? It happens to be one step toward breaking the
      requirement that IR verification can only be performed from inside of
      a pass context, which completely blocks the implementation of
      verification for the new pass manager infrastructure. Fixing it will
      also allow removing the concept of the "preverify" step (WTF???) and
      allow the verifier to cleanly flag functions which fail verification in
      a way that precludes even computing dominance information. Currently,
      that results in a fatal error even when you ask the verifier to not
      fatally error. It's awesome like that.
      
      The yak shaving will continue...
      
      llvm-svn: 199095
      e509db41
    • Tim Northover's avatar
      Revert "ReMat: fix overly cavalier attitude to sub-register indices" · 7fdd4857
      Tim Northover authored
      Very sorry, this was a premature patch that I still need to investigate and
      finish off (for some reason beyond me at the moment it doesn't actually fix the
      issue in all cases).
      
      This reverts commit r199091.
      
      llvm-svn: 199093
      7fdd4857
    • Tim Northover's avatar
      Docs: fix sign of division and increase equivocation on code generated. · cdc53956
      Tim Northover authored
      I should have been a politician.
      
      llvm-svn: 199092
      cdc53956
    • Tim Northover's avatar
      ReMat: fix overly cavalier attitude to sub-register indices · 59f8d4b4
      Tim Northover authored
      There are two attempted optimisations in reMaterializeTrivialDef, trying to
      avoid promoting the size of a register too much when rematerializing.
      Unfortunately, both appear to be flawed. First, we see if the original register
      would have worked, but this is inadequate. Consider:
      
          v1 = SOMETHING (v1 is QQ)
          v2:Q0 = COPY v1:Q1 (v1, v2 are QQ)
          ...
          uses of v2
      
      In this case even though v2 *could* be used directly as the output of
      SOMETHING, this would set the wrong bits of the QQ register involved. The
      correct rematerialization must be:
      
          v2:Q0_Q1 = SOMETHING (v2 promoted to QQQ)
          ...
          uses of v2:Q1_Q2
      
      For the second optimisation, if the correct remat is "v2:idx = SOMETHING" then
      we can't necessarily expect v2 itself to be valid for SOMETHING, but we do try
      to hunt for a class between v1 and v2 that works. Unfortunately, this is also
      wrong:
      
          v1 = SOMETHING (v1 is QQ)
          v2:Q0_Q1 = COPY v1 (v1 is QQ, v2 is QQQ)
          ...
          uses of v2 as a QQQ
      
      The canonical rematerialization here is "v2:Q0_Q1 = SOMETHING". However current
      logic would decide that v2 could be a QQ (no interest is taken in later uses).
      
      This patch, therefore, always accepts the widened register class without trying
      to be clever. Generally there is no penalty to this (e.g. in the common GR32 <
      GR64 case, expanding the width doesn't matter because it's not like you were
      going to do anything else with the high bits of a GR32 register). It can
      increase register pressure in cases like the ARM VFP regs though (multiple
      non-overlapping but equivalent subregisters). Hopefully this situation is rare
      enough that it won't matter.
      
      Unfortunately, no in-tree targets actually expose this as far as I can tell
      (there are so few isAsCheapAsAMove instructions for it to trigger on) so I've
      been unable to produce a test. It was exposed in our ARM64 SPEC tests though,
      and I will be adding a test there that we should be able to contribute
      soon(TM).
      
      llvm-svn: 199091
      59f8d4b4
    • Chandler Carruth's avatar
      [cleanup] Re-sort the examples #include lines with my sort_includes · 20d4e6be
      Chandler Carruth authored
      script.
      
      llvm-svn: 199089
      20d4e6be
    • Chandler Carruth's avatar
      [cleanup] Fix the includes in the examples for r199082. · d7cd9ac9
      Chandler Carruth authored
      llvm-svn: 199087
      d7cd9ac9
    • Chandler Carruth's avatar
      [cleanup] Switch comments to use '\brief' style instead of '@brief' · 634cdb61
      Chandler Carruth authored
      style, and remove some unnecessary comments (the code is perfectly
      self-documenting here). Also clang-format the function declarations as
      they wrap cleanly now.
      
      llvm-svn: 199084
      634cdb61
    • Chandler Carruth's avatar
      [cleanup] Move the Dominators.h and Verifier.h headers into the IR · 5ad5f15c
      Chandler Carruth authored
      directory. These passes are already defined in the IR library, and it
      doesn't make any sense to have the headers in Analysis.
      
      Long term, I think there is going to be a much better way to divide
      these matters. The dominators code should be fully separated into the
      abstract graph algorithm and have that put in Support where it becomes
      obvious that evn Clang's CFGBlock's can use it. Then the verifier can
      manually construct dominance information from the Support-driven
      interface while the Analysis library can provide a pass which both
      caches, reconstructs, and supports a nice update API.
      
      But those are very long term, and so I don't want to leave the really
      confusing structure until that day arrives.
      
      llvm-svn: 199082
      5ad5f15c
    • Chandler Carruth's avatar
      [cleanup] Add a missing include exposed by resorting other includes. · 01e5037f
      Chandler Carruth authored
      Should fix the build.
      
      llvm-svn: 199081
      01e5037f
    • Chandler Carruth's avatar
      Re-sort #include lines again, prior to moving headers around. · 07baed53
      Chandler Carruth authored
      llvm-svn: 199080
      07baed53
    • Chandler Carruth's avatar
      [PM] Wire up support for writing bitcode with new PM. · b7bdfd65
      Chandler Carruth authored
      This moves the old pass creation functionality to its own header and
      updates the callers of that routine. Then it adds a new PM supporting
      bitcode writer to the header file, and wires that up in the opt tool.
      A test is added that round-trips code into bitcode and back out using
      the new pass manager.
      
      llvm-svn: 199078
      b7bdfd65
    • NAKAMURA Takumi's avatar
Loading