From miyo @ wasamon.net Fri Dec 19 02:31:46 2008 From: miyo @ wasamon.net (Takefumi MIYOSHI) Date: Fri, 19 Dec 2008 02:31:46 +0900 Subject: [Coins-compiler-users-j] =?iso-2022-jp?b?QmFzaWtCbGsbJEIkWCROGyhC?= =?iso-2022-jp?b?GyRCJSIlLyU7JTkkTkp9SyEkSyRoJGs1c0YwJE4wYyQkJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEI=?= Message-ID: <87bpv9tmnx.wl%miyo@wasamon.net> COINS compiler users の皆様 東京大学の三好と申します. 日頃,COINSには大変お世話になっております. 本日LIRを操作するプログラムを書いていて原因の分からないエラーが 発生したため質問させていただきたく思います. coinsバージョン1.4.4.1で, OpCodeとしてOp.DEFLABELを持つLirNodeから辿ったBasicBlkと FlowGraphのbasicBlkIterator経由で辿った同じBaiscBlkの instrList()により返るBiListのインスタンスが異なっていて 困っています. 現在,coins.backend.Function中のLirNodeをループで取り出しながら, DEFLABELに当たったところで,そのBasicBlkを取り出すコードを 書いているのですが, ここで,取り出したBasicBlkのinstrListに対し繰り返し処理を 実行すると,例外を吐いて終了してしまいます. (たとえばtoString()などにおける繰り返し処理など) 一方で,FlowGraphのbasicBlkIterator()から取り出したBasicBlkでは, 同じBasicBlkのインスタンスのinstrListに対する繰り返し処理が 正常に実行されます. 調べてみたところ両者のBasicBlkのインスンタンスは同じようなのですが, instrList()で取り出されるBiListのインスタンスが違っているようです. 特にBasicBlkやLirNodeに対する処理を行っているつもりはないのですが, 辿り方によってBasicBlkのinstrLirが何かしら 更新されてしまっているのでしょうか? あるいは,何か正しくないアクセスを行っているのでしょうか? ご教示いただけますと幸いです. よろしくお願いいたします. なお,テストのコードとして,LocalTransformerを実装するクラスTestと, Lirにおける処理で,Testをapplyするコードを追加するためにDriverを 継承し,compileメソッドをオーバライドしたTestDriverを書いてみました. mainメソッドは,TestDriverにあります. LocalTransformerを実装するTestのdoIt(Function f, ImList args)で, (1) flowGraph経由でBasicBlkのinstrListにアクセスした場合 Iterator it = f.flowGraph().basicBlkList.iterator(); while(it.hasNext()){ BasicBlk blk = (BasicBlk)(it.next()); System.out.println(blk.label()); System.out.println(blk); System.out.println(blk.instrList().hashCode()); System.out.println(blk.instrList()); } と, (2) opCodeがOp.DEFLABELのLirNodeのLirLabelRef経由でBasicBlkの instrListにアクセスした場合 Iterator it = f.lirList().iterator(); while(it.hasNext()){ LirNode node = (LirNode)(it.next()); if(node.opCode == Op.DEFLABEL){ System.out.println(((LirLabelRef)(node.kid(0))).label); System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk()); System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk().instrList()); } } というコードを書いたところ, (1)では,正しくリストを出力できるのに対し, (2)では, coins.backend.cfg.BasicBlk @ a31e1b Exception in thread "Thread-0" java.lang.NullPointerException at coins.backend.util.BiList.toString(BiList.java:293) at java.lang.String.valueOf(String.java:2827) at java.io.PrintStream.println(PrintStream.java:771) などと例外を吐いてしまいます. -- Takefumi MIYOSHI http://www.wasamon.net/miyo/ -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: Test.java 型: application/octet-stream サイズ: 1433 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/coins-compiler-users-j/attachments/20081219/77a493fb/attachment.obj -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: TestDriver.java 型: application/octet-stream サイズ: 9035 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/coins-compiler-users-j/attachments/20081219/77a493fb/attachment-0001.obj From nakata @ kamakuranet.ne.jp Fri Dec 19 11:47:40 2008 From: nakata @ kamakuranet.ne.jp (Ikuo Nakata) Date: Fri, 19 Dec 2008 11:47:40 +0900 Subject: [Coins-compiler-users-j] =?iso-2022-jp?b?QmFzaWtCbGsbJEIkWCROGyhC?= =?iso-2022-jp?b?GyRCJSIlLyU7JTkkTkp9SyEkSyRoJGs1c0YwJE4wYyQkJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEI=?= In-Reply-To: <87bpv9tmnx.wl%miyo@wasamon.net> References: <87bpv9tmnx.wl%miyo@wasamon.net> Message-ID: 三好様 COINSの中田です. 下記のTest, TestDriverで,どんなソースプログラムを 処理したときにその現象が起きるのでしょうか. そのような簡単なソースプログラムを教えていただけないでしょうか. On 2008/12/19, at 2:31, Takefumi MIYOSHI wrote: > > COINS compiler users の皆様 > > 東京大学の三好と申します. > > 日頃,COINSには大変お世話になっております. > 本日LIRを操作するプログラムを書いていて原因の分からな > いエラーが > 発生したため質問させていただきたく思います. > > coinsバージョン1.4.4.1で, > OpCodeとしてOp.DEFLABELを持つLirNodeから辿った > BasicBlkと > FlowGraphのbasicBlkIterator経由で辿った同じ > BaiscBlkの > instrList()により返るBiListのインスタンスが異なっていて > 困っています. > > 現在,coins.backend.Function中のLirNodeをループ > で取り出しながら, > DEFLABELに当たったところで,そのBasicBlkを取り出すコードを > 書いているのですが, > ここで,取り出したBasicBlkのinstrListに対し繰り > 返し処理を > 実行すると,例外を吐いて終了してしまいます. > (たとえばtoString()などにおける繰り返し処理など) > > 一方で,FlowGraphのbasicBlkIterator()から取り出した > BasicBlkでは, > 同じBasicBlkのインスタンスのinstrListに対する繰 > り返し処理が > 正常に実行されます. > > 調べてみたところ両者のBasicBlkのインスンタンスは同じ > ようなのですが, > instrList()で取り出されるBiListのインスタンスが違って > いるようです. > 特にBasicBlkやLirNodeに対する処理を行っているつ > もりはないのですが, > > 辿り方によってBasicBlkのinstrLirが何かしら > 更新されてしまっているのでしょうか? > あるいは,何か正しくないアクセスを行っているのでしょうか? > ご教示いただけますと幸いです. > よろしくお願いいたします. > > > なお,テストのコードとして,LocalTransformerを実装す > るクラスTestと, > Lirにおける処理で,Testをapplyするコードを追加 > するためにDriverを > 継承し,compileメソッドをオーバライドした > TestDriverを書いてみました. > mainメソッドは,TestDriverにあります. > > LocalTransformerを実装するTestのdoIt(Function f, ImList > args)で, > > (1) flowGraph経由でBasicBlkのinstrListにアクセ > スした場合 > > Iterator it = f.flowGraph().basicBlkList.iterator(); > while(it.hasNext()){ > BasicBlk blk = (BasicBlk)(it.next()); > System.out.println(blk.label()); > System.out.println(blk); > System.out.println(blk.instrList().hashCode()); > System.out.println(blk.instrList()); > } > と, > (2) opCodeがOp.DEFLABELのLirNodeの > LirLabelRef経由でBasicBlkの > instrListにアクセスした場合 > > Iterator it = f.lirList().iterator(); > while(it.hasNext()){ > LirNode node = (LirNode)(it.next()); > if(node.opCode == Op.DEFLABEL){ > System.out.println(((LirLabelRef)(node.kid(0))).label); > System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk()); > System.out.println(((LirLabelRef) > (node.kid(0))).label.basicBlk().instrList()); > } > } > というコードを書いたところ, > (1)では,正しくリストを出力できるのに対し, > (2)では, > coins.backend.cfg.BasicBlk @ a31e1b > Exception in thread "Thread-0" java.lang.NullPointerException > at coins.backend.util.BiList.toString(BiList.java:293) > at java.lang.String.valueOf(String.java:2827) > at java.io.PrintStream.println(PrintStream.java:771) > などと例外を吐いてしまいます. > > -- > Takefumi MIYOSHI > http://www.wasamon.net/miyo/ > > < > Test > .java>_______________________________________________ > Coins-compiler-users-j mailing list > Coins-compiler-users-j @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/coins-compiler-users-j 中田 育男 nakata @ kamakuranet.ne.jp -------------- next part -------------- HTMLの添付ファイルを保管しました... URL: http://lists.sourceforge.jp/mailman/archives/coins-compiler-users-j/attachments/20081219/a5aa67ea/attachment-0001.htm From miyo @ wasamon.net Fri Dec 19 12:01:23 2008 From: miyo @ wasamon.net (Takefumi MIYOSHI) Date: Fri, 19 Dec 2008 12:01:23 +0900 Subject: [Coins-compiler-users-j] =?iso-2022-jp?b?QmFzaWtCbGsbJEIkWCROGyhC?= =?iso-2022-jp?b?GyRCJSIlLyU7JTkkTkp9SyEkSyRoJGs1c0YwJE4wYyQkJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEI=?= In-Reply-To: References: <87bpv9tmnx.wl%miyo@wasamon.net> Message-ID: <87iqpgswak.wl%miyo@wasamon.net> 中田先生 三好です. 説明が不足しておりまして申しわけありません. たとえば, main(){ } というプログラムで,現象が発生します. また,coinsバージョン1.4.4.1に同梱されております, coins/test/c/Array/tparray0-1.c coins/test/c/Array/tparray0.c coins/test/c/Array/tparray1.c coins/test/c/Array/tparray2-1.c coins/test/c/Array/tparray2-2.c coins/test/c/Array/tparray2.c coins/test/c/Array/tparray4.c coins/test/c/Array/tparrayJ1.c coins/test/c/Array/tpdim1.c でも同様の現象が発生することを確認しました. なお,こちらの実行環境は, Ubuntu Linux 8.10 (kernel 2.6.27-9-generic) 上の,Java(2SE 6.0) java version "1.6.0_10" Java(TM) SE Runtime Environment (build 1.6.0_10-b33) Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode) です. At Fri, 19 Dec 2008 11:47:40 +0900, Ikuo Nakata wrote: > > 三好様 > > COINSの中田です. > > 下記のTest, TestDriverで,どんなソースプログラムを > 処理したときにその現象が起きるのでしょうか. > そのような簡単なソースプログラムを教えていただけないでしょうか. > > On 2008/12/19, at 2:31, Takefumi MIYOSHI wrote: > > > > > COINS compiler users の皆様 > > > > 東京大学の三好と申します. > > > > 日頃,COINSには大変お世話になっております. > > 本日LIRを操作するプログラムを書いていて原因の分からな > > いエラーが > > 発生したため質問させていただきたく思います. > > > > coinsバージョン1.4.4.1で, > > OpCodeとしてOp.DEFLABELを持つLirNodeから辿った > > BasicBlkと > > FlowGraphのbasicBlkIterator経由で辿った同じ > > BaiscBlkの > > instrList()により返るBiListのインスタンスが異なっていて > > 困っています. > > > > 現在,coins.backend.Function中のLirNodeをループ > > で取り出しながら, > > DEFLABELに当たったところで,そのBasicBlkを取り出すコードを > > 書いているのですが, > > ここで,取り出したBasicBlkのinstrListに対し繰り > > 返し処理を > > 実行すると,例外を吐いて終了してしまいます. > > (たとえばtoString()などにおける繰り返し処理など) > > > > 一方で,FlowGraphのbasicBlkIterator()から取り出した > > BasicBlkでは, > > 同じBasicBlkのインスタンスのinstrListに対する繰 > > り返し処理が > > 正常に実行されます. > > > > 調べてみたところ両者のBasicBlkのインスンタンスは同じ > > ようなのですが, > > instrList()で取り出されるBiListのインスタンスが違って > > いるようです. > > 特にBasicBlkやLirNodeに対する処理を行っているつ > > もりはないのですが, > > > > 辿り方によってBasicBlkのinstrLirが何かしら > > 更新されてしまっているのでしょうか? > > あるいは,何か正しくないアクセスを行っているのでしょうか? > > ご教示いただけますと幸いです. > > よろしくお願いいたします. > > > > > > なお,テストのコードとして,LocalTransformerを実装す > > るクラスTestと, > > Lirにおける処理で,Testをapplyするコードを追加 > > するためにDriverを > > 継承し,compileメソッドをオーバライドした > > TestDriverを書いてみました. > > mainメソッドは,TestDriverにあります. > > > > LocalTransformerを実装するTestのdoIt(Function f, ImList > > args)で, > > > > (1) flowGraph経由でBasicBlkのinstrListにアクセ > > スした場合 > > > > Iterator it = f.flowGraph().basicBlkList.iterator(); > > while(it.hasNext()){ > > BasicBlk blk = (BasicBlk)(it.next()); > > System.out.println(blk.label()); > > System.out.println(blk); > > System.out.println(blk.instrList().hashCode()); > > System.out.println(blk.instrList()); > > } > > と, > > (2) opCodeがOp.DEFLABELのLirNodeの > > LirLabelRef経由でBasicBlkの > > instrListにアクセスした場合 > > > > Iterator it = f.lirList().iterator(); > > while(it.hasNext()){ > > LirNode node = (LirNode)(it.next()); > > if(node.opCode == Op.DEFLABEL){ > > System.out.println(((LirLabelRef)(node.kid(0))).label); > > System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk()); > > System.out.println(((LirLabelRef) > > (node.kid(0))).label.basicBlk().instrList()); > > } > > } > > というコードを書いたところ, > > (1)では,正しくリストを出力できるのに対し, > > (2)では, > > coins.backend.cfg.BasicBlk @ a31e1b > > Exception in thread "Thread-0" java.lang.NullPointerException > > at coins.backend.util.BiList.toString(BiList.java:293) > > at java.lang.String.valueOf(String.java:2827) > > at java.io.PrintStream.println(PrintStream.java:771) > > などと例外を吐いてしまいます. > > > > -- > > Takefumi MIYOSHI > > http://www.wasamon.net/miyo/ > > > > < > > Test > > .java>_______________________________________________ > > Coins-compiler-users-j mailing list > > Coins-compiler-users-j @ lists.sourceforge.jp > > http://lists.sourceforge.jp/mailman/listinfo/coins-compiler-users-j > > 中田 育男 > nakata @ kamakuranet.ne.jp > > > From tan @ watanabe.ai.to Fri Dec 19 12:02:41 2008 From: tan @ watanabe.ai.to (Tan Watanabe) Date: Fri, 19 Dec 2008 12:02:41 +0900 Subject: [Coins-compiler-users-j] =?iso-2022-jp?b?RndkOiAgQmFzaWtCbGsg?= =?iso-2022-jp?b?GyRCJFgkTiUiJS8lOyU5JE5KfUshJEskaCRrNXNGMCROMGMkJCRLGyhC?= =?iso-2022-jp?b?GyRCJEQkJCRGGyhC?= Message-ID: <6.2.3.4.2.20081219120028.02c0ceb8@pop.m4.dion.ne.jp> 三好さんからのメールを転送します。 >Date: Fri, 19 Dec 2008 02:31:46 +0900 >From: Takefumi MIYOSHI >To: coins-compiler-users-j @ lists.sourceforge.jp >Subject: [Coins-compiler-users-j] BasikBlkへのアクセスの方法による挙動 >の違いについて > >COINS compiler users の皆様 > >東京大学の三好と申します. > >日頃,COINSには大変お世話になっております. >本日LIRを操作するプログラムを書いていて原因の分からないエラーが >発生したため質問させていただきたく思います. > >coinsバージョン1.4.4.1で, >OpCodeとしてOp.DEFLABELを持つLirNodeから辿ったBasicBlkと >FlowGraphのbasicBlkIterator経由で辿った同じBaiscBlkの >instrList()により返るBiListのインスタンスが異なっていて >困っています. > >現在,coins.backend.Function中のLirNodeをループで取り出しながら, >DEFLABELに当たったところで,そのBasicBlkを取り出すコードを >書いているのですが, >ここで,取り出したBasicBlkのinstrListに対し繰り返し処理を >実行すると,例外を吐いて終了してしまいます. >(たとえばtoString()などにおける繰り返し処理など) > >一方で,FlowGraphのbasicBlkIterator()から取り出したBasicBlkでは, >同じBasicBlkのインスタンスのinstrListに対する繰り返し処理が >正常に実行されます. > >調べてみたところ両者のBasicBlkのインスンタンスは同じようなのですが, >instrList()で取り出されるBiListのインスタンスが違っているようです. >特にBasicBlkやLirNodeに対する処理を行っているつもりはないのですが, > >辿り方によってBasicBlkのinstrLirが何かしら >更新されてしまっているのでしょうか? >あるいは,何か正しくないアクセスを行っているのでしょうか? >ご教示いただけますと幸いです. >よろしくお願いいたします. > > >なお,テストのコードとして,LocalTransformerを実装するクラスTestと, >Lirにおける処理で,Testをapplyするコードを追加するためにDriverを >継承し,compileメソッドをオーバライドしたTestDriverを書いてみました. >mainメソッドは,TestDriverにあります. > >LocalTransformerを実装するTestのdoIt(Function f, ImList args)で, > >(1) flowGraph経由でBasicBlkのinstrListにアクセスした場合 > > Iterator it = f.flowGraph().basicBlkList.iterator(); > while(it.hasNext()){ > BasicBlk blk = (BasicBlk)(it.next()); > System.out.println(blk.label()); > System.out.println(blk); > System.out.println(blk.instrList().hashCode()); > System.out.println(blk.instrList()); > } >と, >(2) opCodeがOp.DEFLABELのLirNodeのLirLabelRef経由でBasicBlkの > instrListにアクセスした場合 > > Iterator it = f.lirList().iterator(); > while(it.hasNext()){ > LirNode node = (LirNode)(it.next()); > if(node.opCode == Op.DEFLABEL){ > System.out.println(((LirLabelRef)(node.kid(0))).label); > System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk()); > System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk().instrList()); > } > } >というコードを書いたところ, >(1)では,正しくリストを出力できるのに対し, >(2)では, >coins.backend.cfg.BasicBlk @ a31e1b >Exception in thread "Thread-0" java.lang.NullPointerException > at coins.backend.util.BiList.toString(BiList.java:293) > at java.lang.String.valueOf(String.java:2827) > at java.io.PrintStream.println(PrintStream.java:771) >などと例外を吐いてしまいます. > >-- > Takefumi MIYOSHI > http://www.wasamon.net/miyo/ Tan Watanabe -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: Test.java 型: application/octet-stream サイズ: 1433 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/coins-compiler-users-j/attachments/20081219/1567fae0/attachment.obj -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: TestDriver.java 型: application/octet-stream サイズ: 9034 バイト 説明: 無し URL: http://lists.sourceforge.jp/mailman/archives/coins-compiler-users-j/attachments/20081219/1567fae0/attachment-0001.obj From nakata @ kamakuranet.ne.jp Fri Dec 19 16:57:23 2008 From: nakata @ kamakuranet.ne.jp (Ikuo Nakata) Date: Fri, 19 Dec 2008 16:57:23 +0900 Subject: [Coins-compiler-users-j] =?iso-2022-jp?b?QmFzaWtCbGsbJEIkWCROGyhC?= =?iso-2022-jp?b?GyRCJSIlLyU7JTkkTkp9SyEkSyRoJGs1c0YwJE4wYyQkJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEI=?= In-Reply-To: <87iqpgswak.wl%miyo@wasamon.net> References: <87bpv9tmnx.wl%miyo@wasamon.net> <87iqpgswak.wl%miyo@wasamon.net> Message-ID: <533F8ED7-C7CD-4785-9252-8C64B1B3DFD1@kamakuranet.ne.jp> 三好様 原因が分かりました. 下記のようなことはできない設計になっております. LIRの命令列はbasic blockに入っているか, 関数全体で1列の命令列になっているか,のどちらかで 両者は共存しません. 両方存在してどちらか一方だけを変更するとおかしなことになる というのがその理由かと思います. そのようにしているのはcoins.backend.Functionの public BiList lirList() メソッドを見ると分かります.そこのコメントには If L-function is in CFG mode, changed to non-CFG automatically. とあり,両者のモードは共存しません. それをやっているのが,そのメソッドの中の lirList.concatenate(blk.instrList()); です.これでブロックの中のinstrListを1列の命令列の lirListにつないでいる のですが,concatenateメソッドがブロックの中のリストを空 にしています. On 2008/12/19, at 12:01, Takefumi MIYOSHI wrote: > > 中田先生 > > 三好です. > > 説明が不足しておりまして申しわけありません. > > たとえば, > > main(){ > } > > というプログラムで,現象が発生します. > > また,coinsバージョン1.4.4.1に同梱されております, > coins/test/c/Array/tparray0-1.c > coins/test/c/Array/tparray0.c > coins/test/c/Array/tparray1.c > coins/test/c/Array/tparray2-1.c > coins/test/c/Array/tparray2-2.c > coins/test/c/Array/tparray2.c > coins/test/c/Array/tparray4.c > coins/test/c/Array/tparrayJ1.c > coins/test/c/Array/tpdim1.c > でも同様の現象が発生することを確認しました. > > なお,こちらの実行環境は, > Ubuntu Linux 8.10 (kernel 2.6.27-9-generic) > 上の,Java(2SE 6.0) > java version "1.6.0_10" > Java(TM) SE Runtime Environment (build 1.6.0_10-b33) > Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode) > です. > > At Fri, 19 Dec 2008 11:47:40 +0900, > Ikuo Nakata wrote: >> >> 三好様 >> >> COINSの中田です. >> >> 下記のTest, TestDriverで,どんなソースプログラムを >> 処理したときにその現象が起きるのでしょうか. >> そのような簡単なソースプログラムを教えていただけないでしょ >> うか. >> >> On 2008/12/19, at 2:31, Takefumi MIYOSHI wrote: >> >>> >>> COINS compiler users の皆様 >>> >>> 東京大学の三好と申します. >>> >>> 日頃,COINSには大変お世話になっております. >>> 本日LIRを操作するプログラムを書いていて原因の分からな >>> いエラーが >>> 発生したため質問させていただきたく思います. >>> >>> coinsバージョン1.4.4.1で, >>> OpCodeとしてOp.DEFLABELを持つLirNodeから辿った >>> BasicBlkと >>> FlowGraphのbasicBlkIterator経由で辿った同じ >>> BaiscBlkの >>> instrList()により返るBiListのインスタンスが異なっていて >>> 困っています. >>> >>> 現在,coins.backend.Function中のLirNodeをループ >>> で取り出しながら, >>> DEFLABELに当たったところで,そのBasicBlkを取り出す >>> コードを >>> 書いているのですが, >>> ここで,取り出したBasicBlkのinstrListに対し繰り >>> 返し処理を >>> 実行すると,例外を吐いて終了してしまいます. >>> (たとえばtoString()などにおける繰り返し処理など) >>> >>> 一方で,FlowGraphのbasicBlkIterator()から取り >>> 出した >>> BasicBlkでは, >>> 同じBasicBlkのインスタンスのinstrListに対する繰 >>> り返し処理が >>> 正常に実行されます. >>> >>> 調べてみたところ両者のBasicBlkのインスンタンスは同じ >>> ようなのですが, >>> instrList()で取り出されるBiListのインスタンスが違って >>> いるようです. >>> 特にBasicBlkやLirNodeに対する処理を行っているつ >>> もりはないのですが, >>> >>> 辿り方によってBasicBlkのinstrLirが何かしら >>> 更新されてしまっているのでしょうか? >>> あるいは,何か正しくないアクセスを行っているのでしょうか? >>> ご教示いただけますと幸いです. >>> よろしくお願いいたします. >>> >>> >>> なお,テストのコードとして,LocalTransformerを実装す >>> るクラスTestと, >>> Lirにおける処理で,Testをapplyするコードを追加 >>> するためにDriverを >>> 継承し,compileメソッドをオーバライドした >>> TestDriverを書いてみました. >>> mainメソッドは,TestDriverにあります. >>> >>> LocalTransformerを実装するTestのdoIt(Function f, ImList >>> args)で, >>> >>> (1) flowGraph経由でBasicBlkのinstrListにアクセ >>> スした場合 >>> >>> Iterator it = f.flowGraph().basicBlkList.iterator(); >>> while(it.hasNext()){ >>> BasicBlk blk = (BasicBlk)(it.next()); >>> System.out.println(blk.label()); >>> System.out.println(blk); >>> System.out.println(blk.instrList().hashCode()); >>> System.out.println(blk.instrList()); >>> } >>> と, >>> (2) opCodeがOp.DEFLABELのLirNodeの >>> LirLabelRef経由でBasicBlkの >>> instrListにアクセスした場合 >>> >>> Iterator it = f.lirList().iterator(); >>> while(it.hasNext()){ >>> LirNode node = (LirNode)(it.next()); >>> if(node.opCode == Op.DEFLABEL){ >>> System.out.println(((LirLabelRef)(node.kid(0))).label); >>> System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk()); >>> System.out.println(((LirLabelRef) >>> (node.kid(0))).label.basicBlk().instrList()); >>> } >>> } >>> というコードを書いたところ, >>> (1)では,正しくリストを出力できるのに対し, >>> (2)では, >>> coins.backend.cfg.BasicBlk @ a31e1b >>> Exception in thread "Thread-0" java.lang.NullPointerException >>> at coins.backend.util.BiList.toString(BiList.java:293) >>> at java.lang.String.valueOf(String.java:2827) >>> at java.io.PrintStream.println(PrintStream.java:771) >>> などと例外を吐いてしまいます. >>> >>> -- >>> Takefumi MIYOSHI >>> http://www.wasamon.net/miyo/ >>> >>> < >>> Test >>> .java >>> >_______________________________________________ >>> Coins-compiler-users-j mailing list >>> Coins-compiler-users-j @ lists.sourceforge.jp >>> http://lists.sourceforge.jp/mailman/listinfo/coins-compiler-users-j >> >> 中田 育男 >> nakata @ kamakuranet.ne.jp >> >> >> 中田 育男 nakata @ kamakuranet.ne.jp -------------- next part -------------- HTMLの添付ファイルを保管しました... URL: http://lists.sourceforge.jp/mailman/archives/coins-compiler-users-j/attachments/20081219/5db57b76/attachment-0001.htm From miyo @ wasamon.net Sat Dec 20 07:54:03 2008 From: miyo @ wasamon.net (Takefumi MIYOSHI) Date: Sat, 20 Dec 2008 07:54:03 +0900 Subject: [Coins-compiler-users-j] =?iso-2022-jp?b?QmFzaWtCbGsbJEIkWCROGyhC?= =?iso-2022-jp?b?GyRCJSIlLyU7JTkkTkp9SyEkSyRoJGs1c0YwJE4wYyQkJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEI=?= In-Reply-To: <533F8ED7-C7CD-4785-9252-8C64B1B3DFD1@kamakuranet.ne.jp> References: <87bpv9tmnx.wl%miyo@wasamon.net> <87iqpgswak.wl%miyo@wasamon.net> <533F8ED7-C7CD-4785-9252-8C64B1B3DFD1@kamakuranet.ne.jp> Message-ID: <87d4fnsrn8.wl%miyo@wasamon.net> 中田先生 三好です. なるほど,とてもよく分かりました. LIR命令木を操作する場合のLIR列とCFGの一貫性は どうなっているのかも疑問だったのですが, それについても理解することができました. ありがとうございます. At Fri, 19 Dec 2008 16:57:23 +0900, Ikuo Nakata wrote: > > 三好様 > > 原因が分かりました. > 下記のようなことはできない設計になっております. > > LIRの命令列はbasic blockに入っているか, > 関数全体で1列の命令列になっているか,のどちらかで > 両者は共存しません. > > 両方存在してどちらか一方だけを変更するとおかしなことになる > というのがその理由かと思います. > > そのようにしているのはcoins.backend.Functionの > public BiList lirList() > メソッドを見ると分かります.そこのコメントには > > If L-function is in CFG mode, changed to non-CFG automatically. > > とあり,両者のモードは共存しません. > > それをやっているのが,そのメソッドの中の > > lirList.concatenate(blk.instrList()); > > です.これでブロックの中のinstrListを1列の命令列の > lirListにつないでいる > のですが,concatenateメソッドがブロックの中のリストを空 > にしています. > > On 2008/12/19, at 12:01, Takefumi MIYOSHI wrote: > > > > > 中田先生 > > > > 三好です. > > > > 説明が不足しておりまして申しわけありません. > > > > たとえば, > > > > main(){ > > } > > > > というプログラムで,現象が発生します. > > > > また,coinsバージョン1.4.4.1に同梱されております, > > coins/test/c/Array/tparray0-1.c > > coins/test/c/Array/tparray0.c > > coins/test/c/Array/tparray1.c > > coins/test/c/Array/tparray2-1.c > > coins/test/c/Array/tparray2-2.c > > coins/test/c/Array/tparray2.c > > coins/test/c/Array/tparray4.c > > coins/test/c/Array/tparrayJ1.c > > coins/test/c/Array/tpdim1.c > > でも同様の現象が発生することを確認しました. > > > > なお,こちらの実行環境は, > > Ubuntu Linux 8.10 (kernel 2.6.27-9-generic) > > 上の,Java(2SE 6.0) > > java version "1.6.0_10" > > Java(TM) SE Runtime Environment (build 1.6.0_10-b33) > > Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode) > > です. > > > > At Fri, 19 Dec 2008 11:47:40 +0900, > > Ikuo Nakata wrote: > >> > >> 三好様 > >> > >> COINSの中田です. > >> > >> 下記のTest, TestDriverで,どんなソースプログラムを > >> 処理したときにその現象が起きるのでしょうか. > >> そのような簡単なソースプログラムを教えていただけないでしょ > >> うか. > >> > >> On 2008/12/19, at 2:31, Takefumi MIYOSHI wrote: > >> > >>> > >>> COINS compiler users の皆様 > >>> > >>> 東京大学の三好と申します. > >>> > >>> 日頃,COINSには大変お世話になっております. > >>> 本日LIRを操作するプログラムを書いていて原因の分からな > >>> いエラーが > >>> 発生したため質問させていただきたく思います. > >>> > >>> coinsバージョン1.4.4.1で, > >>> OpCodeとしてOp.DEFLABELを持つLirNodeから辿った > >>> BasicBlkと > >>> FlowGraphのbasicBlkIterator経由で辿った同じ > >>> BaiscBlkの > >>> instrList()により返るBiListのインスタンスが異なっていて > >>> 困っています. > >>> > >>> 現在,coins.backend.Function中のLirNodeをループ > >>> で取り出しながら, > >>> DEFLABELに当たったところで,そのBasicBlkを取り出す > >>> コードを > >>> 書いているのですが, > >>> ここで,取り出したBasicBlkのinstrListに対し繰り > >>> 返し処理を > >>> 実行すると,例外を吐いて終了してしまいます. > >>> (たとえばtoString()などにおける繰り返し処理など) > >>> > >>> 一方で,FlowGraphのbasicBlkIterator()から取り > >>> 出した > >>> BasicBlkでは, > >>> 同じBasicBlkのインスタンスのinstrListに対する繰 > >>> り返し処理が > >>> 正常に実行されます. > >>> > >>> 調べてみたところ両者のBasicBlkのインスンタンスは同じ > >>> ようなのですが, > >>> instrList()で取り出されるBiListのインスタンスが違って > >>> いるようです. > >>> 特にBasicBlkやLirNodeに対する処理を行っているつ > >>> もりはないのですが, > >>> > >>> 辿り方によってBasicBlkのinstrLirが何かしら > >>> 更新されてしまっているのでしょうか? > >>> あるいは,何か正しくないアクセスを行っているのでしょうか? > >>> ご教示いただけますと幸いです. > >>> よろしくお願いいたします. > >>> > >>> > >>> なお,テストのコードとして,LocalTransformerを実装す > >>> るクラスTestと, > >>> Lirにおける処理で,Testをapplyするコードを追加 > >>> するためにDriverを > >>> 継承し,compileメソッドをオーバライドした > >>> TestDriverを書いてみました. > >>> mainメソッドは,TestDriverにあります. > >>> > >>> LocalTransformerを実装するTestのdoIt(Function f, ImList > >>> args)で, > >>> > >>> (1) flowGraph経由でBasicBlkのinstrListにアクセ > >>> スした場合 > >>> > >>> Iterator it = f.flowGraph().basicBlkList.iterator(); > >>> while(it.hasNext()){ > >>> BasicBlk blk = (BasicBlk)(it.next()); > >>> System.out.println(blk.label()); > >>> System.out.println(blk); > >>> System.out.println(blk.instrList().hashCode()); > >>> System.out.println(blk.instrList()); > >>> } > >>> と, > >>> (2) opCodeがOp.DEFLABELのLirNodeの > >>> LirLabelRef経由でBasicBlkの > >>> instrListにアクセスした場合 > >>> > >>> Iterator it = f.lirList().iterator(); > >>> while(it.hasNext()){ > >>> LirNode node = (LirNode)(it.next()); > >>> if(node.opCode == Op.DEFLABEL){ > >>> System.out.println(((LirLabelRef)(node.kid(0))).label); > >>> System.out.println(((LirLabelRef)(node.kid(0))).label.basicBlk()); > >>> System.out.println(((LirLabelRef) > >>> (node.kid(0))).label.basicBlk().instrList()); > >>> } > >>> } > >>> というコードを書いたところ, > >>> (1)では,正しくリストを出力できるのに対し, > >>> (2)では, > >>> coins.backend.cfg.BasicBlk @ a31e1b > >>> Exception in thread "Thread-0" java.lang.NullPointerException > >>> at coins.backend.util.BiList.toString(BiList.java:293) > >>> at java.lang.String.valueOf(String.java:2827) > >>> at java.io.PrintStream.println(PrintStream.java:771) > >>> などと例外を吐いてしまいます. > >>> > >>> -- > >>> Takefumi MIYOSHI > >>> http://www.wasamon.net/miyo/ > >>> > >>> < > >>> Test > >>> .java > >>> >_______________________________________________ > >>> Coins-compiler-users-j mailing list > >>> Coins-compiler-users-j @ lists.sourceforge.jp > >>> http://lists.sourceforge.jp/mailman/listinfo/coins-compiler-users-j > >> > >> 中田 育男 > >> nakata @ kamakuranet.ne.jp > >> > >> > >> > > 中田 育男 > nakata @ kamakuranet.ne.jp > > >