| Build system |
| ------------ |
| |
| Determination of the target triple should be moved from the Makefile to a |
| configure script. |
| |
| The plugin revision is created from the subversion revision. What if people |
| are using git etc? Maybe it should be calculated in a configure script, but |
| since that might not get run often perhaps the Makefile is the best place. |
| |
| Target subdirectories should have their own Makefiles, instead of assuming |
| that there's only one source file and that it's called llvm-target.cpp. |
| |
| Currently the target directory (eg: i386) is calculated from the target triple |
| (eg: x86_64-unknown-linux-gnu) using the "target" tool. This should be done |
| from a configure script, rather from the Makefile. |
| |
| Define LLVM_TARGET_NAME from the Makefile rather than being specified in |
| llvm-target.h. Maybe LLVM_TARGET_INTRINSIC_PREFIX could go too. An annoyance |
| is that the target tool returns "x86" while what is needed is "X86". |
| |
| Optimizations |
| ------------- |
| |
| Consider using separate caches for types and globals. |
| |
| Correctness |
| ----------- |
| |
| GCC now has per-function optimization levels. Add support for this. |
| |
| Unify the code that determines which LLVM linkage type to use. Need to do |
| a bunch of experimenting to work out how the mapping should really be done. |
| |
| Stop hooking directly into target specific ABI code (which requires patching |
| gcc). Instead, either try to get ABI info from the gcc hooks (which may mean |
| translating RTL) or reuse the clang code. |
| |
| Testing |
| ------- |
| |
| Add nightly testers that build using dragonegg. |
| |
| Move the old FrontendXYZ tests from LLVM to dragonegg. |
| |
| Add a "compilator" lit test mode that compiles everything it is |
| pointed at using gcc and dragonegg, and generates "fail" if gcc |
| compiles something but dragonegg doesn't (and vice versa). Point |
| the compilator at the gcc and clang testsuites. Have some buildbots |
| that do this. |
| |
| Make the dragonegg testsuite public. Have some buildbots run it. |
| |
| Have the dragonegg self-host script also check that "make check" |
| is working fine after LLVM is built. |
| |
| Have the dragonegg buildbots use a proper buildbot script rather than |
| just handing everything off to the dragonegg self-host script. |
| |
| Code quality |
| ------------ |
| |
| Consider not extending GEP indices to "pointer type" since GEP indices can have |
| any integer type now (except for struct GEP's - there the type must be i32). |
| Note that GEP indices are implicitly sign extended, so unsigned indices still |
| need to be explicitly zero extended to pointer size (is this always done now?). |
| |
| Clarify and extend the distinction between gimple registers and "the rest", |
| the rest being mostly references. |
| |
| BIT_FIELD_REF is used to extract (and presumably insert) vector elements. |
| Consider turning this directly into the corresponding vector operations. |
| |
| Work in terms of units rather than octets (i8). For example, if the target |
| has a 16 bit byte, then use i16 for byte addressing. |
| |
| Add language specific flags, for example that C++ uses the one-definition rule. |
| |
| Features |
| -------- |
| |
| Output proper debug info rather than throwing most of it away. Provide column |
| numbers in location info. |
| |
| Many x86 specific builtins are not supported, even though it would be easy to |
| add support for some of them, for example the 256 bit versions of builtins we |
| do support. Improve this. |
| |
| The GCC builtin lowering outputs helpful warnings (for example, |
| 20081109_0.c:3:35: warning: attempt to free a non-heap object ‘bar’, |
| see maybe_emit_free_warning), but we don't. Improve this somehow. |
| |
| Work out how to write object files directly. Currently this can't be |
| done because gcc insists on running the assembler on compiler output |
| when using -c. |
| |
| Make LTO transparent. One part of this working out how to write bitcode when |
| using -c, which runs into trouble because gcc insists on running the assembler |
| on compiler output. Another part is looking into the possibility of encoding |
| bitcode in ELF sections like gcc does for gimple when doing LTO. |
| |
| Add support for address spaces. |
| |
| Add support for non-temporal stores. |
| |
| Add type based alias analysis tags in more cases. Extend LLVM's tbaa |
| representation so it can represent a DAG and generate tags for struct |
| types too. |