[LLVMdev] Unreachable code executed crash

Nick Lewycky nicholas at mxc.ca
Sat May 8 03:14:38 PDT 2010


Adarsh Yoga wrote:
> Initially, tt was not a problem with the verifier, we were just
> inserting a wrong instruction in our pass.

Of course the verifier wasn't causing your problems. I want to find out 
why the verifier did not catch and error on the invalid module.

  Also we were able to figure
> out the error you pointed out and our pass is running as intended!!!

That's great to hear!

Could you explain, briefly, what your bug was? Something more specific 
than 'inserting a wrong instruction'?

Nick

> Thanks a lot.
>
> On Fri, May 7, 2010 at 12:02 AM, Nick Lewycky <nicholas at mxc.ca
> <mailto:nicholas at mxc.ca>> wrote:
>
>     Adarsh Yoga wrote:
>
>         I was able to solve that
>
>
>     What was wrong? I wasn't able to reproduce it and would still like
>     to teach the verifier whatever it missed.
>
>
>       but still crashing with the same error saying
>
>         "Unreachable executed". I have attached the output with this mail.
>
>
>     This time you've got:
>
>       %1 = load i32** getelementptr inbounds ({ i32* }* @structobj, i64
>     0, i32 0)
>
>     in @temp0 but @structobj is nowhere in the file, which implies that
>     you created the GlobalValue but never inserted it.
>
>     You can figure this out for yourself by taking the module dump (be
>     sure to remove "The Module: " from the beginning) and running
>     llvm-as on it. It finds these errors.
>
>     Nick
>
>
>         Thanks in advance.
>
>         On Thu, May 6, 2010 at 2:38 AM, Nick Lewycky <nicholas at mxc.ca
>         <mailto:nicholas at mxc.ca>
>         <mailto:nicholas at mxc.ca <mailto:nicholas at mxc.ca>>> wrote:
>
>             Adarsh Yoga wrote:
>
>                 Yes. Intially the pass was crashing when the module when
>         the module
>                 verifier was running. I was able to solve that and now it is
>                 crashing
>                 when the bit writer pass is running.
>
>
>             The output is wrong in @thread_pool_init:
>
>         <stdin>:44:27: error: '%4' defined with type 'i1'
>               %5 = getelementptr i32* %4, i64 %indvar         ; <i32*>
>         [#uses=1]
>                                       ^
>             where
>
>               %4 = icmp slt i32 %threadnumber, 1              ; <i1>
>         [#uses=2]
>
>             meaning that %4 is an i1 not an i32*. I'm not sure how you
>         managed
>             to do this, and how the verifier didn't catch it. Maybe the %4
>             operand is actually an instruction in another function?
>
>             I'll try to reproduce this and fix the verifier to catch it.
>
>             Nick
>
>                 On Wed, May 5, 2010 at 8:39 PM, Nick Lewycky
>         <nlewycky at google.com <mailto:nlewycky at google.com>
>         <mailto:nlewycky at google.com <mailto:nlewycky at google.com>>
>         <mailto:nlewycky at google.com <mailto:nlewycky at google.com>
>         <mailto:nlewycky at google.com <mailto:nlewycky at google.com>>>> wrote:
>
>                     On 5 May 2010 17:12, Adarsh Yoga <ayoga at umail.iu.edu
>         <mailto:ayoga at umail.iu.edu>
>         <mailto:ayoga at umail.iu.edu <mailto:ayoga at umail.iu.edu>>
>         <mailto:ayoga at umail.iu.edu <mailto:ayoga at umail.iu.edu>
>         <mailto:ayoga at umail.iu.edu <mailto:ayoga at umail.iu.edu>>>> wrote:
>
>                         Hi,
>
>                            I've written a pass that basically does some code
>                         transformations to enable parallel execution of
>         loops.
>                 After the
>                         transformation llvm runs BitCode Writer pass ,
>         which is
>                 aborting
>                         with Unreachable Executed error.
>                         I have attached the input llvm code and the
>         output llvm
>                 code for
>                         reference. I am stuck at this problem for a few days
>                 now. Please
>                         let me know if you are able to find anything
>         unusual.
>
>
>                     Have you tried running the module verifier after
>         your transform,
>                     before writing out to bitcode?
>
>                     Nick
>
>                         Regards,
>                         Adarsh
>
>                         --
>                         Adarsh Yoga
>                         Graduate Student, Computer Science
>                         Indiana University, Bloomington
>
>                         _______________________________________________
>                         LLVM Developers mailing list
>         LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>         <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>>
>         <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>         <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>>>
>
>
>         http://llvm.cs.uiuc.edu
>         http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
>
>
>                 --
>                 Adarsh Yoga
>                 Graduate Student, Computer Science
>                 Indiana University, Bloomington
>
>
>
>                 _______________________________________________
>                 LLVM Developers mailing list
>         LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>         <mailto:LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>>
>         http://llvm.cs.uiuc.edu
>         http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
>
>
>         --
>         Adarsh Yoga
>         Graduate Student, Computer Science
>         Indiana University, Bloomington
>
>
>
>
>
> --
> Adarsh Yoga
> Graduate Student, Computer Science
> Indiana University, Bloomington




More information about the llvm-dev mailing list