On Wed, Jun 23, 2004 at 03:50:09PM -0500, Patrick Meredith wrote:> MetaSplit is an anlysis I just finished writing. It doesn't alter > anything, all it does is build a set of "program instructions". For > some reason even though if I run it with any other combination of > passes I've found, anytime I run it with mem2reg I get a seg fault in > dyn_cast! Here's output:Since the crash is after your code is entered, the problem is probably not in mem2reg, but in your pass. To see if that's the case, you can do this: % opt -mem2reg < orig.bc > m2r.bc % opt -load=... -metasplit < m2r.bc > output.bc And see if it crashes in mem2reg or in your pass. To narrow your testcase down further, we recommend the use of bugpoint, the automatic test case reducer: http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html In this case, this should work: % bugpoint -load=... -mem2reg -metasplit orig.bc -- Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu
Patrick Meredith
2004-Jun-23 16:10 UTC
[LLVMdev] weird issue with mem2reg, should have guessed
What's different about code that's been mem2reg'd from straight front end code, or anything that mem2reg hasn't been run on? PHINODES! It appears to be crashing when I try to cast a Value* that's really a BB* (from the PHInode operands) to a User*, insteresting since I am dyn_casting. I just caught this on cerr though (printing out what the Value* was each time). Let me check bugpoint. ----- Original Message ----- From: "Misha Brukman" <brukman at uiuc.edu> To: <llvmdev at cs.uiuc.edu> Sent: Wednesday, June 23, 2004 3:56 PM Subject: Re: [LLVMdev] weird issue with mem2reg> On Wed, Jun 23, 2004 at 03:50:09PM -0500, Patrick Meredith wrote: > > MetaSplit is an anlysis I just finished writing. It doesn't alter > > anything, all it does is build a set of "program instructions". For > > some reason even though if I run it with any other combination of > > passes I've found, anytime I run it with mem2reg I get a seg fault in > > dyn_cast! Here's output: > > Since the crash is after your code is entered, the problem is probably > not in mem2reg, but in your pass. To see if that's the case, you can do > this: > > % opt -mem2reg < orig.bc > m2r.bc > % opt -load=... -metasplit < m2r.bc > output.bc > > And see if it crashes in mem2reg or in your pass. To narrow your > testcase down further, we recommend the use of bugpoint, the automatic > test case reducer: > > http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html > > In this case, this should work: > > % bugpoint -load=... -mem2reg -metasplit orig.bc > > -- > Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
Yes, it's actually an operand out of range. I'm still pointing a finger at PHInodes though. Thanks for the help :) ----- Original Message ----- From: "Misha Brukman" <brukman at uiuc.edu> To: <llvmdev at cs.uiuc.edu> Sent: Wednesday, June 23, 2004 3:56 PM Subject: Re: [LLVMdev] weird issue with mem2reg> On Wed, Jun 23, 2004 at 03:50:09PM -0500, Patrick Meredith wrote: > > MetaSplit is an anlysis I just finished writing. It doesn't alter > > anything, all it does is build a set of "program instructions". For > > some reason even though if I run it with any other combination of > > passes I've found, anytime I run it with mem2reg I get a seg fault in > > dyn_cast! Here's output: > > Since the crash is after your code is entered, the problem is probably > not in mem2reg, but in your pass. To see if that's the case, you can do > this: > > % opt -mem2reg < orig.bc > m2r.bc > % opt -load=... -metasplit < m2r.bc > output.bc > > And see if it crashes in mem2reg or in your pass. To narrow your > testcase down further, we recommend the use of bugpoint, the automatic > test case reducer: > > http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html > > In this case, this should work: > > % bugpoint -load=... -mem2reg -metasplit orig.bc > > -- > Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
Chris Lattner
2004-Jun-23 16:14 UTC
[LLVMdev] weird issue with mem2reg, should have guessed
On Wed, 23 Jun 2004, Patrick Meredith wrote:> What's different about code that's been mem2reg'd from straight front end > code, or anything that mem2reg hasn't been run on? PHINODES!Yup, front-ends generally don't produce SSA form. :)> It appears to be crashing when I try to cast a Value* that's really a > BB* (from the PHInode operands) to a User*, insteresting since I am > dyn_casting. I just caught this on cerr though (printing out what the > Value* was each time).Yeah, you shouldn't do that. :) Also, you should use the 'cast' template instead of the dyn_cast template unless you are prepared to handle the null return value. Use 'cast' when you _know_ that something is a particular type. This will give you a nice assertion failure instead of a segfault when you deref the null pointer :)> Let me check bugpoint.Cool, post the testcase it produces. Hopefully it will be small :) -Chris> ----- Original Message ----- > From: "Misha Brukman" <brukman at uiuc.edu> > To: <llvmdev at cs.uiuc.edu> > Sent: Wednesday, June 23, 2004 3:56 PM > Subject: Re: [LLVMdev] weird issue with mem2reg > > > > On Wed, Jun 23, 2004 at 03:50:09PM -0500, Patrick Meredith wrote: > > > MetaSplit is an anlysis I just finished writing. It doesn't alter > > > anything, all it does is build a set of "program instructions". For > > > some reason even though if I run it with any other combination of > > > passes I've found, anytime I run it with mem2reg I get a seg fault in > > > dyn_cast! Here's output: > > > > Since the crash is after your code is entered, the problem is probably > > not in mem2reg, but in your pass. To see if that's the case, you can do > > this: > > > > % opt -mem2reg < orig.bc > m2r.bc > > % opt -load=... -metasplit < m2r.bc > output.bc > > > > And see if it crashes in mem2reg or in your pass. To narrow your > > testcase down further, we recommend the use of bugpoint, the automatic > > test case reducer: > > > > http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html > > > > In this case, this should work: > > > > % bugpoint -load=... -mem2reg -metasplit orig.bc > > > > -- > > Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev >-Chris -- http://llvm.cs.uiuc.edu/ http://www.nondot.org/~sabre/Projects/