llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
29.25k stars 12.08k forks source link

slp-vectorizer cannot terminate #40634

Open 952e6d5a-d994-4724-a6d1-07613b2d95a8 opened 5 years ago

952e6d5a-d994-4724-a6d1-07613b2d95a8 commented 5 years ago
Bugzilla Link 41289
Version trunk
OS Linux
Attachments .bc file of the source code, optimized .bc file of source code
CC @alexey-bataev,@dtemirbulatov

Extended Description

$clang -v clang version 9.0.0 (trunk 355281) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/jack-zhou/Documents/llvm/llvm_truck/llvm/build4/bin Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.5.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.5.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64

$clang -O3 -c -emit-llvm -mllvm -disable-llvm-optzns small.c

$opt -gvn -structurizecfg small.bc -o small-opt.bc

$opt -slp-vectorizer small-opt.bc In this step, opt will consume too much memory and not terminate.

By using godbolt, it shows that the llvm 6/7/truck version also has this problem.


struct { int a; int b; int c } * d, e, f, g, h; fn1() { int j; int k; int l; int m; n : { int o; p: if (j) for (; e.a;) { int q; for (; h.c;) { int i; if (k) goto p; if (l) for (; 2; i) return o; } } int r; if (m) aa: if (0 & r && 0) for (; 0;) { int a; for (; 0;) { if (a) goto n; for (; f.c; f) goto aa; } for (; 0;) for (; g.b; 1) return d; } } }

952e6d5a-d994-4724-a6d1-07613b2d95a8 commented 5 years ago

This may not a bug. When I test this testcase, I set the time of timeout command to 60s, but it cannot produce the result. Without the limitation of run time, opt can output the result. Maybe it is a performance problem.