<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - AssertingVH error in BypassSlowDivisions on dead srem instruction"
   href="https://bugs.llvm.org/show_bug.cgi?id=43514">43514</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>AssertingVH error in BypassSlowDivisions on dead srem instruction
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>9.0
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Common Code Generator Code
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>andrew@scheidecker.net
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=22609" name="attach_22609" title="crash2.ll">attachment 22609</a> <a href="attachment.cgi?id=22609&action=edit" title="crash2.ll">[details]</a></span>
crash2.ll

To reproduce (in a debug build, or with assertions enabled):

  llc crash2.ll -O2 -mcpu=sandybridge

crash2.ll:

  target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"

  define fastcc void @functionDef0(i8*, i64) {
  entry:
    %2 = load i8, i8* %0, align 1
    %3 = zext i8 %2 to i64
    %4 = srem i64 %1, %3
    ret void
  }

The essential ingredients seem to be:
  - A 64-bit div/rem that can be optimized to a narrower div/rem
  - The div/rem must be trivially dead. If I change @functionDef0 to return the
result of the srem, then there's no error.
  - Targeting a CPU that has the "slow 64-bit division" feature flag. Whatever
the default target CPU is for X86 doesn't have this problem. I tried
sandybridge, atom, and skylake-avx512, and they all triggered this error.
  - A debug build (or possibly a release build with assertions enabled, but I
haven't tested that)


The error message + call stack:

While deleting: i64 %
An asserting value handle still pointed to this value!
UNREACHABLE executed at C:\Dev\llvm9\llvm\lib\IR\Value.cpp:905!
Stack dump:
0.      Program arguments: llc C:\Build\crash2.ll -O2 -mcpu=sandybridge
1.      Running pass 'Function Pass Manager' on module 'C:\Build\crash2.ll'.
2.      Running pass 'CodeGen Prepare' on function '@functionDef0'
 #0 0x00007ff76959a23c HandleAbort
C:\Dev\llvm9\llvm\lib\Support\Windows\Signals.inc:408:0
 #1 0x00007ffa54b6c3e1 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x6c3e1)
 #2 0x00007ffa54b6e039 (C:\WINDOWS\SYSTEM32\ucrtbased.dll+0x6e039)
 #3 0x00007ff769487b93 llvm::llvm_unreachable_internal(char const *,char const
*,unsigned int) C:\Dev\llvm9\llvm\lib\Support\ErrorHandling.cpp:215:0
 #4 0x00007ff76862be45 llvm::ValueHandleBase::ValueIsDeleted(class llvm::Value
*) C:\Dev\llvm9\llvm\lib\IR\Value.cpp:908:0
 #5 0x00007ff768627d37 llvm::Value::~Value(void)
C:\Dev\llvm9\llvm\lib\IR\Value.cpp:76:0
 #6 0x00007ff767c071e8 llvm::User::~User(void)
C:\Dev\llvm9\llvm\include\llvm\IR\Constant.h:185:0
 #7 0x00007ff7689091f8 llvm::Instruction::~Instruction(void)
C:\Dev\llvm9\llvm\lib\IR\Instruction.cpp:48:0
 #8 0x00007ff768632908 llvm::UnaryInstruction::~UnaryInstruction(void)
(C:\Build\llvm9\Debug\bin\llc.exe+0x1622908)
 #9 0x00007ff768631978 llvm::CastInst::~CastInst(void)
(C:\Build\llvm9\Debug\bin\llc.exe+0x1621978)
#10 0x00007ff768632a48 llvm::ZExtInst::~ZExtInst(void)
C:\Dev\llvm9\llvm\include\llvm\IR\GlobalVariable.h:78:0
#11 0x00007ff76863571c llvm::ZExtInst::`scalar deleting destructor'(unsigned
int) C:\Dev\llvm9\llvm\include\llvm\ADT\DenseMap.h:1266:0
#12 0x00007ff768629001 llvm::Value::deleteValue(void)
C:\Dev\llvm9\llvm\include\llvm\IR\Instruction.def:185:0
#13 0x00007ff768495878 llvm::ilist_alloc_traits<class
llvm::Instruction>::deleteNode(class llvm::Instruction *)
C:\Dev\llvm9\llvm\include\llvm\IR\Instruction.h:775:0
#14 0x00007ff768495a0f llvm::iplist_impl<class llvm::simple_ilist<class
llvm::Instruction>,class llvm::SymbolTableListTraits<class llvm::Instruction>
<span class="quote">>::erase(class llvm::ilist_iterator<struct</span >
llvm::ilist_detail::node_options<class llvm::Instruction,0,0,void>,0,0>)
C:\Dev\llvm9\llvm\include\llvm\ADT\ilist.h:267:0
#15 0x00007ff768909365 llvm::Instruction::eraseFromParent(void)
C:\Dev\llvm9\llvm\lib\IR\Instruction.cpp:68:0
#16 0x00007ff76962b0b0 llvm::RecursivelyDeleteTriviallyDeadInstructions(class
llvm::SmallVectorImpl<class llvm::Instruction *> &,class
llvm::TargetLibraryInfo const *,class llvm::MemorySSAUpdater *)
C:\Dev\llvm9\llvm\lib\Transforms\Utils\Local.cpp:480:0
#17 0x00007ff76962ae6a llvm::RecursivelyDeleteTriviallyDeadInstructions(class
llvm::Value *,class llvm::TargetLibraryInfo const *,class
llvm::MemorySSAUpdater *)
C:\Dev\llvm9\llvm\lib\Transforms\Utils\Local.cpp:444:0
#18 0x00007ff76968bb3e llvm::bypassSlowDivision(class llvm::BasicBlock *,class
llvm::DenseMap<unsigned int,unsigned int,struct llvm::DenseMapInfo<unsigned
int>,struct llvm::detail::DenseMapPair<unsigned int,unsigned int> > const &)
C:\Dev\llvm9\llvm\lib\Transforms\Utils\BypassSlowDivision.cpp:471:0
#19 0x00007ff768179e82 `anonymous namespace'::CodeGenPrepare::runOnFunction
C:\Dev\llvm9\llvm\lib\CodeGen\CodeGenPrepare.cpp:454:0
#20 0x00007ff7686f980b llvm::FPPassManager::runOnFunction(class llvm::Function
&) C:\Dev\llvm9\llvm\lib\IR\LegacyPassManager.cpp:1648:0
#21 0x00007ff7686f9c0c llvm::FPPassManager::runOnModule(class llvm::Module &)
C:\Dev\llvm9\llvm\lib\IR\LegacyPassManager.cpp:1685:0
#22 0x00007ff7686fb259 `anonymous namespace'::MPPassManager::runOnModule
C:\Dev\llvm9\llvm\lib\IR\LegacyPassManager.cpp:1750:0
#23 0x00007ff7686fbcbc llvm::legacy::PassManagerImpl::run(class llvm::Module &)
C:\Dev\llvm9\llvm\lib\IR\LegacyPassManager.cpp:1863:0
#24 0x00007ff7686f3716 llvm::legacy::PassManager::run(class llvm::Module &)
C:\Dev\llvm9\llvm\lib\IR\LegacyPassManager.cpp:1895:0
#25 0x00007ff7671bd601 compileModule C:\Dev\llvm9\llvm\tools\llc\llc.cpp:603:0
#26 0x00007ff7671be704 main C:\Dev\llvm9\llvm\tools\llc\llc.cpp:355:0
#27 0x00007ff769ef6879 invoke_main
d:\agent\_work\3\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79:0
#28 0x00007ff769ef675e __scrt_common_main_seh
d:\agent\_work\3\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0
#29 0x00007ff769ef661e __scrt_common_main
d:\agent\_work\3\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331:0
#30 0x00007ff769ef6909 mainCRTStartup
d:\agent\_work\3\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17:0
#31 0x00007ffacfae7bd4 (C:\WINDOWS\System32\KERNEL32.DLL+0x17bd4)
#32 0x00007ffad15aced1 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x6ced1)</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>