Skip to content
  1. Mar 20, 2013
  2. Mar 19, 2013
    • Enrico Granata's avatar
      The formatters for std::shared_ptr, std::weak_ptr, std::list, std::vector and... · 92373533
      Enrico Granata authored
      The formatters for std::shared_ptr, std::weak_ptr, std::list, std::vector and std::map as provided by libc++ are now written in C++ instead of Python
      std::deque is still in Python but is much less commonly used
      
      llvm-svn: 177454
      92373533
    • Anna Zaks's avatar
      [analyzer] Do not believe lazy binding when symbolic region types do not match · 3f4fad92
      Anna Zaks authored
      This fixes a crash when analyzing LLVM that was exposed by r177220 (modeling of
      trivial copy/move assignment operators).
      
      When we look up a lazy binding for “Builder”, we see the direct binding of Loc at offset 0.
      Previously, we believed the binding, which led to a crash. Now, we do not believe it as
      the types do not match.
      
      llvm-svn: 177453
      3f4fad92
    • Howard Hinnant's avatar
    • Chad Rosier's avatar
      Dead code. · 640986be
      Chad Rosier authored
      llvm-svn: 177451
      640986be
    • Chad Rosier's avatar
      Dead code. · 5b0e91a7
      Chad Rosier authored
      llvm-svn: 177450
      5b0e91a7
    • Jordan Rose's avatar
      [analyzer] Add a test case for diagnostic suppression on a graph with cycles. · 15a185f1
      Jordan Rose authored
      (see previous commit)
      
      llvm-svn: 177449
      15a185f1
    • Jordan Rose's avatar
      Revert "[analyzer] Do part of the work to find shortest bug paths up front." · 431e4e4d
      Jordan Rose authored
      The whole reason we were doing a BFS in the first place is because an
      ExplodedGraph can have cycles. Unfortunately, my removeErrorNode "update"
      doesn't work at all if there are cycles.
      
      I'd still like to be able to avoid doing the BFS every time, but I'll come
      back to it later.
      
      This reverts r177353 / 481fa5071c203bc8ba4f88d929780f8d0f8837ba.
      
      llvm-svn: 177448
      431e4e4d
    • Matt Kopec's avatar
      9502ac61
    • Chad Rosier's avatar
      [ms-inline asm] Move the immediate asm rewrite into the target specific · f3c04f6a
      Chad Rosier authored
      logic as a QOI cleanup.  No functional change.  Tests already in place.
      rdar://13456414
      
      llvm-svn: 177446
      f3c04f6a
    • Quentin Colombet's avatar
      Update global merge pass according to Duncan's advices: · 2393cb92
      Quentin Colombet authored
      - Remove useless includes
      - Change misleading comments
      - Move code into doFinalization
      
      llvm-svn: 177445
      2393cb92
    • Tobias Grosser's avatar
      ScopDetect: Remove some redundant semicolons · 84b81dee
      Tobias Grosser authored
      llvm-svn: 177444
      84b81dee
    • Howard Hinnant's avatar
      This is an optimization which produces improved launching time. There should... · 591ebe3c
      Howard Hinnant authored
      This is an optimization which produces improved launching time.  There should be no functionality change.  Clients should see no ABI differences.
      
      llvm-svn: 177443
      591ebe3c
    • Jakob Stoklund Olesen's avatar
      Annotate X86InstrCompiler.td with SchedRW lists. · 9bd6b8bd
      Jakob Stoklund Olesen authored
      Add a new WriteZero SchedWrite type for the common dependency-breaking
      instructions that clear a register.
      
      llvm-svn: 177442
      9bd6b8bd
    • Chad Rosier's avatar
      Test case for r177439 and r177440. · 993bd120
      Chad Rosier authored
      llvm-svn: 177441
      993bd120
    • Chad Rosier's avatar
      [ms-inline asm] Remove the brackets from X86Operand in the IR. These will be · 17d37993
      Chad Rosier authored
      added back in by X86AsmPrinter::printIntelMemReference() during codegen.
      Previously, this following example
      
        void t() {
          int i;
          __asm mov eax, [i]
        }
      
      would generate the below assembly
      
        mov eax, dword ptr [[eax]]
      
      which resulted in a fatal error when compiling.  Test case coming on the
      clang side.
      rdar://13444264
      
      llvm-svn: 177440
      17d37993
    • Chad Rosier's avatar
      [ms-inline asm] Create a helper function, CreateMemForInlineAsm, that creates · 7ca135b2
      Chad Rosier authored
      an X86Operand, but also performs a Sema lookup and adds the sizing directive
      when appropriate.  Use this when parsing a bracketed statement.  This is
      necessary to get the instruction matching correct as well.  Test case coming
      on clang side.
      rdar://13455408
      
      llvm-svn: 177439
      7ca135b2
    • Tobias Grosser's avatar
      IndependentBlocks: Add a couple of test cases. · d2fbbf0f
      Tobias Grosser authored
      llvm-svn: 177438
      d2fbbf0f
    • Bill Wendling's avatar
      Register the GCOV writeout functions so that they're emitted serially. · 04d57c7b
      Bill Wendling authored
      We don't want to write out >1000 files at the same time. That could make things
      prohibitively expensive. Instead, register the "writeout" function so that it's
      emitted serially.
      <rdar://problem/12439551>
      
      llvm-svn: 177437
      04d57c7b
    • Bill Wendling's avatar
      Add a way to register and execute "writeout" functions. · e647659d
      Bill Wendling authored
      It may be prohibitively expensive to write out >1000 files at the same time. So
      we would rather emit them serially. These functions allow the GCOV
      implementation to register the functions that writeout the GCOV information per
      compile unit. At exit, they are written.
      <rdar://problem/12439551>
      
      llvm-svn: 177436
      e647659d
    • Fariborz Jahanian's avatar
      Objective-C [qoi]: Provide improved parse diagnostics when · 1c5d4c54
      Fariborz Jahanian authored
      closing rbrace is missing in an ObjC class declaration.
      Can do beter than this, but it involves addition of
      overhead which will be present in correct code.
      // rdar://6854840
      
      llvm-svn: 177435
      1c5d4c54
    • Hal Finkel's avatar
      Add a comment to the CodeGen/PowerPC/asym-regclass-copy.ll test · 559754a4
      Hal Finkel authored
      llvm-svn: 177434
      559754a4
    • Tobias Grosser's avatar
      ScopDetection: Add a couple of test cases · d4ff632f
      Tobias Grosser authored
      llvm-svn: 177433
      d4ff632f
    • Arnaud A. de Grandmaison's avatar
      IndVarSimplify: do not recompute an IV value outside of the loop if : · 87c473f0
      Arnaud A. de Grandmaison authored
      - it is trivially known to be used inside the loop in a way that can not be optimized away
      - there is no use outside of the loop which can take advantage of the computation hoisting
      
      llvm-svn: 177432
      87c473f0
    • Ulrich Weigand's avatar
      Add missing mayLoad flag to LHAUX8 and LWAUX. · 01dd4c1a
      Ulrich Weigand authored
      All pre-increment load patterns need to set the mayLoad flag (since
      they don't provide a DAG pattern).
      
      This was missing for LHAUX8 and LWAUX, which is added by this patch.
      
      llvm-svn: 177431
      01dd4c1a
    • Ulrich Weigand's avatar
      Rewrite LHAU8 pattern to use standard memory operand. · f8030096
      Ulrich Weigand authored
      As opposed to to pre-increment store patterns, the pre-increment
      load patterns were already using standard memory operands, with
      the sole exception of LHAU8.
      
      As there's no real reason why LHAU8 should be different here,
      this patch simply rewrites the pattern to also use a memri
      operand, just like all the other patterns.
      
      llvm-svn: 177430
      f8030096
    • Ulrich Weigand's avatar
      Rewrite pre-increment store patterns to use standard memory operands. · d850167a
      Ulrich Weigand authored
      Currently, pre-increment store patterns are written to use two separate
      operands to represent address base and displacement:
      
        stwu $rS, $ptroff($ptrreg)
      
      This causes problems when implementing the assembler parser, so this
      commit changes the patterns to use standard (complex) memory operands
      like in all other memory access instruction patterns:
      
        stwu $rS, $dst
      
      To still match those instructions against the appropriate pre_store
      SelectionDAG nodes, the patch uses the new feature that allows a Pat
      to match multiple DAG operands against a single (complex) instruction
      operand.
      
      Approved by Hal Finkel.
      
      llvm-svn: 177429
      d850167a
    • Ulrich Weigand's avatar
      Extend TableGen instruction selection matcher to improve handling · e618abd6
      Ulrich Weigand authored
      of complex instruction operands (e.g. address modes).
      
      Currently, if a Pat pattern creates an instruction that has a complex
      operand (i.e. one that consists of multiple sub-operands at the MI
      level), this operand must match a ComplexPattern DAG pattern with the
      correct number of output operands.
      
      This commit extends TableGen to alternatively allow match a complex
      operands against multiple separate operands at the DAG level.
      
      This allows using Pat patterns to match pre-increment nodes like
      pre_store (which must have separate operands at the DAG level) onto
      an instruction pattern that uses a multi-operand memory operand,
      like the following example on PowerPC (will be committed as a
      follow-on patch):
      
        def STWU  : DForm_1<37, (outs ptr_rc:$ea_res), (ins GPRC:$rS, memri:$dst),
                          "stwu $rS, $dst", LdStStoreUpd, []>,
                          RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
      
        def : Pat<(pre_store GPRC:$rS, ptr_rc:$ptrreg, iaddroff:$ptroff),
                  (STWU GPRC:$rS, iaddroff:$ptroff, ptr_rc:$ptrreg)>;
      
      Here, the pair of "ptroff" and "ptrreg" operands is matched onto the
      complex operand "dst" of class "memri" in the "STWU" instruction.
      
      Approved by Jakob Stoklund Olesen.
      
      llvm-svn: 177428
      e618abd6
    • Ulrich Weigand's avatar
      Fix sub-operand size mismatch in tocentry operands. · fd24544f
      Ulrich Weigand authored
      The tocentry operand class refers to 64-bit values (it is only used in 64-bit,
      where iPTR is a 64-bit type), but its sole suboperand is designated as 32-bit
      type.  This causes a mismatch to be detected at compile-time with the TableGen
      patch I'll check in shortly.
      
      To fix this, this commit changes the suboperand to a 64-bit type as well.
      
      llvm-svn: 177427
      fd24544f
    • Ulrich Weigand's avatar
      Remove an invalid and unnecessary Pat pattern from the X86 backend: · 80d9ad39
      Ulrich Weigand authored
        def : Pat<(load (i64 (X86Wrapper tglobaltlsaddr :$dst))),
                  (MOV64rm tglobaltlsaddr :$dst)>;
      
      This pattern is invalid because the MOV64rm instruction expects a
      source operand of type "i64mem", which is a subclass of X86MemOperand
      and thus actually consists of five MI operands, but the Pat provides
      only a single MI operand ("tglobaltlsaddr" matches an SDnode of
      type ISD::TargetGlobalTLSAddress and provides a single output).
      
      Thus, if the pattern were ever matched, subsequent uses of the MOV64rm
      instruction pattern would access uninitialized memory.  In addition,
      with the TableGen patch I'm about to check in, this would actually be
      reported as a build-time error.
      
      Fortunately, the pattern does in fact never match, for at least two
      independent reasons.
      
      First, the code generator actually never generates a pattern of the
      form (load (X86Wrapper (tglobaltlsaddr))).  For most combinations of
      TLS and code models, (tglobaltlsaddr) represents just an offset that
      needs to be added to some base register, so it is never directly
      dereferenced.  The only exception is the initial-exec model, where
      (tglobaltlsaddr) refers to the (pc-relative) address of a GOT slot,
      which *is* in fact directly dereferenced: but in that case, the
      X86WrapperRIP node is used, not X86Wrapper, so the Pat doesn't match.
      
      Second, even if some patterns along those lines *were* ever generated,
      we should not need an extra Pat pattern to match it.  Instead, the
      original MOV64rm instruction pattern ought to match directly, since
      it uses an "addr" operand, which is implemented via the SelectAddr
      C++ routine; this routine is supposed to accept the full range of
      input DAGs that may be implemented by a single mov instruction,
      including those cases involving ISD::TargetGlobalTLSAddress (and
      actually does so e.g. in the initial-exec case as above).
      
      To avoid build breaks (due to the above-mentioned error) after the
      TableGen patch is checked in, I'm removing this Pat here.
      
      llvm-svn: 177426
      80d9ad39
    • Greg Clayton's avatar
    • Andy Gibbs's avatar
      Fix "control reaches end of non-void function" compiling lld on gcc. · 1fb8ce40
      Andy Gibbs authored
      llvm-svn: 177424
      1fb8ce40
    • Hal Finkel's avatar
      Prepare to make r0 an allocatable register on PPC · 638a9fa4
      Hal Finkel authored
      Currently the PPC r0 register is unconditionally reserved. There are two reasons
      for this:
      
       1. r0 is treated specially (as the constant 0) by certain instructions, and so
          cannot be used with those instructions as a regular register.
      
       2. r0 is used as a temporary register in the CR-register spilling process
          (where, under some circumstances, we require two GPRs).
      
      This change addresses the first reason by introducing a restricted register
      class (without r0) for use by those instructions that treat r0 specially. These
      register classes have a new pseudo-register, ZERO, which represents the r0-as-0
      use. This has the side benefit of making the existing target code simpler (and
      easier to understand), and will make it clear to the register allocator that
      uses of r0 as 0 don't conflict will real uses of the r0 register.
      
      Once the CR spilling code is improved, we'll be able to allocate r0.
      
      Adding these extra register classes, for some reason unclear to me, causes
      requests to the target to copy 32-bit registers to 64-bit registers. The
      resulting code seems correct (and causes no test-suite failures), and the new
      test case covers this new kind of asymmetric copy.
      
      As r0 is still reserved, no functionality change intended.
      
      llvm-svn: 177423
      638a9fa4
Loading