summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
...
* Simple delay slot filler pass.Brian Gaeke2004-04-061-0/+87
| | | | llvm-svn: 12730
* Add references to delay slot filler pass.Brian Gaeke2004-04-062-1/+24
| | | | | | Fill in addPassesToJITCompile method. llvm-svn: 12729
* First attempt at handling frame index elimination.Brian Gaeke2004-04-061-8/+11
| | | | llvm-svn: 12728
* First attempt at special-casing printing of [%reg + offset] forBrian Gaeke2004-04-061-0/+55
| | | | | | | ld/st instructions - doesn't seem to work yet, but I think it's just a typo or something somewhere. llvm-svn: 12727
* Delete reference to "the Mach-O Runtime ABI".Brian Gaeke2004-04-061-2/+1
| | | | llvm-svn: 12726
* Deal with call return values.Brian Gaeke2004-04-061-1/+15
| | | | | | Don't put NOPs in delay slots at all. We'll have a fix-up pass later. llvm-svn: 12725
* Adding kimwitu++ license.John Criswell2004-04-061-0/+1
| | | | llvm-svn: 12719
* Bugs fixed new features implementedChris Lattner2004-04-061-0/+3
| | | | llvm-svn: 12716
* file based off InstSelectSimple.cpp, slowly being replaced by generated code ↵Jakub Staszak2004-04-061-0/+2831
| | | | | | from the really simple X86 instruction selector tablegen backend llvm-svn: 12715
* Tablgen files for really simple instruction selectorJakub Staszak2004-04-065-2/+653
| | | | llvm-svn: 12714
* Tablegen backend for really simple instruction selectorJakub Staszak2004-04-062-0/+514
| | | | llvm-svn: 12713
* add tablgen backend for really simple instruction selectorJakub Staszak2004-04-061-1/+7
| | | | llvm-svn: 12712
* Fix PR313: [x86] JIT miscompiles unsigned short to floating pointChris Lattner2004-04-061-2/+1
| | | | llvm-svn: 12711
* Fix incorrect encoding of some ADC and SBB instuctionsChris Lattner2004-04-061-9/+9
| | | | llvm-svn: 12710
* Added licensing information for treecc.John Criswell2004-04-061-0/+1
| | | | llvm-svn: 12703
* Fix a minor bug in previous checkingChris Lattner2004-04-061-2/+29
| | | | | | | | | | | | | | | | | | | | | | | | | Enable folding of long seteq/setne comparisons into branches and select instructions Implement unfolded long relational comparisons against a constants a bit more efficiently Folding comparisons changes code that looks like this: mov %EAX, DWORD PTR [%ESP + 4] mov %EDX, DWORD PTR [%ESP + 8] mov %ECX, %EAX or %ECX, %EDX sete %CL test %CL, %CL je .LBB2 # PC rel: F into code that looks like this: mov %EAX, DWORD PTR [%ESP + 4] mov %EDX, DWORD PTR [%ESP + 8] mov %ECX, %EAX or %ECX, %EDX jne .LBB2 # PC rel: F This speeds up 186.crafty by 6% with llc-ls. llvm-svn: 12702
* Wrap at 80 cols.Misha Brukman2004-04-061-7/+6
| | | | llvm-svn: 12701
* Minor cleanupsChris Lattner2004-04-061-32/+18
| | | | llvm-svn: 12700
* Document new optionChris Lattner2004-04-061-1/+10
| | | | llvm-svn: 12699
* Add a new gccld -native-cbe option which causes gccld to generate native codeChris Lattner2004-04-063-1/+48
| | | | | | for the application with the C backend instead of the native LLVM code generator llvm-svn: 12698
* Improve codegen of long == and != comparisons against constants. Before,Chris Lattner2004-04-061-3/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | comparing a long against zero got us this: sub %ESP, 8 mov DWORD PTR [%ESP + 4], %ESI mov DWORD PTR [%ESP], %EDI mov %EAX, DWORD PTR [%ESP + 12] mov %EDX, DWORD PTR [%ESP + 16] mov %ECX, 0 mov %ESI, 0 mov %EDI, %EAX xor %EDI, %ECX mov %ECX, %EDX xor %ECX, %ESI or %EDI, %ECX sete %CL test %CL, %CL je .LBB2 # PC rel: F Now it gets us this: mov %EAX, DWORD PTR [%ESP + 4] mov %EDX, DWORD PTR [%ESP + 8] mov %ECX, %EAX or %ECX, %EDX sete %CL test %CL, %CL je .LBB2 # PC rel: F llvm-svn: 12696
* Update docs a bitChris Lattner2004-04-061-10/+12
| | | | llvm-svn: 12695
* Remove some options that don't really have anything to do with bugpointChris Lattner2004-04-061-10/+0
| | | | llvm-svn: 12694
* Handle various other important cases of multiplying a long constant ↵Chris Lattner2004-04-061-19/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | immediate. For example, multiplying X*(1 + (1LL << 32)) now produces: test: mov %ECX, DWORD PTR [%ESP + 4] mov %EDX, DWORD PTR [%ESP + 8] mov %EAX, %ECX add %EDX, %ECX ret [[[Note to Alkis: why isn't linear scan generating this code?? This might be a problem with your intervals being too conservative: test: mov %EAX, DWORD PTR [%ESP + 4] mov %EDX, DWORD PTR [%ESP + 8] add %EDX, %EAX ret end note]]] Whereas GCC produces this: T: sub %esp, 12 mov %edx, DWORD PTR [%esp+16] mov DWORD PTR [%esp+8], %edi mov %ecx, DWORD PTR [%esp+20] xor %edi, %edi mov DWORD PTR [%esp], %ebx mov %ebx, %edi mov %eax, %edx mov DWORD PTR [%esp+4], %esi add %ebx, %edx mov %edi, DWORD PTR [%esp+8] lea %edx, [%ecx+%ebx] mov %esi, DWORD PTR [%esp+4] mov %ebx, DWORD PTR [%esp] add %esp, 12 ret I'm not sure example what GCC is smoking here, but it looks like it has just confused itself with a bunch of stack slots or something. The intel compiler is better, but still not good: T: movl 4(%esp), %edx #2.11 movl 8(%esp), %eax #2.11 lea (%eax,%edx), %ecx #3.12 movl $1, %eax #3.12 mull %edx #3.12 addl %ecx, %edx #3.12 ret #3.12 llvm-svn: 12693
* Efficiently handle a long multiplication by a constant. For this testcase:Chris Lattner2004-04-061-25/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | long %test(long %X) { %Y = mul long %X, 123 ret long %Y } we used to generate: test: sub %ESP, 12 mov DWORD PTR [%ESP + 8], %ESI mov DWORD PTR [%ESP + 4], %EDI mov DWORD PTR [%ESP], %EBX mov %ECX, DWORD PTR [%ESP + 16] mov %ESI, DWORD PTR [%ESP + 20] mov %EDI, 123 mov %EBX, 0 mov %EAX, %ECX mul %EDI imul %ESI, %EDI add %ESI, %EDX imul %ECX, %EBX add %ESI, %ECX mov %EDX, %ESI mov %EBX, DWORD PTR [%ESP] mov %EDI, DWORD PTR [%ESP + 4] mov %ESI, DWORD PTR [%ESP + 8] add %ESP, 12 ret Now we emit: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, DWORD PTR [%ESP + 8] mov %EDX, 123 mul %EDX imul %ECX, %ECX, 123 add %ECX, %EDX mov %EDX, %ECX ret Which, incidently, is substantially nicer than what GCC manages: T: sub %esp, 8 mov %eax, 123 mov DWORD PTR [%esp], %ebx mov %ebx, DWORD PTR [%esp+16] mov DWORD PTR [%esp+4], %esi mov %esi, DWORD PTR [%esp+12] imul %ecx, %ebx, 123 mov %ebx, DWORD PTR [%esp] mul %esi mov %esi, DWORD PTR [%esp+4] add %esp, 8 lea %edx, [%ecx+%edx] ret llvm-svn: 12692
* * Added link to newly written ExtendingLLVM.html documentMisha Brukman2004-04-061-34/+29
| | | | | | * Eliminated extraneous space in the HTML llvm-svn: 12691
* Incorporated Chris' comments.Misha Brukman2004-04-061-7/+9
| | | | llvm-svn: 12690
* Added notes on extending LLVM with new instructions, intrinsics, types, etc.Misha Brukman2004-04-062-0/+214
| | | | llvm-svn: 12689
* Improve code generation of long shifts by 32.Chris Lattner2004-04-061-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | On this testcase: long %test(long %X) { %Y = shr long %X, ubyte 32 ret long %Y } instead of: t: mov %EAX, DWORD PTR [%ESP + 4] mov %EAX, DWORD PTR [%ESP + 8] sar %EAX, 0 mov %EDX, 0 ret we now emit: test: mov %EAX, DWORD PTR [%ESP + 4] mov %EAX, DWORD PTR [%ESP + 8] mov %EDX, 0 ret llvm-svn: 12688
* Bugfixes: inc/dec don't set the carry flag!Chris Lattner2004-04-061-12/+8
| | | | llvm-svn: 12687
* Improve code for passing constant longs as arguments to function calls.Chris Lattner2004-04-061-5/+13
| | | | | | | | | | | | | | | | | | | | For example, on this instruction: call void %test(long 1234) Instead of this: mov %EAX, 1234 mov %ECX, 0 mov DWORD PTR [%ESP], %EAX mov DWORD PTR [%ESP + 4], %ECX call test We now emit this: mov DWORD PTR [%ESP], 1234 mov DWORD PTR [%ESP + 4], 0 call test llvm-svn: 12686
* Emit more efficient 64-bit operations when the RHS is a constant, and oneChris Lattner2004-04-061-5/+41
| | | | | | | | | | | | | | | of the words of the constant is zeros. For example: Y = and long X, 1234 now generates: Yl = and Xl, 1234 Yh = 0 instead of: Yl = and Xl, 1234 Yh = and Xh, 0 llvm-svn: 12685
* Fix typeoChris Lattner2004-04-061-1/+1
| | | | llvm-svn: 12684
* Add support for simple immediate handling to long instruction selection.Chris Lattner2004-04-061-25/+37
| | | | | | This allows us to handle code like 'add long %X, 123456789012' more efficiently. llvm-svn: 12683
* The sbb instructions really ARE sbb's, not adc'sChris Lattner2004-04-061-4/+4
| | | | llvm-svn: 12682
* Implement negation of longs efficiently. For this testcase:Chris Lattner2004-04-061-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | long %test(long %X) { %Y = sub long 0, %X ret long %Y } We used to generate: test: sub %ESP, 4 mov DWORD PTR [%ESP], %ESI mov %ECX, DWORD PTR [%ESP + 8] mov %ESI, DWORD PTR [%ESP + 12] mov %EAX, 0 mov %EDX, 0 sub %EAX, %ECX sbb %EDX, %ESI mov %ESI, DWORD PTR [%ESP] add %ESP, 4 ret Now we generate: test: mov %EAX, DWORD PTR [%ESP + 4] mov %EDX, DWORD PTR [%ESP + 8] neg %EAX adc %EDX, 0 neg %EDX ret llvm-svn: 12681
* Minor tweak to avoid an extra reg-reg copy that the register allocator has ↵Chris Lattner2004-04-061-1/+10
| | | | | | to eliminate llvm-svn: 12680
* Two changes:Chris Lattner2004-04-061-6/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * In promote32, if we can just promote a constant value, do so instead of promoting a constant dynamically. * In visitReturn inst, actually USE the promote32 argument that takes a Value* The end result of this is that we now generate this: test: mov %EAX, 0 ret instead of... test: mov %AX, 0 movzx %EAX, %AX ret for: ushort %test() { ret ushort 0 } llvm-svn: 12679
* Merge the code generator miscompilation code into the optimizer miscompilationChris Lattner2004-04-053-312/+265
| | | | | | | code. This "instantly" gives us loop-extractor power to assist with the debugment of our nasty codegen issues. :) llvm-svn: 12678
* Make a method publicChris Lattner2004-04-051-1/+2
| | | | llvm-svn: 12677
* Minor cleanups, remove some old debug codeChris Lattner2004-04-051-43/+13
| | | | llvm-svn: 12676
* Refactor and genericize codeChris Lattner2004-04-051-55/+71
| | | | llvm-svn: 12675
* lli no longer takes the -quiet option!Chris Lattner2004-04-051-2/+0
| | | | llvm-svn: 12674
* Do not mangle intrinsics in any way!Chris Lattner2004-04-051-1/+4
| | | | llvm-svn: 12673
* Make full use of the Mangler interface to simplify codeChris Lattner2004-04-051-63/+9
| | | | llvm-svn: 12671
* Sparc don't got not "sqrtl", bum bum bumChris Lattner2004-04-051-1/+1
| | | | llvm-svn: 12670
* Kill warnings during an optimized compile where assert() disappears.Misha Brukman2004-04-051-0/+2
| | | | llvm-svn: 12669
* Fix PR312 and IndVarsSimplify/2004-04-05-InvokeCastCrash.llxChris Lattner2004-04-051-0/+2
| | | | llvm-svn: 12668
* New testcase for PR312Chris Lattner2004-04-051-0/+286
| | | | llvm-svn: 12667
* Fix a bug in yesterdays checkins which broke siod. siod is a great ↵Chris Lattner2004-04-051-1/+1
| | | | | | testcase! :) llvm-svn: 12659
OpenPOWER on IntegriCloud