Re: Whole program optimization / Link time optimization

"Wayne Uroda" <[email protected]>
Newsgroups gmane.comp.hardware.texas-instruments.msp430.gcc.user
Message-ID <[email protected]>
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 <[email protected]> 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
  [email protected]
  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
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.