Skip to content
  1. May 23, 2018
    • Lei Huang's avatar
      [Power9]Legalize and emit code for W vector extract and convert to QP · 8b0da65b
      Lei Huang authored
      Implemente patterns to extract [Un]signed Word vector element and convert to
      quad-precision.
      
      Differential Revision: https://reviews.llvm.org/D46536
      
      llvm-svn: 333115
      8b0da65b
    • Lei Huang's avatar
      [Power9]Legalize and emit code for DW vector extract and convert to QP · 8990168a
      Lei Huang authored
      Implemente patterns to extract [Un]signed DWord vector element and convert to
      quad-precision.
      
      Differential Revision: https://reviews.llvm.org/D46333
      
      llvm-svn: 333112
      8990168a
    • Changpeng Fang's avatar
      StructurizeCFG: Adjust the loop depth for a subregion to order the nodes correctly · 5f915461
      Changpeng Fang authored
      Summary:
        StructurizeCFG::orderNodes basically uses a reverse post-order (RPO) traversal of the region list to get the order.
      The only problem with it is that sometimes backedges for outer loops will be visited before backedges for inner loops.
      To solve this problem, a loop depth based approach has been used to make sure all blocks in this loop has been visited
      before moving on to outer loop.
      
      However, we found a problem for a SubRegion which is a loop itself:
      
      --> BB1 --> BB2 --> BB3 -->
      
      In this case, BB2 is a SubRegion (loop), and thus its loopdepth is different than that of BB1 and BB3. This fact will lead
      BB2 to be placed in the wrong order.
      
      In this work, we treat the SubRegion as a special case and use its exit block to determine the loop and its depth
      to guard the sorting.
      
      Reviewers:
        arsenm, jlebar
      
      Differential Revision:
        https://reviews.llvm.org/D46912
      
      llvm-svn: 333111
      5f915461
    • Chad Rosier's avatar
      [CodeGen][AArch64] Use RegUnits to track register aliases. (NFC) · 3f663631
      Chad Rosier authored
      Use RegUnits to track register aliases in AArch64RedundantCopyElimination.
      
      Differential Revision: https://reviews.llvm.org/D47269
      
      llvm-svn: 333107
      3f663631
    • Roman Lebedev's avatar
      [InstCombine] Fold unfolded masked merge pattern with variable mask! · 6b6c553b
      Roman Lebedev authored
      Summary:
      Finally fixes [[ https://bugs.llvm.org/show_bug.cgi?id=6773 | PR6773 ]].
      
      Now that the backend is all done, we can finally fold it!
      
      The canonical unfolded masked merge pattern is
      ```(x &  m) | (y & ~m)```
      There is a second, equivalent variant:
      ```(x | ~m) & (y |  m)```
      Only one of them (the or-of-and's i think) is canonical.
      And if the mask is not a constant, we should fold it to:
      ```((x ^ y) & M) ^ y```
      
      https://rise4fun.com/Alive/ndQw
      
      Reviewers: spatel, craig.topper
      
      Reviewed By: spatel
      
      Subscribers: nicholas, RKSimon, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D46814
      
      llvm-svn: 333106
      6b6c553b
    • Jakub Kuderski's avatar
      [Dominators] Add PDT constructor from Function · ef33edd9
      Jakub Kuderski authored
      Summary: This patch adds a PDT constructor from Function and lets codes previously using a local class to do this use PostDominatorTree class directly.
      
      Reviewers: davide, kuhar, grosser, dberlin
      
      Reviewed By: kuhar
      
      Author: NutshellySima
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D46709
      
      llvm-svn: 333102
      ef33edd9
    • Craig Topper's avatar
    • Petar Jovanovic's avatar
      Silence warnings introduced with r333093 · 7d37bb42
      Petar Jovanovic authored
      r333093 introduced several warnings (-Wlogical-not-parentheses,
      -Wbool-compare).
      Adding parentheses in MipsSEInstrInfo::isCopyInstr() to silence it.
      
      llvm-svn: 333097
      7d37bb42
    • Petar Jovanovic's avatar
      [X86][MIPS][ARM] New machine instruction property 'isMoveReg' · c051000b
      Petar Jovanovic authored
      This property is needed in order to follow values movement between
      registers. This property is used in TII to implement method that
      returns true if simple copy like instruction is recognized, along
      with source and destination machine operands.
      
      Patch by Nikola Prica.
      
      Differential Revision: https://reviews.llvm.org/D45204
      
      llvm-svn: 333093
      c051000b
    • Nicola Zaghen's avatar
      Remove DEBUG macro. · 03d0b91f
      Nicola Zaghen authored
      Now that the LLVM_DEBUG() macro landed on the various sub-projects
      the DEBUG macro can be removed.
      Also change the new uses of DEBUG to LLVM_DEBUG.
      
      Differential Revision: https://reviews.llvm.org/D46952
      
      llvm-svn: 333091
      03d0b91f
    • Alex Bradbury's avatar
      [RISCV] Add symbol diff relocation support for RISC-V · 257d5b56
      Alex Bradbury authored
      For RISC-V it is desirable to have relaxation happen in the linker once 
      addresses are known, and as such the size between two instructions/byte 
      sequences in a section could change.
      
      For most assembler expressions, this is fine, as the absolute address results 
      in the expression being converted to a fixup, and finally relocations. 
      However, for expressions such as .quad .L2-.L1, the assembler folds this down 
      to a constant once fragments are laid out, under the assumption that the 
      difference can no longer change, although in the case of linker relaxation the 
      differences can change at link time, so the constant is incorrect. One place 
      where this commonly appears is in debug information, where the size of a 
      function expression is in a form similar to the above.
      
      This patch extends the assembler to allow an AsmBackend to declare that it 
      does not want the assembler to fold down this expression, and instead generate 
      a pair of relocations that allow the linker to carry out the calculation. In 
      this case, the expression is not folded, but when it comes to emitting a 
      fixup, the generic FK_Data_* fixups are converted into a pair, one for the 
      addition half, one for the subtraction, and this is passed to the relocation 
      generating methods as usual. I have named these FK_Data_Add_* and 
      FK_Data_Sub_* to indicate which half these are for.
      
      For RISC-V, which supports this via e.g. the R_RISCV_ADD64, R_RISCV_SUB64 pair 
      of relocations, these are also set to always emit relocations relative to 
      local symbols rather than section offsets. This is to deal with the fact that 
      if relocations were calculated on e.g. .text+8 and .text+4, the result 12 
      would be stored rather than 4 as both addends are added in the linker.
      
      Differential Revision: https://reviews.llvm.org/D45181
      Patch by Simon Cook.
      
      llvm-svn: 333079
      257d5b56
    • Alex Bradbury's avatar
      [Sparc] Use addAliasForDirective to support data directives · 3fa69dd0
      Alex Bradbury authored
      The Sparc asm parser currently has custom parsing logic for .half, .word, 
      .nword and .xword. Rather than use this custom logic, we can just use 
      addAliasForDirective to enable the reuse of AsmParser::parseDirectiveValue.
      
      https://reviews.llvm.org/D47003
      
      llvm-svn: 333078
      3fa69dd0
    • Alex Bradbury's avatar
      [AArch64] Use addAliasForDirective to support data directives · 0a59f189
      Alex Bradbury authored
      The AArch64 asm parser currently has custom parsing logic for .hword, .word, 
      and .xword. Rather than use this custom logic, we can just use 
      addAliasForDirective to enable the reuse of AsmParser::parseDirectiveValue.
      
      Differential Revision: https://reviews.llvm.org/D47000
      
      llvm-svn: 333077
      0a59f189
    • Alex Bradbury's avatar
      [RISCV] Correctly report sizes for builtin fixups · 1c010d0f
      Alex Bradbury authored
      This is a different approach to fixing the problem described in D46746. 
      RISCVAsmBackend currently depends on the getSize helper function returning the 
      number of bytes a fixup may change (note: some other backends have a similar 
      helper named getFixupNumKindBytes). As noted in that review, this doesn't 
      return the correct size for FK_Data_1, FK_Data_2, or FK_Data_8 meaning that 
      too few bytes will be written in the case of FK_Data_8, and there's the 
      potential of writing outside the Data array for the smaller fixups.
      
      D46746 extends getSize to recognise some of the builtin fixup types. Rather 
      than having a function that needs to be kept up to date as new builtin or 
      target-specific fixups are added, We can calculate an appropriate bound on the 
      number of bytes that might be touched using Info.TargetSize and 
      Info.TargetOffset.
      
      Differential Revision: https://reviews.llvm.org/D46965
      
      llvm-svn: 333076
      1c010d0f
    • Max Kazantsev's avatar
      [LoopUnswitch] Fix SCEV invalidation in unswitching · d99f3bac
      Max Kazantsev authored
      Loop unswitching makes substantial changes to a loop that can also affect cached
      SCEV info in its outer loops as well, but it only cares to invalidate SCEV cache for the
      innermost loop in case of full unswitching and does not invalidate anything at all in
      case of trivial unswitching. As result, we may end up with incorrect data in cache.
      
      Differential Revision: https://reviews.llvm.org/D46045
      Reviewed By: mzolotukhin
      
      llvm-svn: 333072
      d99f3bac
    • Piotr Padlewski's avatar
      Fix aliasing of launder.invariant.group · d6f7346a
      Piotr Padlewski authored
      Summary:
      Patch for capture tracking broke
      bootstrap of clang with -fstict-vtable-pointers
      which resulted in debbugging nightmare. It was fixed
      https://reviews.llvm.org/D46900 but as it turned
      out, there were other parts like inliner (computing of
      noalias metadata) that I found after bootstraping with enabled
      assertions.
      
      Reviewers: hfinkel, rsmith, chandlerc, amharc, kuhar
      
      Subscribers: JDevlieghere, eraman, llvm-commits, hiraditya
      
      Differential Revision: https://reviews.llvm.org/D47088
      
      llvm-svn: 333070
      d6f7346a
    • Daniel Cederman's avatar
      [Sparc] Add mnemonic aliases for flush, stb, stba, sth, and stha · 6356571e
      Daniel Cederman authored
      Reviewers: jyknight
      
      Reviewed By: jyknight
      
      Subscribers: fedor.sergeev, jrtc27, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47140
      
      llvm-svn: 333068
      6356571e
    • Serguei Katkov's avatar
      SafepointIRVerifier is made unreachable block tolerant · 46ef8fff
      Serguei Katkov authored
      SafepointIRVerifier crashed while traversing blocks without a DomTreeNode.
      This could happen with a custom pipeline or when some optional passes were skipped by OptBisect.
      
      SafepointIRVerifier is fixed to traverse basic blocks that are reachable from entry. Test are added.
      
      Patch Author: Yevgeny Rouban!
      Reviewers: anna, reames, dneilson, DaniilSuchkov, skatkov
      Reviewed By: reames
      Subscribers: llvm-commits
      Differential Revision: https://reviews.llvm.org/D47011
      
      llvm-svn: 333063
      46ef8fff
    • Roman Tereshin's avatar
      [GlobalISel][ARM] Adding HPR and QPR regclasses to FPRB regbank · e79d656c
      Roman Tereshin authored
      Also bringing ARMRegisterBankInfo::getRegBankFromRegClass
      implementation up to speed with the *.td-definition.
      
      Reviewed By: qcolombet
      
      Differential Revision: https://reviews.llvm.org/D43982
      
      llvm-svn: 333056
      e79d656c
    • Heejin Ahn's avatar
      [WebAssembly] Add functions for EHScopes · 1e4d3504
      Heejin Ahn authored
      Summary:
      There are functions using the term 'funclet' to refer to both
      1. an EH scopes, the structure of BBs that starts with
      catchpad/cleanuppad and ends with catchret/cleanupret, and
      2. a small function that gets outlined in AsmPrinter, which is the
      original meaning of 'funclet'.
      
      So far the two have been the same thing; EH scopes are always outlined
      in AsmPrinter as funclets at the end of the compilation pipeline. But
      now wasm also uses scope-based EH but does not outline those, so we now
      need to correctly distinguish those two use cases in functions.
      
      This patch splits `MachineBasicBlock::isFuncletEntry` into
      `isFuncletEntry` and `isEHScopeEntry`, and
      `MachineFunction::hasFunclets` into `hasFunclets` and `hasEHScopes`, in
      order to distinguish the two different use cases. And this also changes
      some uses of the term 'funclet' to 'scope' in `getFuncletMembership` and
      change the function name to `getEHScopeMembership` because this function
      is not about outlined funclets but about EH scope memberships.
      
      This change is in the same vein as D45559.
      
      Reviewers: majnemer, dschuff
      
      Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47005
      
      llvm-svn: 333045
      1e4d3504
    • Sanjay Patel's avatar
      [InstCombine] use nsw negation for abs libcalls · 4b96935b
      Sanjay Patel authored
      Also, produce the canonical IR abs (s<0) to be more efficient. 
      
      This is the libcall equivalent of the clang builtin change from:
      rL333038
      
      Pasting from that commit message:
      The stdlib functions are defined in section 7.20.6.1 of the C standard with:
      "If the result cannot be represented, the behavior is undefined."
      
      That lets us mark the negation with 'nsw' because "sub i32 0, INT_MIN" would
      be UB/poison.
      
      llvm-svn: 333042
      4b96935b
  2. May 22, 2018
    • David Bolvansky's avatar
      [InstCombine] Remove calloc transformations · 1f343fa0
      David Bolvansky authored
      Summary: Previous patch does not care if a value is changed between calloc and strlen. This needs to be removed from InstCombine and maybe moved to DSE later after some rework.
      
      Reviewers: efriedma
      
      Reviewed By: efriedma
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47218
      
      llvm-svn: 333022
      1f343fa0
    • Matt Arsenault's avatar
      AMDGPU: Fix v2f16 fneg/fabs pattern · 606bc315
      Matt Arsenault authored
      The integer operation convertion for some reason only happens
      if the source is a bitcast from an integer, which happens to
      always be the situation when the result is loaded. Add
      an additional pattern for when the source operation is really
      an FP operation.
      
      llvm-svn: 333019
      606bc315
    • Eli Friedman's avatar
      Delete unused variable from r333015. · 785acce5
      Eli Friedman authored
      (The assertion suppressed the unused variable warning on
      Release+Asserts builds, so I didn't notice.)
      
      llvm-svn: 333018
      785acce5
    • Tom Stellard's avatar
      AMDGPU: Move AMDGPUTargetLowering::isFPExtFoldable() into SITargetLowering · b12f4dec
      Tom Stellard authored
      Summary: This is always false for R600.
      
      Reviewers: arsenm, nhaehnle
      
      Reviewed By: arsenm
      
      Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47180
      
      llvm-svn: 333016
      b12f4dec
    • Eli Friedman's avatar
      [MachineOutliner] Add "thunk" outlining for AArch64. · 042dc9e0
      Eli Friedman authored
      When we're outlining a sequence that ends in a call, we can save up to
      three instructions in the outlined function by turning the call into
      a tail-call. I refer to this as thunk outlining because the resulting
      outlined function looks like a thunk; suggestions welcome for a better
      name.
      
      In addition to making the outlined function shorter, thunk outlining
      allows outlining calls which would otherwise be illegal to outline:
      we don't need to save/restore LR, so we don't need to prove anything
      about the stack access patterns of the callee.
      
      To make this work effectively, I also added
      MachineOutlinerInstrType::LegalTerminator to the generic MachineOutliner
      code; this allows treating an arbitrary instruction as a terminator in
      the suffix tree.
      
      Differential Revision: https://reviews.llvm.org/D47173
      
      llvm-svn: 333015
      042dc9e0
    • Krzysztof Parzyszek's avatar
      [Hexagon] Add patterns for accumulating HVX compares · 840b02bc
      Krzysztof Parzyszek authored
      llvm-svn: 333009
      840b02bc
    • Florian Hahn's avatar
      [NewGVN] Fix handling of assumes · a6e63f17
      Florian Hahn authored
      This patch fixes two bugs:
      
      * test1: Previously assume(a >= 5) concluded that a == 5. That's only
               valid for assume(a == 5)...
      * test2: If operands were swapped, additional users were added to the
               wrong cmp operand. This resulted in an "unsettled iteration"
               assertion failure.
      
      Patch by Nikita Popov
      
      Differential Revision: https://reviews.llvm.org/D46974
      
      llvm-svn: 333007
      a6e63f17
    • Jonas Devlieghere's avatar
      [DebugInfo] Invert DIE order for range errors. · 63eca15e
      Jonas Devlieghere authored
      When printing an error for an invalid address range in a DIE, we used to
      print the child above the parent, which is counter intuitive. This patch
      reverses the order and indents the child to mimic the way we print the
      debug info section.
      
      llvm-svn: 333006
      63eca15e
    • Jonas Devlieghere's avatar
      [DebugInfo] Fix location list check in the verifier · 7e0b0233
      Jonas Devlieghere authored
      We weren't properly verifying location lists because we tried obtaining
      the offset as a constant.
      
      llvm-svn: 333005
      7e0b0233
    • Paul Robinson's avatar
      [DWARFv5] Put the DWO ID in its place. · 543c0e1d
      Paul Robinson authored
      In DWARF v5, the DWO ID is in the (split/skeleton) CU header, not an
      attribute on the CU DIE.
      
      This changes the size of those headers, so use the parsed size whenever
      we have one, for simplicitly.
      
      Differential Revision: https://reviews.llvm.org/D47158
      
      llvm-svn: 333004
      543c0e1d
    • Lang Hames's avatar
      [ORC] Move symbol-scanning and discard from BasicIRLayerMaterializationUnit in · 5261aa9f
      Lang Hames authored
      to a base class (IRMaterializationUnit).
      
      The new class, IRMaterializationUnit, provides a convenient base for any client
      that wants to write a materializer for LLVM IR.
      
      llvm-svn: 332993
      5261aa9f
    • David Bolvansky's avatar
      [InstCombine] Calloc-ed strings optimizations · 41f4b64e
      David Bolvansky authored
      Summary:
      Example cases:
      strlen(calloc(...)) -> 0
      
      Reviewers: efriedma, bkramer
      
      Reviewed By: bkramer
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47059
      
      llvm-svn: 332990
      41f4b64e
    • Aleksandar Beserminji's avatar
      [mips] Merge MipsLongBranch and MipsHazardSchedule passes · a5f75518
      Aleksandar Beserminji authored
      MipsLongBranchPass and MipsHazardSchedule passes are joined to one pass
      because of mutual conflict. When MipsHazardSchedule inserts 'nop's, it
      potentially breaks some jumps, so they have to be expanded to long
      branches. When some branch is expanded to long branch, it potentially
      creates a hazard situation, which should be fixed by adding nops.
      New pass is called MipsBranchExpansion, it combines these two passes,
      and runs them alternately until one of them reports no changes were made.
      
      Differential Revision: https://reviews.llvm.org/D46641
      
      llvm-svn: 332977
      a5f75518
    • Simon Dardis's avatar
      [mips] Correct the predicates of the cache and pref instructions · 437153bb
      Simon Dardis authored
      Reviewers: atanasyan, abeserminji, smaksimovic
      
      Differential Revision: https://reviews.llvm.org/D46949
      
      llvm-svn: 332970
      437153bb
    • Simon Pilgrim's avatar
      [TTI] Add uniform/non-uniform constant Pow2 detection to... · 4162d777
      Simon Pilgrim authored
      [TTI] Add uniform/non-uniform constant Pow2 detection to TargetTransformInfo::getInstructionThroughput
      
      This enables us to detect more fast path sdiv cases under cost analysis.
      
      This patch also enables us to handle non-uniform-constant pow2 cases for X86 SDIV costs.
      
      Found while working on D46276
      
      Future patches can then extend the vectorizers to more fully support non-uniform pow2 cases.
      
      Differential Revision: https://reviews.llvm.org/D46637
      
      llvm-svn: 332969
      4162d777
    • Karl-Johan Karlsson's avatar
      [LowerSwitch] Fixed faulty PHI node update · 11d68a61
      Karl-Johan Karlsson authored
      Summary:
      When lowerswitch merge several cases into a new default block it's not
      updating the PHI nodes accordingly. The code that update the PHI nodes
      for the default edge only update the first entry and do not remove the
      remaining ones, to make sure the number of entries match the number of
      predecessors.
      
      This is easily fixed by replacing the code that update the PHI node with
      the already existing utility function for updating PHI nodes.
      
      Reviewers: hans, reames, arsenm
      
      Reviewed By: arsenm
      
      Subscribers: wdng, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47055
      
      llvm-svn: 332960
      11d68a61
    • Bjorn Pettersson's avatar
      [LoopVersioning] Don't modify the list that we iterate over in addPHINodes · fecef6be
      Bjorn Pettersson authored
      Summary:
      In LoopVersioning::addPHINodes we need to iterate over all
      users for a value "Inst", and if the user is outside of the
      VersionedLoop we should replace the use of "Inst" by using
      the value "PN" instead.
      
      Replacing the use of "Inst" for a user of "Inst" also means
      that Inst->users() is modified. So it is not safe to do the
      replace while iterating over Inst->users() as we used to do.
      This patch splits the task into two steps. First we iterate
      over Inst->users() to find all users that should be updated.
      Those users are saved into a local data structure on the stack.
      And then, in the second step, we do the actual updates. This
      time iterating over the local data structure.
      
      Reviewers: mzolotukhin, anemet
      
      Reviewed By: mzolotukhin
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D47134
      
      llvm-svn: 332958
      fecef6be
    • Stanislav Mekhanoshin's avatar
      [AMDGPU] Optimze old value of v_mov_b32_dpp · 0e132dca
      Stanislav Mekhanoshin authored
      We can eliminate old value if bound_ctrl = 1 and row_mask = bank_mask = 0xf.
      This is alternative implementation working with the intrinsic in InstCombine.
      Original review for past-ISel optimization: D46570.
      
      Differential Revision: https://reviews.llvm.org/D46596
      
      llvm-svn: 332956
      0e132dca
    • Matt Arsenault's avatar
      AMDGPU: Make v2i16/v2f16 legal on VI · 1349a04e
      Matt Arsenault authored
      This usually results in better code. Fixes using
      inline asm with short2, and also fixes having a different
      ABI for function parameters between VI and gfx9.
      
      Partially cleans up the mess used for lowering of the d16
      operations. Making v4f16 legal will help clean this up more,
      but this requires additional work.
      
      llvm-svn: 332953
      1349a04e
Loading