LLVM backend for 6502
Go to file
Evan Cheng 1606e8e4cd Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues.
1. ConstantPoolSDNode alignment field is log2 value of the alignment requirement. This is not consistent with other SDNode variants.
2. MachineConstantPool alignment field is also a log2 value.
3. However, some places are creating ConstantPoolSDNode with alignment value rather than log2 values. This creates entries with artificially large alignments, e.g. 256 for SSE vector values.
4. Constant pool entry offsets are computed when they are created. However, asm printer group them by sections. That means the offsets are no longer valid. However, asm printer uses them to determine size of padding between entries.
5. Asm printer uses expensive data structure multimap to track constant pool entries by sections.
6. Asm printer iterate over SmallPtrSet when it's emitting constant pool entries. This is non-deterministic.


Solutions:
1. ConstantPoolSDNode alignment field is changed to keep non-log2 value.
2. MachineConstantPool alignment field is also changed to keep non-log2 value.
3. Functions that create ConstantPool nodes are passing in non-log2 alignments.
4. MachineConstantPoolEntry no longer keeps an offset field. It's replaced with an alignment field. Offsets are not computed when constant pool entries are created. They are computed on the fly in asm printer and JIT.
5. Asm printer uses cheaper data structure to group constant pool entries.
6. Asm printer compute entry offsets after grouping is done.
7. Change JIT code to compute entry offsets on the fly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66875 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-13 07:51:59 +00:00
autoconf Revert r66765 and r66766. These were causing build failures on Darwin. 2009-03-12 04:10:09 +00:00
bindings Fix a parallel make race condition by swapping the order of -I directories. 2009-03-06 00:00:58 +00:00
cmake Remove configurey-fu to autodetect hash_map and hash_set now that they are 2009-03-09 06:16:26 +00:00
docs add some text to explain sentinels 2009-03-12 10:30:31 +00:00
examples reapply Sanjiv's patch to genericize memcpy/memset/memmove to take an 2008-11-21 16:42:48 +00:00
include Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues. 2009-03-13 07:51:59 +00:00
lib Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues. 2009-03-13 07:51:59 +00:00
projects CMake: auto-discover project files under the projects/ subdirectory. 2009-03-06 01:16:52 +00:00
runtime Drop toy GC runtime. 2009-03-02 03:46:48 +00:00
test Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues. 2009-03-13 07:51:59 +00:00
tools Also pass -gcc-tool-args when building a shared object. 2009-03-12 00:53:34 +00:00
unittests Remove libtool. 2009-02-26 07:44:16 +00:00
utils Unbreak build. 2009-03-13 07:41:30 +00:00
website Prepare for "core" website. 2007-08-03 05:43:35 +00:00
win32 Update hand-crafted VC++ build. 2009-02-02 19:22:02 +00:00
Xcode Remove Stacker.html from Xcode project. 2008-10-14 23:23:59 +00:00
build-for-llvm-top.sh Patch to build llvm with srcdir != objdir from 2009-01-23 08:42:38 +00:00
CMakeLists.txt CMake: auto-discover project files under the projects/ subdirectory. 2009-03-06 01:16:52 +00:00
configure Revert r66765 and r66766. These were causing build failures on Darwin. 2009-03-12 04:10:09 +00:00
CREDITS.TXT Adding your's truly to CREDITS.TXT 2009-01-19 15:04:29 +00:00
LICENSE.TXT Another great year for LLVM! 2009-02-26 15:17:13 +00:00
llvm.spec.in * llvm.spec.in: update blurb 2007-07-13 09:48:29 +00:00
Makefile Remove configurey-fu to autodetect hash_map and hash_set now that they are 2009-03-09 06:16:26 +00:00
Makefile.common Removed trailing whitespace from Makefiles. 2009-01-09 16:44:42 +00:00
Makefile.config.in Autodetect the availability of -export-dynamic in the linker. 2009-03-05 08:20:21 +00:00
Makefile.rules Darwin 10.4.x: "-rpath" is unnecessary when linking shared libraries. 2009-03-12 21:03:53 +00:00
ModuleInfo.txt Patch to build llvm with srcdir != objdir from 2009-01-23 08:42:38 +00:00
README.txt Remove extra lines 2008-07-28 20:50:25 +00:00

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level 
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments. 

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the HTML documentation provided in docs/index.html for further
assistance with LLVM.