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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Chris Lattner [Tue, 6 Apr 2004 02:11:49 +0000 (02:11 +0000)]
Add support for simple immediate handling to long instruction selection.
This allows us to handle code like 'add long %X,
123456789012' more efficiently.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12683
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 6 Apr 2004 02:02:11 +0000 (02:02 +0000)]
The sbb instructions really ARE sbb's, not adc's
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12682
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 6 Apr 2004 01:48:06 +0000 (01:48 +0000)]
Implement negation of longs efficiently. For this testcase:
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12681
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 6 Apr 2004 01:25:33 +0000 (01:25 +0000)]
Minor tweak to avoid an extra reg-reg copy that the register allocator has to eliminate
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12680
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 6 Apr 2004 01:21:00 +0000 (01:21 +0000)]
Two changes:
* 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
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12679
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 5 Apr 2004 22:58:16 +0000 (22:58 +0000)]
Merge the code generator miscompilation code into the optimizer miscompilation
code. This "instantly" gives us loop-extractor power to assist with the
debugment of our nasty codegen issues. :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12678
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 5 Apr 2004 22:01:48 +0000 (22:01 +0000)]
Make a method public
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12677
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 5 Apr 2004 21:37:55 +0000 (21:37 +0000)]
Minor cleanups, remove some old debug code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12676
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 5 Apr 2004 21:37:38 +0000 (21:37 +0000)]
Refactor and genericize code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12675
91177308-0d34-0410-b5e6-
96231b3b80d8