<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </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 --- - Vectorization interacts badly with ARM division lowering"
   href="https://llvm.org/bugs/show_bug.cgi?id=31778">31778</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Vectorization interacts badly with ARM division lowering
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>All
          </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>Backend: ARM
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>compnerd@compnerd.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>smeenai@fb.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>% cat /tmp/crash.c
void apply(short *a, short *b, int c) {
  while (c--) {
    *b = *a / 3;
    b++;
  }
}

% /path/to/llvm/build/bin/clang-5.0 -cc1 -triple thumbv7--windows-msvc18.0.0
-emit-obj -O1 -vectorize-loops -o /dev/null /tmp/crash.c
clang-5.0: ../../../lib/Target/ARM/ARMISelLowering.cpp:7342: llvm::SDValue
llvm::ARMTargetLowering::LowerDIV_Windows(llvm::SDValue, llvm::SelectionDAG&,
bool) const: Assertion `Op.getValueType() == MVT::i32 && "unexpected type for
custom lowering DIV"' failed.
0  clang-5.0       0x00000000015eed95
llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  clang-5.0       0x00000000015ece0e llvm::sys::RunSignalHandlers() + 62
2  clang-5.0       0x00000000015ecf72
3  libpthread.so.0 0x00007fe8f91c2370
4  libc.so.6       0x00007fe8f7fe41d7 gsignal + 55
5  libc.so.6       0x00007fe8f7fe58c8 abort + 328
6  libc.so.6       0x00007fe8f7fdd146
7  libc.so.6       0x00007fe8f7fdd1f2
8  clang-5.0       0x0000000000aee7bf
llvm::ARMTargetLowering::LowerDIV_Windows(llvm::SDValue, llvm::SelectionDAG&,
bool) const + 79
9  clang-5.0       0x0000000000b090a8
llvm::ARMTargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&)
const + 6376
10 clang-5.0       0x0000000001d00d43
11 clang-5.0       0x0000000001d02c9f llvm::SelectionDAG::LegalizeVectors() +
367
12 clang-5.0       0x0000000001cbdfd9
llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 729
13 clang-5.0       0x0000000001cc6544
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 1604
14 clang-5.0       0x0000000001cc85ac
15 clang-5.0       0x0000000000abcad4
16 clang-5.0       0x0000000000f54c43
llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 355
17 clang-5.0       0x0000000001233bd3
llvm::FPPassManager::runOnFunction(llvm::Function&) + 643
18 clang-5.0       0x0000000001233c7c
llvm::FPPassManager::runOnModule(llvm::Module&) + 60
19 clang-5.0       0x00000000012344df
llvm::legacy::PassManagerImpl::run(llvm::Module&) + 735
20 clang-5.0       0x000000000176056c
21 clang-5.0       0x0000000001761780
clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions
const&, clang::CodeGenOptions const&, clang::TargetOptions const&,
clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*,
clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream,
std::default_delete<llvm::raw_pwrite_stream> >) + 832
22 clang-5.0       0x0000000001d8450c
23 clang-5.0       0x0000000002195b62 clang::ParseAST(clang::Sema&, bool, bool)
+ 578
24 clang-5.0       0x0000000001d8272a clang::CodeGenAction::ExecuteAction() +
58
25 clang-5.0       0x0000000001a97b36 clang::FrontendAction::Execute() + 518
26 clang-5.0       0x0000000001a72796
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 358
27 clang-5.0       0x0000000001b22934
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1716
28 clang-5.0       0x0000000000a1bbd8 cc1_main(llvm::ArrayRef<char const*>,
char const*, void*) + 2168
29 clang-5.0       0x00000000009de5f6 main + 5510
30 libc.so.6       0x00007fe8f7fd0b35 __libc_start_main + 245
31 clang-5.0       0x0000000000a17729
Stack dump:
0.    Program arguments: /path/to/llvm/build/bin/clang-5.0 -cc1 -triple
thumbv7--windows-msvc18.0.0 -emit-obj -O1 -vectorize-loops -o /dev/null
/tmp/crash.c
1.    <eof> parser at end of file
2.    Code generation
3.    Running pass 'Function Pass Manager' on module '/tmp/crash.c'.
4.    Running pass 'ARM Instruction Selection' on function '@apply'


Removing `-vectorize-loops` fixes the crash. In particular, the problematic IR
instruction appears to be

sdiv <4 x i16> %2, <i16 3, i16 3, i16 3, i16 3></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>