[Mspgcc-users] Whole program optimization / Link time optimization

2013-04-21 Thread Wayne Uroda
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

2013-04-21 Thread Peter Bigot
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

2013-04-21 Thread Wayne Uroda
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