hello compiles with -O3 but not -O4

Trivial hello world program compiles with -O3, but with -O4:
(BTW, is there a guide to what different -On mean?)

llvm-g++ -O4 Hello.cc -o Hello -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../llvm-gcc4.2-2.4.source/configure --program-prefix=llvm- --enable-llvm=/home/nbecker/llvm-2.4 --enable-languages=c,c++
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5623) (LLVM build)
/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.2.1/cc1plus -quiet -v -D_GNU_SOURCE Hello.cc -emit-llvm-bc -o /tmp/ccSmWWEd.o -quiet -dumpbase Hello.cc -mtune=generic -auxbase Hello -O4 -version
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../x86_64-unknown-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/x86_64-unknown-linux-gnu
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/backward
/usr/local/include
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/include
/usr/include
End of search list.
GNU C++ version 4.2.1 (Based on Apple Inc. build 5623) (LLVM build) (x86_64-unknown-linux-gnu)
  compiled by GNU C version 4.2.1 (Based on Apple Inc. build 5623) (LLVM build).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 26eb4db010da15498df7bcf5e48c8f45
/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.2.1/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o Hello /usr/lib/../lib64/crt1.o /usr/lib/../lib64/crti.o /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/crtbegin.o -L/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1 -L/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/../../.. /tmp/ccSmWWEd.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.2.1/crtend.o /usr/lib/../lib64/crtn.o
/tmp/ccSmWWEd.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status

Correct. O4 emits bytecode. Your linker should be able to "understand"
LLVM IR in .o files.