liubaosen@tsinghua.edu.cn via llvm-dev
2020-May-12 03:26 UTC
[llvm-dev] bug report on mem2reg
Hi, all, I think I found a bug on mem2reg in a particular case. When I ran opt -mem2reg -basicaa -scalar-evolution -loops -da -analyze opts.ll, it collapsed. While without mem2reg option, it runs well. so I guess it has something to do with mem2reg. The relative files have been affixed, please check them for me. Thanks in advance. liubaosen at tsinghua.edu.cn -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200512/68d21aef/attachment-0001.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: opts.c Type: application/octet-stream Size: 22346 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200512/68d21aef/attachment-0003.obj> -------------- next part -------------- A non-text attachment was scrubbed... Name: opts.h Type: application/octet-stream Size: 1711 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200512/68d21aef/attachment-0004.obj> -------------- next part -------------- A non-text attachment was scrubbed... Name: opts.ll Type: application/octet-stream Size: 207264 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200512/68d21aef/attachment-0005.obj>
Tried testing it with things like Undefined Behaivor Sanitizer (or other sanitizers - memory/address) or valgrind? Often "program works sometimes and doesn't work other times" is because the program has undefined behavior in it & the times its working are just luck. On Mon, May 11, 2020 at 8:41 PM liubaosen at tsinghua.edu.cn via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi, all, > > I think I found a bug on mem2reg in a particular case. > When I ran opt -mem2reg -basicaa -scalar-evolution -loops -da -analyze > opts.ll, it collapsed. While without mem2reg option, it runs well. so I > guess it has something to do with mem2reg. > The relative files have been affixed, please check them for me. > Thanks in advance. > > ------------------------------ > liubaosen at tsinghua.edu.cn > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200511/8a1d1769/attachment.html>
Sorry, I'm not sure I'll be able to help you - main.c uses other code (optsfind/check/etc) that I don't have/don't know what that code is, and even with it it's probably a bit big/complicated for me to debug/reduce/etc. If you can reconstruct the smallest complete (reducing the total lines of all source/header files needed to reproduce the problem) example that might be more practical to discuss here & see whether it's a mem2reg bug, etc. On Wed, May 13, 2020 at 6:52 PM liubaosen at tsinghua.edu.cn < liubaosen at tsinghua.edu.cn> wrote:> Hi, David and anyone relevent, > > Thank you for replying, first. > I tried it with valgrind, no error is reported, so I'm sure it's not our > problem. > The valgrind log is affixed and a mian.c which you may need to generate an > executable is also affixed. > Please do me a favor and investigate what causes the colapse. Your help > will be greatly appreciated. > > Best regards > > ------------------------------ > liubaosen at tsinghua.edu.cn > > > *From:* David Blaikie <dblaikie at gmail.com> > *Date:* 2020-05-12 11:45 > *To:* liubaosen at tsinghua.edu.cn > *CC:* llvm-dev <llvm-dev at lists.llvm.org> > *Subject:* Re: [llvm-dev] bug report on mem2reg > Tried testing it with things like Undefined Behaivor Sanitizer (or other > sanitizers - memory/address) or valgrind? > > Often "program works sometimes and doesn't work other times" is > because the program has undefined behavior in it & the times its working > are just luck. > > On Mon, May 11, 2020 at 8:41 PM liubaosen at tsinghua.edu.cn via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Hi, all, >> >> I think I found a bug on mem2reg in a particular case. >> When I ran opt -mem2reg -basicaa -scalar-evolution -loops -da -analyze >> opts.ll, it collapsed. While without mem2reg option, it runs well. so I >> guess it has something to do with mem2reg. >> The relative files have been affixed, please check them for me. >> Thanks in advance. >> >> ------------------------------ >> liubaosen at tsinghua.edu.cn >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200514/52dcefe9/attachment.html>
This is still a rather long test case - I expect it should be able to be reduced further while still demonstrating the problem. I also don't understand what the correct/incorrect behavior it is you're looking for - at least casually, the program prints the same result at -O0, which doesn't run mem2reg, and at -O3 which does run mem2reg. On Thu, May 14, 2020 at 5:14 PM liubaosen at tsinghua.edu.cn < liubaosen at tsinghua.edu.cn> wrote:> Hi, David, and anyone regards, > Thanks for discussing. I meant you can run the main.c with what I affixed > in last mail. Anyway, I reprepared a complete while least pack of codes, > which is affixed. I've tried it with following process, > > clang colapse.c -o colapse > ./colapse > valgrind --tool=memcheck --leak-check=yes ./colapse > clang colapse.c -emit-llvm -g -c -S -o colapse.ll -Xclang > -disable-O0-optnone > opt -mem2reg -da -analyze colapse.ll > > so, principly, it is for sure able to recur. There are totally 3 functions > can cause collapses (maybe by a same reason), and all of them are contained > in the file. Please help me debug it. > > Thanks again. > > ------------------------------ > liubaosen at tsinghua.edu.cn > > > *From:* David Blaikie <dblaikie at gmail.com> > *Date:* 2020-05-15 06:31 > *To:* liubaosen at tsinghua.edu.cn; llvm-dev <llvm-dev at lists.llvm.org> > *Subject:* Re: Re: [llvm-dev] bug report on mem2reg > Sorry, I'm not sure I'll be able to help you - main.c uses other code > (optsfind/check/etc) that I don't have/don't know what that code is, and > even with it it's probably a bit big/complicated for me to > debug/reduce/etc. If you can reconstruct the smallest complete (reducing > the total lines of all source/header files needed to reproduce the problem) > example that might be more practical to discuss here & see whether it's a > mem2reg bug, etc. > > On Wed, May 13, 2020 at 6:52 PM liubaosen at tsinghua.edu.cn < > liubaosen at tsinghua.edu.cn> wrote: > >> Hi, David and anyone relevent, >> >> Thank you for replying, first. >> I tried it with valgrind, no error is reported, so I'm sure it's not our >> problem. >> The valgrind log is affixed and a mian.c which you may need to generate >> an executable is also affixed. >> Please do me a favor and investigate what causes the colapse. Your help >> will be greatly appreciated. >> >> Best regards >> >> ------------------------------ >> liubaosen at tsinghua.edu.cn >> >> >> *From:* David Blaikie <dblaikie at gmail.com> >> *Date:* 2020-05-12 11:45 >> *To:* liubaosen at tsinghua.edu.cn >> *CC:* llvm-dev <llvm-dev at lists.llvm.org> >> *Subject:* Re: [llvm-dev] bug report on mem2reg >> Tried testing it with things like Undefined Behaivor Sanitizer (or other >> sanitizers - memory/address) or valgrind? >> >> Often "program works sometimes and doesn't work other times" is >> because the program has undefined behavior in it & the times its working >> are just luck. >> >> On Mon, May 11, 2020 at 8:41 PM liubaosen at tsinghua.edu.cn via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >>> Hi, all, >>> >>> I think I found a bug on mem2reg in a particular case. >>> When I ran opt -mem2reg -basicaa -scalar-evolution -loops -da -analyze >>> opts.ll, it collapsed. While without mem2reg option, it runs well. so I >>> guess it has something to do with mem2reg. >>> The relative files have been affixed, please check them for me. >>> Thanks in advance. >>> >>> ------------------------------ >>> liubaosen at tsinghua.edu.cn >>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>> >>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200514/cf6294f3/attachment.html>
On 2020-05-14, David Blaikie via llvm-dev wrote:>This is still a rather long test case - I expect it should be able to be >reduced further while still demonstrating the problem. > >I also don't understand what the correct/incorrect behavior it is you're >looking for - at least casually, the program prints the same result at -O0, >which doesn't run mem2reg, and at -O3 which does run mem2reg.Agreed the case is complex. After clang -O3 -S -emit-llvm opts.c opt -da -analyze opts.ll => assertion failure at https://github.com/llvm/llvm-project/blob/master/llvm/lib/Analysis/DependenceAnalysis.cpp#L1155 // CommonLevels == 0 assert(0 < Level && Level <= CommonLevels && "level out of range"); So there is definitely a bug in dependency analysis, but I haven't spent time investigating it.>On Thu, May 14, 2020 at 5:14 PM liubaosen at tsinghua.edu.cn < >liubaosen at tsinghua.edu.cn> wrote: > >> Hi, David, and anyone regards, >> Thanks for discussing. I meant you can run the main.c with what I affixed >> in last mail. Anyway, I reprepared a complete while least pack of codes, >> which is affixed. I've tried it with following process, >> >> clang colapse.c -o colapse >> ./colapse >> valgrind --tool=memcheck --leak-check=yes ./colapse >> clang colapse.c -emit-llvm -g -c -S -o colapse.ll -Xclang >> -disable-O0-optnone >> opt -mem2reg -da -analyze colapse.ll >> >> so, principly, it is for sure able to recur. There are totally 3 functions >> can cause collapses (maybe by a same reason), and all of them are contained >> in the file. Please help me debug it. >> >> Thanks again. >> >> ------------------------------ >> liubaosen at tsinghua.edu.cn >> >> >> *From:* David Blaikie <dblaikie at gmail.com> >> *Date:* 2020-05-15 06:31 >> *To:* liubaosen at tsinghua.edu.cn; llvm-dev <llvm-dev at lists.llvm.org> >> *Subject:* Re: Re: [llvm-dev] bug report on mem2reg >> Sorry, I'm not sure I'll be able to help you - main.c uses other code >> (optsfind/check/etc) that I don't have/don't know what that code is, and >> even with it it's probably a bit big/complicated for me to >> debug/reduce/etc. If you can reconstruct the smallest complete (reducing >> the total lines of all source/header files needed to reproduce the problem) >> example that might be more practical to discuss here & see whether it's a >> mem2reg bug, etc. >> >> On Wed, May 13, 2020 at 6:52 PM liubaosen at tsinghua.edu.cn < >> liubaosen at tsinghua.edu.cn> wrote: >> >>> Hi, David and anyone relevent, >>> >>> Thank you for replying, first. >>> I tried it with valgrind, no error is reported, so I'm sure it's not our >>> problem. >>> The valgrind log is affixed and a mian.c which you may need to generate >>> an executable is also affixed. >>> Please do me a favor and investigate what causes the colapse. Your help >>> will be greatly appreciated. >>> >>> Best regards >>> >>> ------------------------------ >>> liubaosen at tsinghua.edu.cn >>> >>> >>> *From:* David Blaikie <dblaikie at gmail.com> >>> *Date:* 2020-05-12 11:45 >>> *To:* liubaosen at tsinghua.edu.cn >>> *CC:* llvm-dev <llvm-dev at lists.llvm.org> >>> *Subject:* Re: [llvm-dev] bug report on mem2reg >>> Tried testing it with things like Undefined Behaivor Sanitizer (or other >>> sanitizers - memory/address) or valgrind? >>> >>> Often "program works sometimes and doesn't work other times" is >>> because the program has undefined behavior in it & the times its working >>> are just luck. >>> >>> On Mon, May 11, 2020 at 8:41 PM liubaosen at tsinghua.edu.cn via llvm-dev < >>> llvm-dev at lists.llvm.org> wrote: >>> >>>> Hi, all, >>>> >>>> I think I found a bug on mem2reg in a particular case. >>>> When I ran opt -mem2reg -basicaa -scalar-evolution -loops -da -analyze >>>> opts.ll, it collapsed. While without mem2reg option, it runs well. so I >>>> guess it has something to do with mem2reg. >>>> The relative files have been affixed, please check them for me. >>>> Thanks in advance. >>>> >>>> ------------------------------ >>>> liubaosen at tsinghua.edu.cn >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> llvm-dev at lists.llvm.org >>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>> >>>>_______________________________________________ >LLVM Developers mailing list >llvm-dev at lists.llvm.org >https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev