Skip to content
  1. Mar 13, 2018
    • Eugene Leviant's avatar
      [Evaluator] Evaluate load/store with bitcast · 6f42a2cd
      Eugene Leviant authored
      Differential revision: https://reviews.llvm.org/D43457
      
      llvm-svn: 327381
      6f42a2cd
    • Pavel Labath's avatar
      Fix clang-3.8 build · cd3cbd4c
      Pavel Labath authored
      clang-3.8 complains that constructor for '...' must explicitly
      initialize the const member. Newer clangs and gcc seem to be fine with
      this, but explicitly initializing the member does not hurt.
      
      llvm-svn: 327380
      cd3cbd4c
    • Pavel Labath's avatar
      Fix linux s390x build (pr36694) · 01961c4b
      Pavel Labath authored
      llvm-svn: 327379
      01961c4b
    • George Rimar's avatar
      [ELF] - Implement INSERT BEFORE. · 796684b4
      George Rimar authored
      This finishes PR35877.
      
      INSERT BEFORE used similar to INSERT AFTER,
      it inserts sections before the given target section.
      
      Differential revision: https://reviews.llvm.org/D44380
      
      llvm-svn: 327378
      796684b4
    • George Rimar's avatar
      [ELF] - Fix wrong "REQUIRES" in test. · ebc1d1fd
      George Rimar authored
      Its a follow up for r327374 to fix BB.
      
      llvm-svn: 327377
      ebc1d1fd
    • George Rimar's avatar
      [ELF] - Restrict section offsets that exceeds file size. · 23130867
      George Rimar authored
      This is part of PR36515.
      
      With some linkerscripts it is possible to get file offset overlaps
      and overflows. Currently LLD checks overlaps in checkNoOverlappingSections().
      And also we allow broken output with --no-inhibit-exec.
      Problem is that sometimes final offset of sections is completely broken
      and we calculate output file size wrong and might crash.
      
      Patch implements check to verify that there is no output section
      which offset exceeds file size.
      
      Differential revision: https://reviews.llvm.org/D43819
      
      llvm-svn: 327376
      23130867
    • Jonas Paulsson's avatar
      [CodeGenPrepare] Respect endianness in splitMergedValStore. · 5612bb29
      Jonas Paulsson authored
      splitMergedValStore will split a store into two if target prefers this, or if
      -force-split-store is passed.
      
      This patch adds the missing handling for endianness in this function along
      with a test case.
      
      Review: Eli Friedman
      https://reviews.llvm.org/D44396
      
      llvm-svn: 327375
      5612bb29
    • George Rimar's avatar
      [ELF] - Drop special flags for empty output sections. · afbf90ae
      George Rimar authored
      This fixes PR36598.
      
      LLD currently crashes when we have empty output section
      with SHF_LINK_ORDER flag. This might happen if we place an 
      empty synthetic section in the linker script, but keep output
      section alive with the use of additional symbol, for example.
      
      The patch fixes the issue by dropping all special flags
      for empty sections.
      
      Differential revision: https://reviews.llvm.org/D44376
      
      llvm-svn: 327374
      afbf90ae
    • Max Kazantsev's avatar
      [SCEV][NFC] Smarter implementation of isAvailableAtLoopEntry · 2371e0a1
      Max Kazantsev authored
      isAvailableAtLoopEntry duplicates logic of `properlyDominates` after checking invariance.
      This patch replaces this logic with invocation of this method which is more profitable
      because it supports caching.
      
      Differential Revision: https://reviews.llvm.org/D43997
      
      llvm-svn: 327373
      2371e0a1
    • Clement Courbet's avatar
      [MergeICmps] Make sure that the comparison only has one use. · 9f0b3170
      Clement Courbet authored
      Summary: Fixes PR36557.
      
      Reviewers: trentxintong, spatel
      
      Subscribers: mstorsjo, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D44083
      
      llvm-svn: 327372
      9f0b3170
    • Yonghong Song's avatar
      bpf: Enhance debug information for peephole optimization passes · 82bf8bcb
      Yonghong Song authored
      
      
      Add more debug information for peephole optimization passes.
      
      These would only be enabled for debug version binary and could help
      analyzing why some optimization opportunities were missed.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327371
      82bf8bcb
    • Yonghong Song's avatar
      bpf: New post-RA peephole optimization pass to eliminate bad RA codegen · e91802f3
      Yonghong Song authored
      
      
      This new pass eliminate identical move:
      
        MOV rA, rA
      
      This is particularly possible to happen when sub-register support
      enabled. The special type cast insn MOV_32_64 involves different
      register class on src (i32) and dst (i64), RA could generate useless
      instruction due to this.
      
      This pass also could serve as the bast for further post-RA optimization.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327370
      e91802f3
    • Yonghong Song's avatar
      bpf: Don't expand BSWAP on i32, promote it · 80b882ec
      Yonghong Song authored
      
      
      Currently, there is no ALU32 bswap support in eBPF ISA.
      
      BSWAP on i32 was set to EXPAND which would need about eight instructions
      for single BSWAP.
      
      It would be more efficient to promote it to i64, then doing BSWAP on i64.
      For eBPF programs, most of the promotion are zero extensions which are
      likely be elimiated later by peephole optimizations.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327369
      80b882ec
    • Yonghong Song's avatar
      bpf: Support subregister definition check on PHI node · 1d28a759
      Yonghong Song authored
      
      
      This patch relax the subregister definition check on Phi node.
      Previously, we just cancel the optimizatoin when the definition is Phi
      node while actually we could further check the definitions of incoming
      parameters of PHI node.
      
      This helps catch more elimination opportunities.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327368
      1d28a759
    • Yonghong Song's avatar
      bpf: Extends zero extension elimination beyond comparison instructions · c88bcdec
      Yonghong Song authored
      
      
      The current zero extension elimination was restricted to operands of
      comparison. It actually could be extended to more cases.
      
      For example:
      
        int *inc_p (int *p, unsigned a)
        {
          return p + a;
        }
      
      'a' will be promoted to i64 during addition, and the zero extension could
      be eliminated as well.
      
      For the elimination optimization, it should be much better to start
      recognizing the candidate sequence from the SRL instruction instead of J*
      instructions.
      
      This patch makes it an generic zero extension elimination pass instead of
      one restricted with comparison.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327367
      c88bcdec
    • Yonghong Song's avatar
      bpf: J*_RR should check both operands · 905d13c1
      Yonghong Song authored
      
      
      There is a mistake in current code that we "break" out the optimization
      when the first operand of J*_RR doesn't qualify the elimination. This
      caused some elimination opportunities missed, for example the one in the
      testcase.
      
      The code should just fall through to handle the second operand.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327366
      905d13c1
    • Yonghong Song's avatar
      bpf: Tighten subregister definition check · 89e47ac6
      Yonghong Song authored
      
      
      The current subregister definition check stops after the MOV_32_64
      instruction.
      
      This means we are thinking all the following instruction sequences
      are safe to be eliminated:
      
        MOV_32_64 rB, wA
        SLL_ri    rB, rB, 32
        SRL_ri    rB, rB, 32
      
      However, this is *not* true. The source subregister wA of MOV_32_64 could
      come from a implicit truncation of 64-bit register in which case the high
      bits of the 64-bit register is not zeroed, therefore we can't eliminate
      above sequence.
      
      For example, for i32_val, we shouldn't do the elimination:
      
        long long bar ();
      
        int foo (int b, int c)
        {
          unsigned int i32_val = (unsigned int) bar();
      
          if (i32_val < 10)
            return b;
          else
            return c;
        }
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327365
      89e47ac6
    • Yonghong Song's avatar
      bpf: Add more check directives in peephole testcase · fddb9f4e
      Yonghong Song authored
      
      
      Improve the test accuracy by adding more check directives.
      
      Shifts are expected to be eliminated for zero extension but not for signed
      extension.
      
      Signed-off-by: default avatarJiong Wang <jiong.wang@netronome.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      llvm-svn: 327364
      fddb9f4e
    • Serguei Katkov's avatar
      Revert [SCEV] Fix isKnownPredicate · bbfbf21d
      Serguei Katkov authored
      It is a revert of rL327362 which causes build bot failures with assert like
      
      Assertion `isAvailableAtLoopEntry(RHS, L) && "RHS is not available at Loop Entry"' failed.
      
      llvm-svn: 327363
      bbfbf21d
    • Serguei Katkov's avatar
      [SCEV] Fix isKnownPredicate · b05574c0
      Serguei Katkov authored
      IsKnownPredicate is updated to implement the following algorithm
      proposed by @sanjoy and @mkazantsev :
      isKnownPredicate(Pred, LHS, RHS) {
        Collect set S all loops on which either LHS or RHS depend.
        If S is non-empty
          a. Let PD be the element of S which is dominated by all other elements of S
          b. Let E(LHS) be value of LHS on entry of PD.
             To get E(LHS), we should just take LHS and replace all AddRecs that
             are attached to PD on with their entry values.
             Define E(RHS) in the same way.
          c. Let B(LHS) be value of L on backedge of PD.
             To get B(LHS), we should just take LHS and replace all AddRecs that
             are attached to PD on with their backedge values.
             Define B(RHS) in the same way.
          d. Note that E(LHS) and E(RHS) are automatically available on entry of PD,
             so we can assert on that.
          e. Return true if isLoopEntryGuardedByCond(Pred, E(LHS), E(RHS)) &&
                            isLoopBackedgeGuardedByCond(Pred, B(LHS), B(RHS))
      Return true if Pred, L, R is known from ranges, splitting etc.
      }
      This is follow-up for https://reviews.llvm.org/D42417.
      
      Reviewers: sanjoy, mkazantsev, reames
      Reviewed By: sanjoy, mkazantsev
      Subscribers: llvm-commits
      Differential Revision: https://reviews.llvm.org/D43507
      
      llvm-svn: 327362
      b05574c0
    • Mandeep Singh Grang's avatar
      [polly] Change std::sort to llvm::sort in response to r327219 · daec0aa7
      Mandeep Singh Grang authored
      Summary:
      r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
      This will help in uncovering non-determinism caused due to undefined sorting
      order of objects having the same key.
      
      To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.
      
      Reviewers: grosser, efriedma, jdoerfert, bollu, sebpop
      
      Reviewed By: sebpop
      
      Subscribers: sebpop, mehdi_amini, llvm-commits, pollydev
      
      Tags: #polly
      
      Differential Revision: https://reviews.llvm.org/D44361
      
      llvm-svn: 327361
      daec0aa7
    • Vlad Tsyrklevich's avatar
      Reland r327041: [ThinLTO] Keep available_externally symbols live · aab60006
      Vlad Tsyrklevich authored
      Summary:
      This change fixes PR36483. The bug was originally introduced by a change
      that marked non-prevailing symbols dead. This broke LowerTypeTests
      handling of available_externally functions, which are non-prevailing.
      LowerTypeTests uses liveness information to avoid emitting thunks for
      unused functions.
      
      Marking available_externally functions dead is incorrect, the functions
      are used though the function definitions are not. This change keeps them
      live, and lets the EliminateAvailableExternally/GlobalDCE passes remove
      them later instead.
      
      (Reland with a suspected fix for a unit test failure I haven't been able
      to reproduce locally)
      
      Reviewers: pcc, tejohnson
      
      Reviewed By: tejohnson
      
      Subscribers: grimar, mehdi_amini, inglorion, eraman, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D43690
      
      llvm-svn: 327360
      aab60006
    • Adam Nemet's avatar
      [LTO] Return proper error object rather than null LTOModule · ade40dd3
      Adam Nemet authored
      This caused a crash in LTOModule::createInLocalContext.
      
      rdar://37926841
      
      llvm-svn: 327359
      ade40dd3
    • Taewook Oh's avatar
      [ThinLTO] Add funtions in callees metadata to CallGraphEdges · 7646e779
      Taewook Oh authored
      Summary:
      If there's a callees metadata attached to the indirect call instruction, add CallGraphEdges to the callees mentioned in the metadata when computing FunctionSummary.
      
      * Why this is necessary:
      Consider following code example:
      ```
      (foo.c)
      static int f1(int x) {...}
      static int f2(int x);
      static int (*fptr)(int) = f2;
      static int f2(int x) {
        if (x) fptr=f1; return f1(x);
      }
      int foo(int x) {
        (*fptr)(x); // !callees metadata of !{i32 (i32)* @f1, i32 (i32)* @f2} would be attached to this call.
      }
      
      (bar.c)
      int bar(int x) {
        return foo(x);
      }
      ```
      
      At LTO time when `foo.o` is imported into `bar.o`, function `foo` might be inlined into `bar` and PGO-guided indirect call promotion will run after that. If the profile data tells that the promotion of `@f1` or `@f2` is beneficial, the optimizer will check if the "promoted" `@f1` or `@f2` (such as `@f1.llvm.0` or `@f2.llvm.0`) is available. Without this patch, importing `!callees` metadata would only add promoted declarations of `@f1` and `@f2` to the `bar.o`, but still the optimizer will assume that the function is available and perform the promotion. The result of that is link failure with `undefined reference to @f1.llvm.0`.
      
      This patch fixes this problem by adding callees in the `!callees` metadata to CallGraphEdges so that their definition would be properly imported into.
      
      One may ask that there already is a logic to add indirect call promotion targets to be added to CallGraphEdges. However, if profile data says "indirect call promotion is only beneficial under a certain inline context", the logic wouldn't work. In the code example above, if profile data is like
      ```
      bar:1000000:100000
        1:100000
          1: foo:100000
              1: 100000 f1:100000
      ```
      , Computing FunctionSummary for `foo.o` wouldn't add `foo->f1` to CallGraphEdges. (Also, it is at least "possible" that one can provide profile data to only link step but not to compilation step).
      
      Reviewers: tejohnson, mehdi_amini, pcc
      
      Reviewed By: tejohnson
      
      Subscribers: inglorion, eraman, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D44399
      
      llvm-svn: 327358
      7646e779
    • Rafael Espindola's avatar
      Use PLT relocations in test. · 33a28363
      Rafael Espindola authored
      Currently lld creates plain plt entries when a R_386_PC32 resolves to
      a symbol in a shared library. That is a bug (PR36678). Don't depend on
      that behavior on this test.
      
      llvm-svn: 327357
      33a28363
    • Davide Italiano's avatar
      [ExpressionParser] Fix crash when evaluating invalid expresssions. · d5bbaa66
      Davide Italiano authored
      Typical example, illformed comparisons (operator== where LHS and
      RHS are not compatible). If a symbol matched `operator==` in any
      of the object files lldb inserted a generic function declaration
      in the ASTContext on which Sema operates. Maintaining the AST
      context invariants is fairly tricky and sometimes resulted in
      crashes inside clang (or assertions hit).
      
      The real reason why this feature exists in the first place is
      that of allowing users to do something like:
      (lldb) call printf("patatino")
      
      even if the debug informations for printf() is not available.
      Eventually, we might reconsider this feature in its
      entirety, but for now we can't remove it as it would break
      a bunch of users. Instead, try to limit it to non-C++ symbols,
      where getting the invariants right is hopefully easier.
      
      Now you can't do in lldb anymore
      (lldb) call _Zsomethingsomething(1,2,3)
      
      but that doesn't seem to be such a big loss.
      
      <rdar://problem/35645893>
      
      llvm-svn: 327356
      d5bbaa66
    • Craig Topper's avatar
      [LegalizeTypes] In SplitVecOp_TruncateHelper, use GetSplitVector on the input... · 80058e30
      Craig Topper authored
      [LegalizeTypes] In SplitVecOp_TruncateHelper, use GetSplitVector on the input instead of creating new extract_subvectors.
      
      llvm-svn: 327355
      80058e30
    • Douglas Yung's avatar
      512aae25
    • Alexander Shaposhnikov's avatar
      [lld] Fix comdat tests · f59ab35b
      Alexander Shaposhnikov authored
      This diff adjusts the comdat tests after changing the format
      of llvm-readobj output for .group sections.
      
      llvm-svn: 327353
      f59ab35b
    • Artem Dergachev's avatar
      [CFG] [analyzer] Don't add construction context to a return-by-reference call. · 54ed6428
      Artem Dergachev authored
      Call expressions that return objects by an lvalue reference or an rvalue
      reference have a value type in the AST but wear an auxiliary flag of being an
      lvalue or an xvalue respectively.
      
      Use the helper method for obtaining the actual return type of the function.
      
      Fixes a crash.
      
      Differential Revision: https://reviews.llvm.org/D44273
      
      llvm-svn: 327352
      54ed6428
    • Saleem Abdulrasool's avatar
      ObjCARC: address review comments from majnemer · f159a389
      Saleem Abdulrasool authored
      I forgot to incorporate these comments into the original revision.  This
      is just code cleanup addressing the feedback, NFC.
      
      llvm-svn: 327351
      f159a389
    • Davide Italiano's avatar
      [lit] `llvm-mc` is now a dependency to run tests. · 65c3ccc6
      Davide Italiano authored
      llvm-svn: 327350
      65c3ccc6
    • Alexander Shaposhnikov's avatar
      [llvm] Fix mc tests · 759cdada
      Alexander Shaposhnikov authored
      This diff adjusts the mc tests after changing the format
      of llvm-readobj output for .group sections.
      
      llvm-svn: 327349
      759cdada
    • Artem Dergachev's avatar
      [analyzer] Support temporaries conjured by conservatively evaluated functions. · 09a7c0c7
      Artem Dergachev authored
      Properly perform destruction and lifetime extension of such temporaries.
      
      C++ object-type return values of conservatively evaluated functions are now
      represented as compound values of well-defined temporary object regions. The
      function creates a region that represents the temporary object and will later
      be used for destruction or materialization, invalidates it, and returns the
      invalidated compound value of the object.
      
      Differential Revision: https://reviews.llvm.org/D44131
      
      llvm-svn: 327348
      09a7c0c7
    • Artem Dergachev's avatar
      98a24bf7
    • Julie Hockett's avatar
      Revert "Reland "[clang-doc] Setup clang-doc frontend framework"" · 729d9f86
      Julie Hockett authored
      This reverts commit r327295 since it was causing the Windows bots to
      fail.
      
      llvm-svn: 327346
      729d9f86
    • Artem Dergachev's avatar
      [analyzer] Destroy and lifetime-extend inlined function return values properly. · e0789678
      Artem Dergachev authored
      This patch uses the newly added CFGCXXRecordTypedCall element at the call site
      of the caller to construct the return value within the callee directly into the
      caller's stack frame. This way it is also capable of populating the temporary
      destructor and lifetime extension maps for the temporary, which allows
      temporary destructors and lifetime extension to work correctly.
      
      This patch does not affect temporaries that were returned from conservatively
      evaluated functions.
      
      Differential Revision: https://reviews.llvm.org/D44124
      
      llvm-svn: 327345
      e0789678
    • Sam McCall's avatar
      [clangd] Remove Tagged and some related APIs from ClangdServer. · a7bb0cc0
      Sam McCall authored
      Context can do what Tagged was intended to support (snapshot filesystems),
      and less intrusively.
      getTaggedFileSystem() no longer needs a filename.
      
      Cleanups while here:
       - code-complete now returns errors as Expected, like other functions
       - added an alias Callback<T> for the usual callback function type
      
      llvm-svn: 327344
      a7bb0cc0
    • Artem Dergachev's avatar
      [CFG] [analyzer] Add construction context to C++ return-by-value call elements. · 1527dec1
      Artem Dergachev authored
      This patch adds a new CFGStmt sub-class, CFGCXXRecordTypedCall, which replaces
      the regular CFGStmt for the respective CallExpr whenever the CFG has additional
      information to provide regarding the lifetime of the returned value.
      
      This additional call site information is represented by a ConstructionContext
      (which was previously used for CFGConstructor elements) that provides references
      to CXXBindTemporaryExpr and MaterializeTemporaryExpr that surround the call.
      
      This corresponds to the common C++ calling convention solution of providing
      the target address for constructing the return value as an auxiliary implicit
      argument during function call.
      
      One of the use cases for such extra context at the call site would be to perform
      any sort of inter-procedural analysis over the CFG that involves functions
      returning objects by value. In this case the elidable constructor at the return
      site would construct the object explained by the context at the call site, and
      its lifetime would also be managed by the caller, not the callee.
      
      The extra context would also be useful for properly handling the return-value
      temporary at the call site, even if the callee is not being analyzed
      inter-procedurally.
      
      Differential Revision: https://reviews.llvm.org/D44120
      
      llvm-svn: 327343
      1527dec1
    • Sanjay Patel's avatar
      [InstCombine] add test to show fmul transform creates extra fdiv; NFC · a71f9540
      Sanjay Patel authored
      Also, move fmul reassociation tests to the same file as other fmul transforms.
      
      llvm-svn: 327342
      a71f9540
Loading