From: Kristis M. <kri...@as...> - 2006-12-15 23:11:46
|
Hello, I'm trying to use CIL to produce code that does the following: struct a_s { int a; long b; }; void functionA(struct a_s var) { .... } int main(void) { functionA((struct a_s) {a: 5, b: 6} ); } I know I can produce "something similar" if I were to first makeTempVar, and then manually set the values 5 and 6 into the temporary variable fields: int main(void) { struct a_s var; var.a = 5; var.a = 6; functionA( var ); } But the result is not quite the same. This second way of doing this takes up space on the local stack frame of "main", does not embed the values 5 and 6 in the text segment, and adds the extra copying overhead. Arguably, all this overhead could be optimized away by an intelligent compiler. To be on the safe side, I'm trying to directly produce a struct as a function argument. Is there a way to do this in CIL ? If not, should there be ? It seems that "type constant" does not permit one to define constant values as fields of a struct. Thanks, Kristis |
From: George N. <ne...@ee...> - 2006-12-18 17:36:59
|
CIL is a simplified representation for C programs with many C constructs lowered into equivalent code. One of the things that cannot be represented in C is the structure literals. Structure literals are not even legal ISO C, an extra reason to compile them away. I am not sure I understand your objections to storing the structure first. The comment about embedding 5 and 6 in the text segment seems strange.=20 George.=20 =20 > -----Original Message----- > From: cil...@li...=20 > [mailto:cil...@li...] On Behalf Of=20 > Kristis Makris > Sent: Friday, December 15, 2006 3:17 PM > To: cil...@li... > Subject: [CIL users] Passing structs as function arguments >=20 > Hello, >=20 > I'm trying to use CIL to produce code that does the following: >=20 > struct a_s { > int a; > long b; > }; >=20 > void functionA(struct a_s var) > { > .... > } >=20 > int main(void) > { > functionA((struct a_s) {a: 5, b: 6} ); } >=20 >=20 > I know I can produce "something similar" if I were to first=20 > makeTempVar, and then manually set the values 5 and 6 into=20 > the temporary variable > fields: >=20 > int main(void) > { > struct a_s var; >=20 > var.a =3D 5; > var.a =3D 6; >=20 > functionA( var ); > } >=20 >=20 > But the result is not quite the same. This second way of=20 > doing this takes up space on the local stack frame of "main",=20 > does not embed the values 5 and 6 in the text segment, and=20 > adds the extra copying overhead. Arguably, all this overhead=20 > could be optimized away by an intelligent compiler. To be on=20 > the safe side, I'm trying to directly produce a struct as a=20 > function argument. >=20 > Is there a way to do this in CIL ? If not, should there be ? >=20 > It seems that "type constant" does not permit one to define=20 > constant values as fields of a struct. >=20 > Thanks, > Kristis >=20 >=20 > -------------------------------------------------------------- > ----------- > Take Surveys. Earn Cash. Influence the Future of IT Join=20 > SourceForge.net's Techsay panel and you'll get the chance to=20 > share your opinions on IT & business topics through brief=20 > surveys - and earn cash=20 > http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge &CID=3DDEVDEV > _______________________________________________ > CIL-users mailing list > CIL...@li... > https://lists.sourceforge.net/lists/listinfo/cil-users >=20 |
From: Kristis M. <kri...@as...> - 2007-01-20 00:53:17
|
On Mon, 2006-12-18 at 09:36 -0800, George Necula wrote: > CIL is a simplified representation for C programs with many C > constructs lowered into equivalent code. One of the things that cannot > be represented in C is the structure literals. Structure literals are > not even legal ISO C, an extra reason to compile them away. I really wish I could issue this in CIL, even if it wasn't legal ISO C: functionA((struct a_s) {a: 5, b: 6} ); It would allow one to replace one Call with another Call, instead of one Call with 2 assignments and a call. The latter can cause problems if you apply a lot of transformations, as it implies a certain sequence. |