Skip to content
  1. Oct 12, 2012
    • Bob Wilson's avatar
      Set default CPU for Darwin targets with LTO. <rdar://problem/12457841> · 3f7e7c06
      Bob Wilson authored
      This is a temporary hack until Bill's project to record command line options
      in the LLVM IR is ready. Clang currently sets a default CPU but that isn't
      recorded anywhere and it doesn't get used in the final LTO compilation.
      
      llvm-svn: 165809
      3f7e7c06
    • NAKAMURA Takumi's avatar
      llvm/test/CodeGen/PowerPC/2012-10-12-bitcast.ll: Try to fix failure on non-ppc... · 4d88f05f
      NAKAMURA Takumi authored
      llvm/test/CodeGen/PowerPC/2012-10-12-bitcast.ll: Try to fix failure on non-ppc hosts, to add -mattr=+altivec.
      
      llvm-svn: 165803
      4d88f05f
    • Ulrich Weigand's avatar
      Fix big-endian codegen bug in DAGTypeLegalizer::ExpandRes_BITCAST · 9aa51d1a
      Ulrich Weigand authored
      On PowerPC, a bitcast of <16 x i8> to i128 may run through a code
      path in ExpandRes_BITCAST that attempts to do an intermediate
      bitcast to a <4 x i32> vector, and then construct the Hi and Lo parts
      of the resulting i128 by pairing up two of those i32 vector elements
      each.  The code already recognizes that on a big-endian system, the
      first two vector elements form the Hi part, and the final two vector
      elements form the Lo part (vice-versa from the little-endian situation).
      
      However, we also need to take endianness into account when forming each
      of those separate pairs:  on a big-endian system, vector element 0 is
      the *high* part of the pair making up the Hi part of the result, and
      vector element 1 is the low part of the pair.  The code currently always
      uses vector element 0 as the low part and vector element 1 as the high
      part, as is appropriate for little-endian platforms only.
      
      This patch fixes this by swapping the vector elements as they are
      paired up as appropriate.
      
      llvm-svn: 165802
      9aa51d1a
    • NAKAMURA Takumi's avatar
    • NAKAMURA Takumi's avatar
      ExceptionDemo.cpp: Whitespace. · 8e70dd59
      NAKAMURA Takumi authored
      llvm-svn: 165795
      8e70dd59
    • Duncan Sands's avatar
      Add powerpc-ibm-aix to Triple. Patch by Kai. · d5772de0
      Duncan Sands authored
      llvm-svn: 165792
      d5772de0
    • Tim Northover's avatar
      Add float-abi and softfloat options to lli · d4a2f5bb
      Tim Northover authored
      Patch by Amara Emerson.
      
      llvm-svn: 165791
      d4a2f5bb
    • NAKAMURA Takumi's avatar
      2d1bd7cc
    • Nick Lewycky's avatar
      Shuffle the virtual destructor down to the base. This should actually pacify · 6522c717
      Nick Lewycky authored
      -Wnon-virtual-dtor for real.
      
      llvm-svn: 165787
      6522c717
    • Nick Lewycky's avatar
      Give this class full of virtual functions a virtual destructor. Classes love · 758077c2
      Nick Lewycky authored
      virtual destructors.
      
      llvm-svn: 165786
      758077c2
    • Eric Christopher's avatar
      Indenting. · ca2ff70e
      Eric Christopher authored
      llvm-svn: 165785
      ca2ff70e
    • Sebastian Pop's avatar
      fix warning · e9623261
      Sebastian Pop authored
      DependenceAnalysis.cpp:1164:32: warning: implicit truncation from 'int' to bitfield changes value from -5 to 3
            [-Wconstant-conversion]
          Result.DV[Level].Direction &= ~Dependence::DVEntry::GT;
                                     ^  ~~~~~~~~~~~~~~~~~~~~~~~~
      
      Patch from Preston Briggs <preston.briggs@gmail.com>.
      
      llvm-svn: 165784
      e9623261
    • Reed Kotler's avatar
      Div, Rem int/unsigned int · cf11c59e
      Reed Kotler authored
      llvm-svn: 165783
      cf11c59e
    • Sean Silva's avatar
      docs: Update example to conform to coding standards. · 3b942abe
      Sean Silva authored
      llvm-svn: 165782
      3b942abe
    • Bill Wendling's avatar
      Mark function as 'used' so that LTO doesn't try to get rid of it. · 35ac231d
      Bill Wendling authored
      llvm-svn: 165781
      35ac231d
    • NAKAMURA Takumi's avatar
    • Sean Silva's avatar
      docs: Minor clean up of Phabricator documentation. · b39f47b0
      Sean Silva authored
      llvm-svn: 165779
      b39f47b0
    • Evan Cheng's avatar
      Legalizer optimize a pair of div / mod to a call to divrem libcall if they are · 21c4adcd
      Evan Cheng authored
      not legal. However, it should use a div instruction + mul + sub if divide is
      legal. The rem legalization code was missing a check and incorrectly uses a
      divrem libcall even when div is legal.
      
      rdar://12481395
      
      llvm-svn: 165778
      21c4adcd
    • Bill Wendling's avatar
      Mark function as 'used' so that LTO doesn't try to get rid of it. · 408668a8
      Bill Wendling authored
      llvm-svn: 165777
      408668a8
    • Bill Wendling's avatar
      We need this symbol after an LTO build. · c2c6411f
      Bill Wendling authored
      llvm-svn: 165776
      c2c6411f
    • Sean Silva's avatar
      docs: Add SphinxQuickstartTemplate.rst. · d91ff4c9
      Sean Silva authored
      The intent of this document is to be the go-to document for anybody who
      wants to write new documentation, but isn't familiar with Sphinx.
      
      llvm-svn: 165775
      d91ff4c9
    • Sean Silva's avatar
      docs: Improve HowToSetUpLLVMStyleRTTI. · d7802ad8
      Sean Silva authored
      * Fix confusing explanation regarding abstract classes.
      
      * Clarify auto-upcasting and why `Shape` doesn't need a `classof()`.
      
      * Add section `Rules of Thumb` with some quick summary tips.
      
      llvm-svn: 165768
      d7802ad8
    • Sean Silva's avatar
      Remove unnecessary classof()'s · 506a1c5a
      Sean Silva authored
      isa<> et al. automatically infer when the cast is an upcast (including a
      self-cast), so these are no longer necessary.
      
      llvm-svn: 165767
      506a1c5a
    • Sean Silva's avatar
      docs: Update HowToSetUpLLVMStyleRTTI. · d73b2818
      Sean Silva authored
      Recent changes to isa<>/dyn_cast<> have made unnecessary those classof()
      of the form:
      
          static bool classof(const Foo *) { return true; }
      
      Accordingly, remove mention of such classof() from the documentation.
      
      llvm-svn: 165766
      d73b2818
    • Sean Silva's avatar
      Casting.h: Automatically handle isa<Base>(Derived). · 35dd8779
      Sean Silva authored
      Additionally, all such cases are handled with no dynamic check.
      
      All `classof()` of the form
      
          class Foo {
            [...]
            static bool classof(const Bar *) { return true; }
            [...]
          }
      
      where Foo is an ancestor of Bar are no longer necessary.
      Don't write them!
      
      Note: The exact test is `is_base_of<Foo, Bar>`, which is non-strict, so
      that Foo is considered an ancestor of itself.
      
      This leads to the following rule of thumb for LLVM-style RTTI:
      
          The argument type of `classof()` should be a strict ancestor.
      
      For more information about implementing LLVM-style RTTI, see
      docs/HowToSetUpLLVMStyleRTTI.rst
      
      llvm-svn: 165765
      35dd8779
    • Sean Silva's avatar
      Remove buggy classof(). · bead14e9
      Sean Silva authored
      This classof() is effectively saying that a MachineCodeEmitter "is-a"
      JITEmitter, but JITEmitter is in fact a descendant of
      MachineCodeEmitter, so this is not semantically correct. Consequently,
      none of the assertions that rely on these classof() actualy check
      anything.
      
      Remove the RTTI (which didn't actually check anything) and use
      static_cast<> instead.
      
      Post-Mortem Bug Analysis
      ========================
      
      Cause of the bug
      ----------------
      
      r55022 appears to be the source of the classof() and assertions removed
      by this commit. It aimed at removing some dynamic_cast<> that were
      solely in the assertions. A typical diff hunk from that commit looked
      like:
      
        -  assert(dynamic_cast<JITEmitter*>(MCE) && "Unexpected MCE?");
        -  JITEmitter *JE = static_cast<JITEmitter*>(getCodeEmitter());
        +  assert(isa<JITEmitter>(MCE) && "Unexpected MCE?");
        +  JITEmitter *JE = cast<JITEmitter>(getCodeEmitter());
      
      Hence, the source of the bug then seems to be an attempt to replace
      dynamic_cast<> with LLVM-style RTTI without properly setting up the
      class hierarchy for LLVM-style RTTI. The bug therefore appears to be
      simply a "thinko".
      
      What initially indicated the presence of the bug
      ------------------------------------------------
      
      After implementing automatic upcasting for isa<>, classof() functions of
      the form
      
        static bool classof(const Foo *) { return true; }
      
      were removed, since they only serve the purpose of optimizing
      statically-OK upcasts. A subsequent recompilation triggered a build
      failure on the isa<> tests within the removed asserts, since the
      automatic upcasting (correctly) failed to substitute this classof().
      
      Key to pinning down the root cause of the bug
      ---------------------------------------------
      
      After being alerted to the presence of the bug, some thought about the
      semantics which were being asserted by the buggy classof() revealed that
      it was incorrect.
      
      How the bug could have been prevented
      -------------------------------------
      
      This bug could have been prevented by better documentation for how to
      set up LLVM-style RTTI. This should be solved by the recently added
      documentation HowToSetUpLLVMStyleRTTI. However, this bug suggests that
      the documentation should clearly explain the contract that classof()
      must fulfill. The HowToSetUpLLVMStyleRTTI already explains this
      contract, but it is a little tucked away. A future patch will expand
      that explanation and make it more prominent.
      
      There does not appear to be a simple way to have the compiler prevent
      this bug, since fundamentally it boiled down to a spurious classof()
      where the programmer made an erroneous statement about the conversion.
      This suggests that perhaps the interface to LLVM-style RTTI of classof()
      is not the best. There is already some evidence for this, since in a
      number of places Clang has classof() forward to classofKind(Kind K)
      which evaluates the cast in terms of just the Kind. This could probably
      be generalized to simply a `static const Kind MyKind;` field in leaf
      classes and `static const Kind firstMyKind, lastMyKind;` for non-leaf
      classes, and have the rest of the work be done inside Casting.h,
      assuming that the Kind enum is laid out in a preorder traversal of the
      inheritance tree.
      
      llvm-svn: 165764
      bead14e9
    • Manman Ren's avatar
      PGO: create metadata for switch only if it has more than one targets. · 97c18762
      Manman Ren authored
      When all cases of a switch statement are dead, the weights vector only has one
      element, and we will get an ssertion failure when calling createBranchWeights.
      
      llvm-svn: 165759
      97c18762
    • Chad Rosier's avatar
      Remove extra semicolon. · 959c71a6
      Chad Rosier authored
      llvm-svn: 165758
      959c71a6
    • Chad Rosier's avatar
      Remove extra semicolons. · 2b189a5b
      Chad Rosier authored
      llvm-svn: 165757
      2b189a5b
  2. Oct 11, 2012
    • Jan Wen Voung's avatar
      Fix some typos 165739, spotted by Duncan. · 8c9e9411
      Jan Wen Voung authored
      llvm-svn: 165753
      8c9e9411
    • Micah Villmow's avatar
      Revert 165732 for further review. · 0c61134d
      Micah Villmow authored
      llvm-svn: 165747
      0c61134d
    • Jan Wen Voung's avatar
      Change encoding of instruction operands in bitcode binaries to be relative · afaced07
      Jan Wen Voung authored
      to the instruction position.  The old encoding would give an absolute
      ID which counts up within a function, and only resets at the next function.
      
      I.e., Instead of having:
      
      ... = icmp eq i32 n-1, n-2
      br i1 ..., label %bb1, label %bb2
      
      it will now be roughly:
      
      ... = icmp eq i32 1, 2
      br i1 1, label %bb1, label %bb2
      
      This makes it so that ids remain relatively small and can be encoded
      in fewer bits.
      
      With this encoding, forward reference operands will be given
      negative-valued IDs.  Use signed VBRs for the most common case
      of forward references, which is phi instructions.
      
      To retain backward compatibility we bump the bitcode version
      from 0 to 1 to distinguish between the different encodings.
      
      llvm-svn: 165739
      afaced07
    • Manuel Klimek's avatar
    • Micah Villmow's avatar
      Add in the first iteration of support for llvm/clang/lldb to allow variable... · 08318973
      Micah Villmow authored
      Add in the first iteration of support for llvm/clang/lldb to allow variable per address space pointer sizes to be optimized correctly.
      
      llvm-svn: 165726
      08318973
    • Jakob Stoklund Olesen's avatar
      Pass an explicit operand number to addLiveIns. · d0d7860f
      Jakob Stoklund Olesen authored
      Not all instructions define a virtual register in their first operand.
      Specifically, INLINEASM has a different format.
      
      <rdar://problem/12472811>
      
      llvm-svn: 165721
      d0d7860f
    • Bill Schmidt's avatar
      This patch addresses PR13947. · 22162470
      Bill Schmidt authored
      For function calls on the 64-bit PowerPC SVR4 target, each parameter
      is mapped to as many doublewords in the parameter save area as
      necessary to hold the parameter.  The first 13 non-varargs
      floating-point values are passed in registers; any additional
      floating-point parameters are passed in the parameter save area.  A
      single-precision floating-point parameter (32 bits) must be mapped to
      the second (rightmost, low-order) word of its assigned doubleword
      slot.
      
      Currently LLVM violates this ABI requirement by mapping such a
      parameter to the first (leftmost, high-order) word of its assigned
      doubleword slot.  This is internally self-consistent but will not
      interoperate correctly with libraries compiled with an ABI-compliant
      compiler.
      
      This patch corrects the problem by adjusting the parameter addressing
      on both sides of the calling convention.
      
      llvm-svn: 165714
      22162470
    • David Chisnall's avatar
      6be23ce8
    • David Chisnall's avatar
      Expose move to/from coprocessor instructions in MIPS64 mode. · 6a00ab4b
      David Chisnall authored
      Note: [D]M{T,F}CP2 is just a recommended encoding.  Vendors often provide a
      custom CP2 that interprets instructions differently and may wish to add their
      own instructions that use this opcode.  We should ensure that this is easy to
      do.  I will probably add a 'has custom CP{0-3}' subtarget flag to make this
      easy: We want to avoid the GCC situation where every MIPS vendor makes a custom
      fork that breaks every other MIPS CPU and so can't be merged upstream.
      
      llvm-svn: 165711
      6a00ab4b
    • NAKAMURA Takumi's avatar
      e4658e89
    • Sebastian Pop's avatar
      dependence analysis · 59b61b9e
      Sebastian Pop authored
      Patch from Preston Briggs <preston.briggs@gmail.com>.
      
      This is an updated version of the dependence-analysis patch, including an MIV
      test based on Banerjee's inequalities.
      
      It's a fairly complete implementation of the paper
      
          Practical Dependence Testing
          Gina Goff, Ken Kennedy, and Chau-Wen Tseng
          PLDI 1991
      
      It cannot yet propagate constraints between coupled RDIV subscripts (discussed
      in Section 5.3.2 of the paper).
      
      It's organized as a FunctionPass with a single entry point that supports testing
      for dependence between two instructions in a function. If there's no dependence,
      it returns null. If there's a dependence, it returns a pointer to a Dependence
      which can be queried about details (what kind of dependence, is it loop
      independent, direction and distance vector entries, etc). I haven't included
      every imaginable feature, but there's a good selection that should be adequate
      for supporting many loop transformations. Of course, it can be extended as
      necessary.
      
      Included in the patch file are many test cases, commented with C code showing
      the loops and array references.
      
      llvm-svn: 165708
      59b61b9e
Loading