Skip to content
  1. Dec 30, 2017
  2. Dec 29, 2017
    • Geoff Berry's avatar
      [MachineOperand] Fix LiveDebugVariables code after isRenamable change. · b3d126d6
      Geoff Berry authored
      Fix code in LiveDebugVariables that was changing def MachineOperands to
      uses, which will hit an assert for dead operands after the change to add
      the renamable bit to MachineOperands.  Avoid the assert by clearing the
      dead bit before changing the operand to a use.
      
      Fixes issue reported in out of tree target by Jesper Antonsson at Ericsson.
      
      llvm-svn: 321571
      b3d126d6
    • Matt Arsenault's avatar
      StructurizeCFG: Use phi iterator range · 8dcfa137
      Matt Arsenault authored
      llvm-svn: 321568
      8dcfa137
    • Matt Arsenault's avatar
      IR: Fix BasicBlock::phis for empty blocks · 344c0920
      Matt Arsenault authored
      llvm-svn: 321567
      344c0920
    • Simon Atanasyan's avatar
      d41feef4
    • Simon Atanasyan's avatar
      [mips] Replace assert by an error message · 970f686f
      Simon Atanasyan authored
      Initially, if the `c` constraint applied to the wrong data type that
      causes LLVM to assert. This commit replaces the assert by an error
      message.
      
      llvm-svn: 321565
      970f686f
    • Matt Arsenault's avatar
      AMDGPU: Use unique PSVs for buffer resources · e19bc2ee
      Matt Arsenault authored
      Also fixes using the wrong memory type for some
      intrinsics when custom lowering them.
      
      llvm-svn: 321557
      e19bc2ee
    • Matt Arsenault's avatar
      AMDGPU: Remove mayLoad/hasSideEffects from MIMG stores · d94b63d7
      Matt Arsenault authored
      Atomics still have hasSideEffects set on them because
      of the mess that is the memory properties.
      
      llvm-svn: 321556
      d94b63d7
    • Matt Arsenault's avatar
      AMDGPU: Implement getTgtMemIntrinsic for images · 905f3518
      Matt Arsenault authored
      Currently all images are lowered to have a single
      image PseudoSourceValue. Image stores happen to have
      overly strict mayLoad/mayStore/hasSideEffects flags
      set on them, so this happens to work. When these
      are fixed to be correct, the scheduler breaks
      this because the identical PSVs are assumed to
      be the same address. These need to be unique
      to the image resource value.
      
      llvm-svn: 321555
      905f3518
    • Simon Pilgrim's avatar
      [X86][SSE] Match PSHUFLW/PSHUFHW + PSHUFD vXi16 shuffle patterns (PR34686) · c701596e
      Simon Pilgrim authored
      As noted in PR34686, we are relying on a PSHUFD+PSHUFLW+PSHUFHW shuffle chain for most general vXi16 unary shuffles.
      
      This patch checks for simpler PSHUFLW+PSHUFD and PSHUFHW+PSHUFD cases beforehand, building on some existing code that just handled splat shuffles.
      
      By doing so we also prevent premature use of PSHUFB shuffles which can be slower and require the creation/loading of constant shuffle masks.
      
      We now have the 'fast-variable-shuffle' option for hardware that prefers combining 2 or more shuffles to VPSHUFB etc.
      
      Differential Revision: https://reviews.llvm.org/D38318
      
      llvm-svn: 321553
      c701596e
    • Dmitry Preobrazhensky's avatar
      [AMDGPU][MC] Incorrect parsing of flat/global atomic modifiers · 414e0538
      Dmitry Preobrazhensky authored
      See bug 35730: https://bugs.llvm.org/show_bug.cgi?id=35730
      
      Differential Revision: https://reviews.llvm.org/D41598
      
      Reviewers: vpykhtin, artem.tamazov, arsenm
      llvm-svn: 321552
      414e0538
    • Nemanja Ivanovic's avatar
      [PowerPC] Fix for PR35688 - handle out-of-range values for r+r to r+i conversion · 4e1f5e07
      Nemanja Ivanovic authored
      Revision 320791 introduced a pass that transforms reg+reg instructions to
      reg+imm if they're fed by "load immediate". However, it didn't
      handle out-of-range shifts correctly as reported in PR35688.
      This patch fixes that and therefore the PR.
      
      Furthermore, there was undefined behaviour in the patch where the RHS of an
      initialization expression was 32 bits and constant `1` was shifted left 32
      bits. This was fixed by ensuring the RHS is 64 bits just like the LHS.
      
      Differential Revision: https://reviews.llvm.org/D41369
      
      llvm-svn: 321551
      4e1f5e07
    • Max Kazantsev's avatar
      [SCEV] Missing depth propagation in recursive call · 2c2b1f6d
      Max Kazantsev authored
      llvm-svn: 321550
      2c2b1f6d
    • Andrew V. Tischenko's avatar
    • Fedor Sergeev's avatar
      [PM] pass -debug-pass-manager flag into FunctionToLoopPassAdaptor's canonicalization PM · 02e7f024
      Fedor Sergeev authored
      Summary:
      New pass manager driver passes DebugPM (-debug-pass-manager) flag into
      individual PassManager constructors in order to enable debug logging.
      FunctionToLoopPassAdaptor has its own internal LoopCanonicalizationPM
      which never gets its debug logging enabled and that means canonicalization
      passes like LoopSimplify are never present in -debug-pass-manager output.
      
      Extending FunctionToLoopPassAdaptor's constructor and
      createFunctionToLoopPassAdaptor wrapper with an optional
      boolean DebugLogging argument.
      
      Passing debug-logging flags there as appropriate.
      
      Reviewers: chandlerc, davide
      
      Reviewed By: davide
      
      Subscribers: mehdi_amini, eraman, llvm-commits, JDevlieghere
      
      Differential Revision: https://reviews.llvm.org/D41586
      
      llvm-svn: 321548
      02e7f024
    • Dimitry Andric's avatar
      Avoid modifying DbgInfo while looping in salvageDebuginfo · 2fb61343
      Dimitry Andric authored
      Summary:
      I have been getting rather difficult to reproduce SIGBUS crashes when
      compiling certain FreeBSD sources, and their stack traces pointed
      squarely at `SelectionDAG::salvageDebugInfo()`:
      
      ```
      Core was generated by `/usr/obj/share/dim/src/freebsd/clang600-import/amd64.amd64/tmp/usr/bin/cc -cc1 -'.
      Program terminated with signal SIGBUS, Bus error.
      #0  isInvalidated () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h:115
      115       bool isInvalidated() const { return Invalid; }
      (gdb) bt
      #0  isInvalidated () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h:115
      #1  salvageDebugInfo () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:7116
      #2  0x00000000033b2516 in operator() () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3595
      #3  __invoke<(lambda at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3593:59) &, llvm::SDNode *, llvm::SDNode *> () at /usr/include/c++/v1/type_traits:4323
      #4  __call<(lambda at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3593:59) &, llvm::SDNode *, llvm::SDNode *> () at /usr/include/c++/v1/__functional_base:349
      #5  operator() () at /usr/include/c++/v1/functional:1562
      #6  0x00000000033b0817 in operator() () at /usr/include/c++/v1/functional:1916
      #7  NodeDeleted () at /share/dim/src/freebsd/clang600-import/contrib/llvm/include/llvm/CodeGen/SelectionDAG.h:293
      #8  0x0000000003529dde in RemoveDeadNodes () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:610
      #9  0x00000000035556df in MorphNodeTo () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:6794
      #10 0x00000000033a9acc in MorphNode () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:2594
      #11 0x00000000033ac80b in SelectCodeCommon () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3601
      #12 0x00000000023d464b in SelectCode () at /usr/obj/share/dim/src/freebsd/clang600-import/amd64.amd64/tmp/obj-tools/lib/clang/libllvm/X86GenDAGISel.inc:282902
      #13 Select () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:3072
      #14 0x00000000033a5afa in DoInstructionSelection () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:988
      #15 0x00000000033a4e1a in CodeGenAndEmitDAG () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:868
      #16 0x00000000033a2643 in SelectAllBasicBlocks () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1624
      #17 0x000000000339f158 in runOnMachineFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:466
      #18 0x00000000023d03c4 in runOnMachineFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:175
      #19 0x00000000035cc8c2 in runOnFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/MachineFunctionPass.cpp:62
      #20 0x00000000030dca9a in runOnFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1520
      #21 0x00000000030dccf3 in runOnModule () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1541
      #22 0x00000000030dd228 in runOnModule () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1597
      #23 run () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1700
      #24 0x00000000014db578 in EmitAssembly () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:815
      #25 EmitBackendOutput () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:1181
      #26 0x00000000014d5b26 in HandleTranslationUnit () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:292
      #27 0x0000000001c4c332 in ParseAST () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseAST.cpp:159
      #28 0x00000000015d546c in Execute () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:897
      #29 0x0000000001cec311 in ExecuteAction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:991
      #30 0x00000000014b4f81 in ExecuteCompilerInvocation () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:252
      #31 0x00000000014aa73f in cc1_main () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/tools/driver/cc1_main.cpp:221
      #32 0x00000000014b2928 in ExecuteCC1Tool () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/tools/driver/driver.cpp:309
      #33 main () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/tools/driver/driver.cpp:388
      (gdb) frame 1
      #1  salvageDebugInfo () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:7116
      7116        if (DV->isInvalidated())
      (gdb) disassemble
      Dump of assembler code for function salvageDebugInfo():
      [...]
         0x0000000003557348 <+744>:   nopl   0x0(%rax,%rax,1)
         0x0000000003557350 <+752>:   mov    (%r12),%r13
      => 0x0000000003557354 <+756>:   cmpb   $0x0,0x31(%r13)
         0x0000000003557359 <+761>:   jne    0x35573b0 <salvageDebugInfo()+848>
      (gdb) info registers
      [...]
      r13            0x5a5a5a5a5a5a5a5a       6510615555426900570
      ```
      
      The `0x5a5a5a5a5a5a5a5a` value in `r13` indicates the memory was either
      uninitialized, or already freed.
      
      Unfortunately I do not have a simple self-contained test case for this.
      However, it seems pretty clear that the call to `AddDbgValue()` in
      `salvageDebugInfo()` causes the problems, since it modifies
      `SelectionDag::DbgInfo` while looping through one of its DenseMaps:
      
      ```
      void SelectionDAG::salvageDebugInfo(SDNode &N) {
      [...]
        for (auto DV : GetDbgValues(&N)) {
          if (DV->isInvalidated())
            continue;
      [...]
              AddDbgValue(Clone, N0.getNode(), false);
      [...]
        }
      }
      ```
      
      At least, if I comment out the `AddDbgValue()` call, the crashes go
      away.  I propose to change this function slightly, similar to the
      `SelectionDAG::transferDbgValues()` function just above it, to save the
      cloned SDDbgValues in a separate SmallVector, and only call
      AddDbgValue() on them after the for loop is done.
      
      Reviewers: aprantl, bogner, bkramer, davide
      
      Reviewed By: davide
      
      Subscribers: davide, krytarowski, JDevlieghere, emaste, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D41589
      
      llvm-svn: 321545
      2fb61343
  3. Dec 28, 2017
Loading