Open Research Compiler Release 1.1.0
This ORC 1.1 release is an update release following the 1.0 compiler, released on Jan 25, 2002. Major focuses of this release are InterProcedural Optimization and performance enhancement. With this release, IPA phase is now fully functional. Details will be described below. Other focuses also include native build of this compiler on IA64 machines. Whirl feedback profile and backend edge profile are fully functional. Numerous performance enhancements, plus more tools to help performance study and enhancement. With this release we have measured an average of 10+% performance improvement compared with 1.0 release of ORC.
This release is not a full release. Unlike the 1.0 release, we have not gone through a "pre-release testing cycle" involving other research institutions. Nonetheless, we have done extensive testing to the best of timing and resources at our disposal. Known problems and limitations are listed at the end of this note.
InterProcedural Analysis and Optimization (IPA) is an optimization phase that performs analysis and optimizations across function, file and dynamic shared objects boundaries. All classical optimizations belong to this class (such as constant propagation, inlining, alias analysis, dead variable elimination, dead function elimination, ...) are implemented. Other less known, nonetheless very important optimizations that are ABI specific, such as gp-rel variable identification, dynamic shared object side effects analysis, ... are also performed.
Performance tuning with respect to IPA has not been done. Users will find that IPA's contribution to performance is not as high as expected at this point. More efforts will be spent to tune IPA's performance contribution for our next release. We are also eager to hear your input.
The performance of the code produced by ORC in this release has improved over ORC 1.0. A number of enhancements to machine dependent and independent optimizations have been implemented in the code generation, global optimization, and other components. New optimizations have been included and existing optimizations have been tuned to better exploit Itanium features. The performance of ORC is expected to be further improved in future releases.
Since there has been a lot of requests to use a natively built ORC compiler, we have made a natively built compiler based on source of this 1.1 release. Due to limitations in machine resources, we have not used the native built compiler as much as the cross built compiler, let us know if you find problems with the native compiler.
latest information and update for the ORC compilers can be found in http://sourceforge.net/projects/ipf-orc. The packages included in this
distribution represent a work in progress.
send problem reports to http://sourceforge.net/projects/ipf-orc web site.
How to download, install compilers or build compilers from source
This release consists of three tar balls:
orc-1.1.0.tgz (Cross built compiler binary)
orc-1.1.0.native.tgz (Native built compiler binary)
orc-1.1.0-sources.tgz (Source tree diff. from Pro64™ source)
Detail contents of the tar balls are the same as that of 1.0 release.
Note that the native built binary is built with -O0, hence the compile time is slower than that could have been.
Download from this URL:
Download, build and installation of this compiler release follows similar procedure as described in readme file for release 1.0. Simply replace the string "1.0.0" with "1.1.0" where appropriate. If you choose to replace the 1.0 compiler (source or binary) with this compiler, simply download the source or binary and place that on top of the 1.0 directories. Nevertheless, there are some minor changes in the setup process, as noted below:
1. You do not need super-user permission to build/install the source and binary.
2. The names of the install scripts for source/binary may not be the same, but all follow the naming convention of "install*".
In most cases you can simply run the install scripts and follow the prompted instructions.
3. After you build the compiler, you will need to set up the environment variable $TOOLROOT first before running the "INSTALL" script
to install the built binary. You will also need to set $PATH and $LD_LIBRARY_PATH correctly to use the compiler.
$TOOLROOT is where you install the compiler binaries
You need to add $TOOLROOT/usr/orccbin to $PATH
You need to add $TOOLROOT/usr/lib/, $TOOLROOT/usr/lib/gcc-lib/ia64-orc-linux/orcc-1.0/ to $LD_LIBRARY_PATH
You can edit your shell configuration file according to the sample script "shrc" provided in the binary tar ball, or execute it by:
4. The compiler drivers "orcc", "orCC", etc. will be installed in $TOOLROOT/usr/orccbin.
For instructions on installing, using or building of the ORC compilers, please refer to readme-release-1.0.0.htm
Known Problems and limitations
We have tested the compilers to the best of our knowledge. The following combination of options have been tested on a collection of open sourced benchmarks such as Dhrystone, Linpack, Olden, Spec2Kint ...
-O3 + -IPA
-O3 + edge profile
-O3 + -IPA + whirl profile
-O3 + -IPA + edge profile
-O3 + -IPA + edge profile + whirl profile
They all passed execution, except 4 cases where execution either failed or needed some change in environment (such as library).
We have also tested Spec2Kfp with -O2/-O3 and all passed.
A full description of each known problem is listed in Appendix B.
For issues with installation and usage of the compiler, we request that users first go through the mail alias email@example.com. This will help us respond to the issues in a more timely fashion without dropping anyone. We also strongly suggest you to sign onto the firstname.lastname@example.org. For issues related to the Pro64™ compiler, please go to mailing list email@example.com.
Doing a native Build
Before doing the build make sure you have permissions
in the tree where you will be doing the builds. You
can do this by:
%chown -R your_username osprey1.0
A sample makefile has been provided for your convenience
to do a full build of the NATIVE components:
%make build -f Make.native
Each compiler component may also be built separately as similar to cross build, except the directory will be targia64_ia64_nodebug, instead of targia32_ia64_nodebug. Please refer to description in readme-release-1.0.0 file.
Note that you still need to install the native built binary first to build the native libraries.
You can use the provided script INSTALL.native to install native built compiler.
IA64 NATIVE LIBRARIES
To use libinstr.a and libcginstr.a on an IA-64 system, you still need to build these two libraries under
NUE environment. We have provided the correct versions in the binary tar ball for your convenience.
Appendix B: Problems and work arounds
The following is a full list of known problems found during testing of the evaluation release binaries:
Description of problem: Compilation failure, out of memory
Name of program: 252.eon
Option that cause failure: O2/O3 + IPA + Whirl Profiling Instrumentation
(i.e. -O3 -IPA -fb_create fb_file_name -fb_type=1 -fb_phase=0)
Work around: Turn off IPA and add -INLINE:none in the instrumentation phase
(i.e. -O3 -INLINE:none -fb_create fb_file_name -fb_type=1 -fb_phase=0)
Description of problem: Runtime error, core dumped
Name of program: 176.gcc 197.parser
Option that cause failure: O2/O3 + IPA + Edge Profiling Annotation
(i.e. -O3 -IPA -fb_opt fb_file_name -fb_type=2 -fb_phase=4)
Work around: None
The GNU assembler version (2.9-ia64-000216) distributed with NUE is known to have incompatibility problems. We have included a working version (2.9-ia64-000717) in the source tar ball for your convenience. You need to replace /nue/usr/bin/as with this new version.
We have found problems in using different versions of "libgcc.a", e.g. the version on the IA-64 system, the version distributed with NUE, the version distributed with Pro64™, the version built by orcc under NUE as described in readme-release-1.0.0. We have chosen to include the Pro64™ version in the source tar ball for your convenience. Nevertheless, if edge profile is enabled, you need to use the version distributed with NUE as a work-around. Due to the same reason, we have also included a pre-built "libfortran.a". You can follow the same instructions in readme-release-1.0.0 file to build and install native library components, except that the above two libraries will not be re-built by default.
Description of problem: Compilation failure, "libgcc.a" format not recognized
Name of program: 252.eon
Option that cause failure: -IPA
Work around: Use the pre-built version of "libgcc.a" included in source tar ball
Description of problem: Compilation failure, undefined reference to ' __throw'
Name of program: All (when edge profile is enabled)
Option that cause failure: Edge Profiling
(i.e. -fb_create fb_file_name -fb_type=2 -fb_phase=4)
Work around: Use the version distributed with NUE (under /nue/usr/lib/gcc-lib/ia64-hp-linux/2.9-ia64-000216/)
Description of problem: Runtime error, result miscompare
Name of program: fma3d, sixtrack, galgel
Option that cause failure: O0/O2/O3
Work around: Use the pre-built version of "libfortran.a" included in source tar ball
Appendix C: Acknowledgements
We have benefited from postings, advices and fixes by many individuals. They have contributed to the success of this release. There are many to list and we are sure to have missed some. The friends of ORC list is an attempt to list those who have helped and is by no means exhaustive. We will continue to update this list, let us know if we missed you.
Copyright and Legal Information
Intel and Itanium are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.
[GOTO TOP OF DOCUMENT]