oota-llvm.git
20 years agoAdd a couple of more functions that cannot access memory (the intrinsics) and
Chris Lattner [Sat, 10 Apr 2004 06:55:27 +0000 (06:55 +0000)]
Add a couple of more functions that cannot access memory (the intrinsics) and
don't write to memory

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12808 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoSimplify code a bit, and use alias analysis to allow us to delete unused
Chris Lattner [Sat, 10 Apr 2004 06:53:09 +0000 (06:53 +0000)]
Simplify code a bit, and use alias analysis to allow us to delete unused
call and invoke instructions that are known to not write to memory.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12807 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew testcases
Chris Lattner [Sat, 10 Apr 2004 06:52:20 +0000 (06:52 +0000)]
New testcases

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12806 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoClarify interface
Chris Lattner [Sat, 10 Apr 2004 06:11:29 +0000 (06:11 +0000)]
Clarify interface

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12805 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoCreate the output directory if it's not already there
Chris Lattner [Sat, 10 Apr 2004 06:03:22 +0000 (06:03 +0000)]
Create the output directory if it's not already there

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12804 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoSimplify cfg now eliminates all of the branches in this testcase
Chris Lattner [Fri, 9 Apr 2004 23:50:29 +0000 (23:50 +0000)]
Simplify cfg now eliminates all of the branches in this testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12803 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAnother testcase
Chris Lattner [Fri, 9 Apr 2004 23:47:52 +0000 (23:47 +0000)]
Another testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12802 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoTestcase to make sure we can apply the shift to the operands of the select,
Chris Lattner [Fri, 9 Apr 2004 23:47:24 +0000 (23:47 +0000)]
Testcase to make sure we can apply the shift to the operands of the select,
eliminating the shifts

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12801 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImplement select.ll:test12*
Chris Lattner [Fri, 9 Apr 2004 23:46:01 +0000 (23:46 +0000)]
Implement select.ll:test12*

This transforms code like this:

   %C = or %A, %B
   %D = select %cond, %C, %A
into:
   %C = select %cond, %B, 0
   %D = or %A, %C

Since B is often a constant, the select can often be eliminated.  In any case,
this reduces the usage count of A, allowing subsequent optimizations to happen.

This xform applies when the operator is any of:
  add, sub, mul, or, xor, and, shl, shr

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12800 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd testcases for harder combining cases.
Chris Lattner [Fri, 9 Apr 2004 23:43:48 +0000 (23:43 +0000)]
Add testcases for harder combining cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12799 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFold code like:
Chris Lattner [Fri, 9 Apr 2004 22:50:22 +0000 (22:50 +0000)]
Fold code like:
  if (C)
    V1 |= V2;

into:
  Vx = V1 | V2;
  V1 = select C, V1, Vx

when the expression can be evaluated unconditionally and is *cheap* to
execute.  This limited form of if conversion is quite handy in lots of cases.
For example, it turns this testcase into straight-line code:

int in0 ; int in1 ; int in2 ; int in3 ;
int in4 ; int in5 ; int in6 ; int in7 ;
int in8 ; int in9 ; int in10; int in11;
int in12; int in13; int in14; int in15;
long output;

void mux(void) {
  output =
      (in0   ?  0x00000001 : 0) | (in1   ?  0x00000002 : 0) |
      (in2   ?  0x00000004 : 0) | (in3   ?  0x00000008 : 0) |
      (in4   ?  0x00000010 : 0) | (in5   ?  0x00000020 : 0) |
      (in6   ?  0x00000040 : 0) | (in7   ?  0x00000080 : 0) |
      (in8   ?  0x00000100 : 0) | (in9   ?  0x00000200 : 0) |
      (in10  ?  0x00000400 : 0) | (in11  ?  0x00000800 : 0) |
      (in12  ?  0x00001000 : 0) | (in13  ?  0x00002000 : 0) |
      (in14  ?  0x00004000 : 0) | (in15  ?  0x00008000 : 0) ;
}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12798 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix an obvious bug in the refactoring I did a few days ago
Chris Lattner [Fri, 9 Apr 2004 22:28:33 +0000 (22:28 +0000)]
Fix an obvious bug in the refactoring I did a few days ago

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12797 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoExpand on adding an intrinsic. Move section to before adding an instruction
Chris Lattner [Fri, 9 Apr 2004 19:24:20 +0000 (19:24 +0000)]
Expand on adding an intrinsic.  Move section to before adding an instruction

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12796 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoReversed the order of the llvm.writeport() operands so that the value
John Criswell [Fri, 9 Apr 2004 19:09:14 +0000 (19:09 +0000)]
Reversed the order of the llvm.writeport() operands so that the value
is listed first and the address is listed second.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12795 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFold binary operators with a constant operand into select instructions
Chris Lattner [Fri, 9 Apr 2004 19:05:30 +0000 (19:05 +0000)]
Fold binary operators with a constant operand into select instructions
that have a constant operand.  This implements
add.ll:test19, shift.ll:test15*, and others that are not tested

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12794 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImplement select.ll:test11
Chris Lattner [Fri, 9 Apr 2004 18:19:44 +0000 (18:19 +0000)]
Implement select.ll:test11

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12793 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agonew testcase
Chris Lattner [Fri, 9 Apr 2004 18:19:29 +0000 (18:19 +0000)]
new testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12792 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd definition list to each live interval.
Alkis Evlogimenos [Fri, 9 Apr 2004 18:07:57 +0000 (18:07 +0000)]
Add definition list to each live interval.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12791 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFixed some spelling.
John Criswell [Fri, 9 Apr 2004 16:48:45 +0000 (16:48 +0000)]
Fixed some spelling.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12790 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoModified the prototypes of the llvm.readport and llvm.writeport intrinsics
John Criswell [Fri, 9 Apr 2004 16:43:20 +0000 (16:43 +0000)]
Modified the prototypes of the llvm.readport and llvm.writeport intrinsics
so that they do not specify specific integer sizes (as those are
constrained by the code generator, not the intrinsic itself).

Also put these intrinsics into their own "Operating System" section.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12789 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdded the llvm.readport and llvm.writeport intrinsics.
John Criswell [Fri, 9 Apr 2004 15:23:37 +0000 (15:23 +0000)]
Added the llvm.readport and llvm.writeport intrinsics.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12788 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoChanged assertions to error messages.
John Criswell [Fri, 9 Apr 2004 15:10:15 +0000 (15:10 +0000)]
Changed assertions to error messages.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12787 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoChanges recommended by Chris:
John Criswell [Thu, 8 Apr 2004 22:39:13 +0000 (22:39 +0000)]
Changes recommended by Chris:
InstSelectSimple.cpp:
  Change the checks for proper I/O port address size into an exit() instead
  of an assertion.  Assertions aren't used in Release builds, and handling
  this error should be graceful (not that this counts as graceful, but it's
  more graceful).

  Modified the generation of the IN/OUT instructions to have 0 arguments.
X86InstrInfo.td:
  Added the OpSize attribute to the 16 bit IN and OUT instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12786 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImplement InstCombine/cast-propagate.ll
Chris Lattner [Thu, 8 Apr 2004 20:39:49 +0000 (20:39 +0000)]
Implement InstCombine/cast-propagate.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12784 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew testcase
Chris Lattner [Thu, 8 Apr 2004 20:39:40 +0000 (20:39 +0000)]
New testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12783 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdded the llvm.readport and llvm.writeport intrinsics for x86. These do
John Criswell [Thu, 8 Apr 2004 20:31:47 +0000 (20:31 +0000)]
Added the llvm.readport and llvm.writeport intrinsics for x86.  These do
I/O port instructions on x86.  The specific code sequence is tailored to
the parameters and return value of the intrinsic call.
Added the ability for implicit defintions to be printed in the Instruction
Printer.
Added the ability for RawFrm instruction to print implict uses and
defintions with correct comma output.  This required adjustment to some
methods so that a leading comma would or would not be printed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12782 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdded the llvm.readport and llvm.writeport intrinsics.
John Criswell [Thu, 8 Apr 2004 20:27:38 +0000 (20:27 +0000)]
Added the llvm.readport and llvm.writeport intrinsics.
The Verifier ensures that their parameters are of integral types and have
the correct sign, but it does not enforce any size restrictions because
such restrictions are platform dependent.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12781 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdded the llvm.readport and llvm.writeport intrinsics.
John Criswell [Thu, 8 Apr 2004 20:26:21 +0000 (20:26 +0000)]
Added the llvm.readport and llvm.writeport intrinsics.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12780 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImplement ScalarRepl/select_promote.ll
Chris Lattner [Thu, 8 Apr 2004 19:59:34 +0000 (19:59 +0000)]
Implement ScalarRepl/select_promote.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12779 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew testcase, corresponding to phi_promote.ll
Chris Lattner [Thu, 8 Apr 2004 19:59:22 +0000 (19:59 +0000)]
New testcase, corresponding to phi_promote.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12778 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoThis file does not appear to be included anywhere.
Brian Gaeke [Thu, 8 Apr 2004 19:36:26 +0000 (19:36 +0000)]
This file does not appear to be included anywhere.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12777 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDisable strict alias analysis in the backend c compiler, as the code we
Chris Lattner [Thu, 8 Apr 2004 15:18:59 +0000 (15:18 +0000)]
Disable strict alias analysis in the backend c compiler, as the code we
generate is not TBAA safe.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12774 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoRevert previous patch, I'm a moron :)
Chris Lattner [Thu, 8 Apr 2004 15:18:03 +0000 (15:18 +0000)]
Revert previous patch, I'm a moron :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12773 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoRight, we break strict aliasing requirements. Make sure to disable strict
Chris Lattner [Thu, 8 Apr 2004 15:14:43 +0000 (15:14 +0000)]
Right, we break strict aliasing requirements.  Make sure to disable strict
aliasing in the C compiler.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12772 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoRemove the "really gross hacks" that are there to deal with recursive functions.
Chris Lattner [Thu, 8 Apr 2004 06:34:31 +0000 (06:34 +0000)]
Remove the "really gross hacks" that are there to deal with recursive functions.
Now we collect all of the call sites we are interested in inlining, then inline
them.  This entirely avoids issues with trying to inline a call site we got by
inlining another call site.  This also eliminates iterator invalidation issues.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12770 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImplement InstCombine/select.ll:test[7-10]
Chris Lattner [Thu, 8 Apr 2004 04:43:23 +0000 (04:43 +0000)]
Implement InstCombine/select.ll:test[7-10]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12769 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd some more cases we should combine
Chris Lattner [Thu, 8 Apr 2004 04:43:04 +0000 (04:43 +0000)]
Add some more cases we should combine

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12768 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoThis file is no longer used.
Brian Gaeke [Wed, 7 Apr 2004 21:01:22 +0000 (21:01 +0000)]
This file is no longer used.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12767 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDon't include InstrSelectionSupport.h.
Brian Gaeke [Wed, 7 Apr 2004 20:55:32 +0000 (20:55 +0000)]
Don't include InstrSelectionSupport.h.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12766 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoMove ChooseRegOrImmed() prototype here, from InstrSelectionSupport.h.
Brian Gaeke [Wed, 7 Apr 2004 20:38:57 +0000 (20:38 +0000)]
Move ChooseRegOrImmed() prototype here, from InstrSelectionSupport.h.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12765 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDon't include InstrSelectionSupport.h.
Brian Gaeke [Wed, 7 Apr 2004 20:38:56 +0000 (20:38 +0000)]
Don't include InstrSelectionSupport.h.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12764 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImplement test/Regression/Transforms/InstCombine/getelementptr_index.ll
Chris Lattner [Wed, 7 Apr 2004 18:38:20 +0000 (18:38 +0000)]
Implement test/Regression/Transforms/InstCombine/getelementptr_index.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12762 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew testcase
Chris Lattner [Wed, 7 Apr 2004 18:38:01 +0000 (18:38 +0000)]
New testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12761 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix insertion of SelectInsts.
Brian Gaeke [Wed, 7 Apr 2004 18:31:47 +0000 (18:31 +0000)]
Fix insertion of SelectInsts.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12760 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDon't print [%reg + 0], just print [%reg]
Brian Gaeke [Wed, 7 Apr 2004 17:33:56 +0000 (17:33 +0000)]
Don't print [%reg + 0], just print [%reg]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12759 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFirst version of code to handle loads. Stub function for handling stores.
Brian Gaeke [Wed, 7 Apr 2004 17:29:37 +0000 (17:29 +0000)]
First version of code to handle loads. Stub function for handling stores.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12758 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoSupport loading arguments from %I0...%I5 into virtual registers in
Brian Gaeke [Wed, 7 Apr 2004 17:04:09 +0000 (17:04 +0000)]
Support loading arguments from %I0...%I5 into virtual registers in
function prologues, and fix an off-by-one in visitCallInst that was
putting call args into the wrong registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12757 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoIt's setting up the call args right now, but on the callee side, it's
Brian Gaeke [Wed, 7 Apr 2004 16:41:22 +0000 (16:41 +0000)]
It's setting up the call args right now, but on the callee side, it's
trying to get incoming args off the stack, instead of the %i0...%i6 regs,
which is wrong.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12756 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew testcase that crashed scalarevolution on sparc
Chris Lattner [Wed, 7 Apr 2004 16:17:45 +0000 (16:17 +0000)]
New testcase that crashed scalarevolution on sparc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12755 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix a bug Brian found.
Chris Lattner [Wed, 7 Apr 2004 16:16:11 +0000 (16:16 +0000)]
Fix a bug Brian found.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12754 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoWe have a global reg. allocator now -- thanks to Alkis.
Brian Gaeke [Wed, 7 Apr 2004 15:31:23 +0000 (15:31 +0000)]
We have a global reg. allocator now -- thanks to Alkis.
Fix a typo.
Add a project I've always thought would be cool.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12747 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew file that can be useful for hand inspection of assembly required for certain
Chris Lattner [Wed, 7 Apr 2004 05:06:39 +0000 (05:06 +0000)]
New file that can be useful for hand inspection of assembly required for certain
kinds of instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12746 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoThis is a start on handling setcc instructions. As the comment notes, we
Chris Lattner [Wed, 7 Apr 2004 05:04:51 +0000 (05:04 +0000)]
This is a start on handling setcc instructions.  As the comment notes, we
have no good way of handling this until the code generator is improved.
We should probably just emit V9 instructions in the meantime.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12745 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoandd subcc instructions which is used to create the 'cmp' pseudo instruction
Chris Lattner [Wed, 7 Apr 2004 05:04:01 +0000 (05:04 +0000)]
andd subcc instructions which is used to create the 'cmp' pseudo instruction

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12744 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAvoid emitting an extra copy on each 32-bit operation
Chris Lattner [Wed, 7 Apr 2004 04:36:53 +0000 (04:36 +0000)]
Avoid emitting an extra copy on each 32-bit operation

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12743 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoMake generation of stack-slot loads and copies less ugly.
Brian Gaeke [Wed, 7 Apr 2004 04:29:14 +0000 (04:29 +0000)]
Make generation of stack-slot loads and copies less ugly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12742 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix bug in printing loads.
Brian Gaeke [Wed, 7 Apr 2004 04:29:03 +0000 (04:29 +0000)]
Fix bug in printing loads.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12741 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd support for shift instructions, wrap some long lines
Chris Lattner [Wed, 7 Apr 2004 04:27:16 +0000 (04:27 +0000)]
Add support for shift instructions, wrap some long lines

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12740 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix encoding of existing shift instructions, add rr shifts
Chris Lattner [Wed, 7 Apr 2004 04:26:57 +0000 (04:26 +0000)]
Fix encoding of existing shift instructions, add rr shifts

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12739 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoNew testcase
Chris Lattner [Wed, 7 Apr 2004 04:08:21 +0000 (04:08 +0000)]
New testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12738 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd a bunch more instructions
Chris Lattner [Wed, 7 Apr 2004 04:06:46 +0000 (04:06 +0000)]
Add a bunch more instructions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12737 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoMerge my changes with brians
Chris Lattner [Wed, 7 Apr 2004 04:05:49 +0000 (04:05 +0000)]
Merge my changes with brians

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12736 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd in some things I forgot, which Chris helpfully reminded me of...
Brian Gaeke [Wed, 7 Apr 2004 04:05:12 +0000 (04:05 +0000)]
Add in some things I forgot, which Chris helpfully reminded me of...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12735 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd support for the "Y" register, used by MUL & DIV.
Brian Gaeke [Wed, 7 Apr 2004 04:01:11 +0000 (04:01 +0000)]
Add support for the "Y" register, used by MUL & DIV.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12734 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd UDIV, SDIV, and a few variants of WR.
Brian Gaeke [Wed, 7 Apr 2004 04:01:00 +0000 (04:01 +0000)]
Add UDIV, SDIV, and a few variants of WR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12733 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoPreliminary support for getting 64-bit integer constants into registers.
Brian Gaeke [Wed, 7 Apr 2004 04:00:49 +0000 (04:00 +0000)]
Preliminary support for getting 64-bit integer constants into registers.
Preliminary support for division. It's gross because you have to initialize
the "Y" register, which is the top 32 bits of the thing you're dividing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12732 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoPrune unnecessary #includes
Brian Gaeke [Tue, 6 Apr 2004 23:25:07 +0000 (23:25 +0000)]
Prune unnecessary #includes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12731 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoSimple delay slot filler pass.
Brian Gaeke [Tue, 6 Apr 2004 23:21:45 +0000 (23:21 +0000)]
Simple delay slot filler pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12730 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd references to delay slot filler pass.
Brian Gaeke [Tue, 6 Apr 2004 23:21:24 +0000 (23:21 +0000)]
Add references to delay slot filler pass.
Fill in addPassesToJITCompile method.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12729 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFirst attempt at handling frame index elimination.
Brian Gaeke [Tue, 6 Apr 2004 22:10:22 +0000 (22:10 +0000)]
First attempt at handling frame index elimination.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12728 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFirst attempt at special-casing printing of [%reg + offset] for
Brian Gaeke [Tue, 6 Apr 2004 22:10:11 +0000 (22:10 +0000)]
First attempt at special-casing printing of [%reg + offset] for
ld/st instructions - doesn't seem to work yet, but I think it's
just a typo or something somewhere.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12727 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDelete reference to "the Mach-O Runtime ABI".
Brian Gaeke [Tue, 6 Apr 2004 22:09:59 +0000 (22:09 +0000)]
Delete reference to "the Mach-O Runtime ABI".

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12726 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDeal with call return values.
Brian Gaeke [Tue, 6 Apr 2004 22:09:23 +0000 (22:09 +0000)]
Deal with call return values.
Don't put NOPs in delay slots at all. We'll have a fix-up pass later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12725 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdding kimwitu++ license.
John Criswell [Tue, 6 Apr 2004 20:23:45 +0000 (20:23 +0000)]
Adding kimwitu++ license.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12719 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoBugs fixed new features implemented
Chris Lattner [Tue, 6 Apr 2004 19:48:42 +0000 (19:48 +0000)]
Bugs fixed new features implemented

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12716 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agofile based off InstSelectSimple.cpp, slowly being replaced by generated code from...
Jakub Staszak [Tue, 6 Apr 2004 19:35:17 +0000 (19:35 +0000)]
file based off InstSelectSimple.cpp, slowly being replaced by generated code from the really simple X86 instruction selector tablegen backend

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12715 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoTablgen files for really simple instruction selector
Jakub Staszak [Tue, 6 Apr 2004 19:34:00 +0000 (19:34 +0000)]
Tablgen files for really simple instruction selector

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12714 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoTablegen backend for really simple instruction selector
Jakub Staszak [Tue, 6 Apr 2004 19:31:31 +0000 (19:31 +0000)]
Tablegen backend for really simple instruction selector

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12713 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoadd tablgen backend for really simple instruction selector
Jakub Staszak [Tue, 6 Apr 2004 19:30:56 +0000 (19:30 +0000)]
add tablgen backend for really simple instruction selector

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12712 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix PR313: [x86] JIT miscompiles unsigned short to floating point
Chris Lattner [Tue, 6 Apr 2004 19:29:36 +0000 (19:29 +0000)]
Fix PR313: [x86] JIT miscompiles unsigned short to floating point

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12711 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix incorrect encoding of some ADC and SBB instuctions
Chris Lattner [Tue, 6 Apr 2004 19:20:32 +0000 (19:20 +0000)]
Fix incorrect encoding of some ADC and SBB instuctions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12710 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdded licensing information for treecc.
John Criswell [Tue, 6 Apr 2004 17:51:10 +0000 (17:51 +0000)]
Added licensing information for treecc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12703 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix a minor bug in previous checking
Chris Lattner [Tue, 6 Apr 2004 17:34:50 +0000 (17:34 +0000)]
Fix a minor bug in previous checking
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12702 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoWrap at 80 cols.
Misha Brukman [Tue, 6 Apr 2004 17:04:30 +0000 (17:04 +0000)]
Wrap at 80 cols.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12701 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoMinor cleanups
Chris Lattner [Tue, 6 Apr 2004 16:54:04 +0000 (16:54 +0000)]
Minor cleanups

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12700 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoDocument new option
Chris Lattner [Tue, 6 Apr 2004 16:46:12 +0000 (16:46 +0000)]
Document new option

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12699 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdd a new gccld -native-cbe option which causes gccld to generate native code
Chris Lattner [Tue, 6 Apr 2004 16:43:13 +0000 (16:43 +0000)]
Add a new gccld -native-cbe option which causes gccld to generate native code
for the application with the C backend instead of the native LLVM code generator

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12698 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImprove codegen of long == and != comparisons against constants. Before,
Chris Lattner [Tue, 6 Apr 2004 16:02:27 +0000 (16:02 +0000)]
Improve codegen of long == and != comparisons against constants.  Before,
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12696 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoUpdate docs a bit
Chris Lattner [Tue, 6 Apr 2004 15:22:35 +0000 (15:22 +0000)]
Update docs a bit

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12695 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoRemove some options that don't really have anything to do with bugpoint
Chris Lattner [Tue, 6 Apr 2004 15:14:10 +0000 (15:14 +0000)]
Remove some options that don't really have anything to do with bugpoint

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12694 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoHandle various other important cases of multiplying a long constant immediate. For
Chris Lattner [Tue, 6 Apr 2004 04:55:43 +0000 (04:55 +0000)]
Handle various other important cases of multiplying a long constant 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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12693 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoEfficiently handle a long multiplication by a constant. For this testcase:
Chris Lattner [Tue, 6 Apr 2004 04:29:36 +0000 (04:29 +0000)]
Efficiently handle a long multiplication by a constant.  For this testcase:

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12692 91177308-0d34-0410-b5e6-96231b3b80d8

20 years ago* Added link to newly written ExtendingLLVM.html document
Misha Brukman [Tue, 6 Apr 2004 04:22:43 +0000 (04:22 +0000)]
* Added link to newly written ExtendingLLVM.html document
* Eliminated extraneous space in the HTML

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12691 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoIncorporated Chris' comments.
Misha Brukman [Tue, 6 Apr 2004 04:17:51 +0000 (04:17 +0000)]
Incorporated Chris' comments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12690 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoAdded notes on extending LLVM with new instructions, intrinsics, types, etc.
Misha Brukman [Tue, 6 Apr 2004 03:53:49 +0000 (03:53 +0000)]
Added notes on extending LLVM with new instructions, intrinsics, types, etc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12689 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImprove code generation of long shifts by 32.
Chris Lattner [Tue, 6 Apr 2004 03:42:38 +0000 (03:42 +0000)]
Improve code generation of long shifts by 32.
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12688 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoBugfixes: inc/dec don't set the carry flag!
Chris Lattner [Tue, 6 Apr 2004 03:36:57 +0000 (03:36 +0000)]
Bugfixes: inc/dec don't set the carry flag!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12687 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoImprove code for passing constant longs as arguments to function calls.
Chris Lattner [Tue, 6 Apr 2004 03:23:00 +0000 (03:23 +0000)]
Improve code for passing constant longs as arguments to function calls.
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12686 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoEmit more efficient 64-bit operations when the RHS is a constant, and one
Chris Lattner [Tue, 6 Apr 2004 03:15:53 +0000 (03:15 +0000)]
Emit more efficient 64-bit operations when the RHS is a constant, and one
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12685 91177308-0d34-0410-b5e6-96231b3b80d8

20 years agoFix typeo
Chris Lattner [Tue, 6 Apr 2004 02:13:25 +0000 (02:13 +0000)]
Fix typeo

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12684 91177308-0d34-0410-b5e6-96231b3b80d8