[Mspgcc-users] Whole program optimization / Link time optimization
Hi, Can anybody comment on LTO or WPO’s effect on optimizing for space - I have run out of flash memory and would rather not refactor my code at the moment. I only need 10 more bytes or so, for today at least... Yes it’s not ideal, such is life. I am using mspgcc 20120406-p20120911 and when I pass `–flto` in both the compilation and link stages it compiles fine but the linker complains “unrecognized option '-plugin'”. I assume LTO isn’t supported at this time? So then I skipped intermediate .o files altogether and used the following command: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -o Coyote.elf all c files I get the expected message that my code does not fit. Using –fwhole-program: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -fwhole-program -o Coyote.elf all c files I get the following output: C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o: In function `main': main.c:(.init9+0x2): undefined reference to `systemDisableInterrupts' main.c:(.init9+0x6): undefined reference to `PlatformInit' main.c:(.init9+0xc): undefined reference to `systemEnableCrystalClock' main.c:(.init9+0x2a): undefined reference to `delay' main.c:(.init9+0x44): undefined reference to `delay' main.c:(.init9+0x5e): undefined reference to `delay' main.c:(.init9+0x78): undefined reference to `delay' main.c:(.init9+0x80): undefined reference to `delay' C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o:main.c:(.init9+0xa4): more undefined references to `delay' follow C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o: In function `main': main.c:(.init9+0xf8): undefined reference to `batteryGetStateOfCharge' main.c:(.init9+0x104): undefined reference to `chargeIsPresent' main.c:(.init9+0x118): undefined reference to `delay' main.c:(.init9+0x134): undefined reference to `delay' main.c:(.init9+0x138): undefined reference to `infomemValidate' main.c:(.init9+0x13c): undefined reference to `logicMainLoop' collect2: ld returned 1 exit status I then created two files, test1.c and test2.c test1.c: --- void test2(void); void test1(void) { test2(); } int main() { test2(); return 0; } --- test2.c: --- void test1(void); void test2(void) { test1(); } --- Compiling them: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -fwhole-program -o test.elf test1.c test2.c C:\Users\WAYNEU~1\AppData\Local\Temp\ccs3TYlw.o: In function `main': test1.c:(.init9+0x2): undefined reference to `test2' collect2: ld returned 1 exit status Have I done something wrong? In the meantime, I will refactor. I don’t even expect WPO/LTO to give me much of a space saving anyway. - Wayne -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] Whole program optimization / Link time optimization
I've never tested mspgcc for any whole-program optimizations. A common and supported way to reduce space by eliminating unused material is -ffunction-sections -fdata-sections during compilation and -Wl,-gc-sections during linking. Peter On Sun, Apr 21, 2013 at 8:13 PM, Wayne Uroda w.ur...@gmail.com wrote: Hi, Can anybody comment on LTO or WPO’s effect on optimizing for space - I have run out of flash memory and would rather not refactor my code at the moment. I only need 10 more bytes or so, for today at least... Yes it’s not ideal, such is life. I am using mspgcc 20120406-p20120911 and when I pass `–flto` in both the compilation and link stages it compiles fine but the linker complains “unrecognized option '-plugin'”. I assume LTO isn’t supported at this time? So then I skipped intermediate .o files altogether and used the following command: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -o Coyote.elf all c files I get the expected message that my code does not fit. Using –fwhole-program: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -fwhole-program -o Coyote.elf all c files I get the following output: C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o: In function `main': main.c:(.init9+0x2): undefined reference to `systemDisableInterrupts' main.c:(.init9+0x6): undefined reference to `PlatformInit' main.c:(.init9+0xc): undefined reference to `systemEnableCrystalClock' main.c:(.init9+0x2a): undefined reference to `delay' main.c:(.init9+0x44): undefined reference to `delay' main.c:(.init9+0x5e): undefined reference to `delay' main.c:(.init9+0x78): undefined reference to `delay' main.c:(.init9+0x80): undefined reference to `delay' C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o:main.c:(.init9+0xa4): more undefined references to `delay' follow C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o: In function `main': main.c:(.init9+0xf8): undefined reference to `batteryGetStateOfCharge' main.c:(.init9+0x104): undefined reference to `chargeIsPresent' main.c:(.init9+0x118): undefined reference to `delay' main.c:(.init9+0x134): undefined reference to `delay' main.c:(.init9+0x138): undefined reference to `infomemValidate' main.c:(.init9+0x13c): undefined reference to `logicMainLoop' collect2: ld returned 1 exit status I then created two files, test1.c and test2.c test1.c: --- void test2(void); void test1(void) { test2(); } int main() { test2(); return 0; } --- test2.c: --- void test1(void); void test2(void) { test1(); } --- Compiling them: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -fwhole-program -o test.elf test1.c test2.c C:\Users\WAYNEU~1\AppData\Local\Temp\ccs3TYlw.o: In function `main': test1.c:(.init9+0x2): undefined reference to `test2' collect2: ld returned 1 exit status Have I done something wrong? In the meantime, I will refactor. I don’t even expect WPO/LTO to give me much of a space saving anyway. - Wayne -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] Whole program optimization / Link time optimization
Thanks, it works great! - Wayne From: Peter Bigot Sent: Monday, April 22, 2013 11:17 AM To: Wayne Uroda Cc: MSPGCC list Subject: Re: [Mspgcc-users] Whole program optimization / Link time optimization I've never tested mspgcc for any whole-program optimizations. A common and supported way to reduce space by eliminating unused material is -ffunction-sections -fdata-sections during compilation and -Wl,-gc-sections during linking. Peter On Sun, Apr 21, 2013 at 8:13 PM, Wayne Uroda w.ur...@gmail.com wrote: Hi, Can anybody comment on LTO or WPO’s effect on optimizing for space - I have run out of flash memory and would rather not refactor my code at the moment. I only need 10 more bytes or so, for today at least... Yes it’s not ideal, such is life. I am using mspgcc 20120406-p20120911 and when I pass `–flto` in both the compilation and link stages it compiles fine but the linker complains “unrecognized option '-plugin'”. I assume LTO isn’t supported at this time? So then I skipped intermediate .o files altogether and used the following command: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -o Coyote.elf all c files I get the expected message that my code does not fit. Using –fwhole-program: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -fwhole-program -o Coyote.elf all c files I get the following output: C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o: In function `main': main.c:(.init9+0x2): undefined reference to `systemDisableInterrupts' main.c:(.init9+0x6): undefined reference to `PlatformInit' main.c:(.init9+0xc): undefined reference to `systemEnableCrystalClock' main.c:(.init9+0x2a): undefined reference to `delay' main.c:(.init9+0x44): undefined reference to `delay' main.c:(.init9+0x5e): undefined reference to `delay' main.c:(.init9+0x78): undefined reference to `delay' main.c:(.init9+0x80): undefined reference to `delay' C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o:main.c:(.init9+0xa4): more undefined references to `delay' follow C:\Users\WAYNEU~1\AppData\Local\Temp\cclYmoCC.o: In function `main': main.c:(.init9+0xf8): undefined reference to `batteryGetStateOfCharge' main.c:(.init9+0x104): undefined reference to `chargeIsPresent' main.c:(.init9+0x118): undefined reference to `delay' main.c:(.init9+0x134): undefined reference to `delay' main.c:(.init9+0x138): undefined reference to `infomemValidate' main.c:(.init9+0x13c): undefined reference to `logicMainLoop' collect2: ld returned 1 exit status I then created two files, test1.c and test2.c test1.c: --- void test2(void); void test1(void) { test2(); } int main() { test2(); return 0; } --- test2.c: --- void test1(void); void test2(void) { test1(); } --- Compiling them: msp430-gcc -mmcu=msp430f233 -Os -Wall -Werror -fwhole-program -o test.elf test1.c test2.c C:\Users\WAYNEU~1\AppData\Local\Temp\ccs3TYlw.o: In function `main': test1.c:(.init9+0x2): undefined reference to `test2' collect2: ld returned 1 exit status Have I done something wrong? In the meantime, I will refactor. I don’t even expect WPO/LTO to give me much of a space saving anyway. - Wayne -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users