Chris Lattner
be68fd036b
Add testcases for harder combining cases.
...
llvm-svn: 12799
2004-04-09 23:43:48 +00:00
Chris Lattner
0aa565647c
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) ;
}
llvm-svn: 12798
2004-04-09 22:50:22 +00:00
Chris Lattner
5bcb4eb13c
Fix an obvious bug in the refactoring I did a few days ago
...
llvm-svn: 12797
2004-04-09 22:28:33 +00:00
Chris Lattner
8ffe3e0b72
Expand on adding an intrinsic. Move section to before adding an instruction
...
llvm-svn: 12796
2004-04-09 19:24:20 +00:00
John Criswell
2b4c96e758
Reversed the order of the llvm.writeport() operands so that the value
...
is listed first and the address is listed second.
llvm-svn: 12795
2004-04-09 19:09:14 +00:00
Chris Lattner
183b336a54
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
llvm-svn: 12794
2004-04-09 19:05:30 +00:00
Chris Lattner
cf7baf3519
Implement select.ll:test11
...
llvm-svn: 12793
2004-04-09 18:19:44 +00:00
Chris Lattner
755cab25ae
new testcase
...
llvm-svn: 12792
2004-04-09 18:19:29 +00:00
Alkis Evlogimenos
237f203ca9
Add definition list to each live interval.
...
llvm-svn: 12791
2004-04-09 18:07:57 +00:00
John Criswell
417228d00a
Fixed some spelling.
...
llvm-svn: 12790
2004-04-09 16:48:45 +00:00
John Criswell
aa1c3c1f23
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.
llvm-svn: 12789
2004-04-09 16:43:20 +00:00
John Criswell
508b93c569
Added the llvm.readport and llvm.writeport intrinsics.
...
llvm-svn: 12788
2004-04-09 15:23:37 +00:00
John Criswell
2fc9983852
Changed assertions to error messages.
...
llvm-svn: 12787
2004-04-09 15:10:15 +00:00
John Criswell
c28c3b625f
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.
llvm-svn: 12786
2004-04-08 22:39:13 +00:00
Chris Lattner
e228ee5870
Implement InstCombine/cast-propagate.ll
...
llvm-svn: 12784
2004-04-08 20:39:49 +00:00
Chris Lattner
22b2166b36
New testcase
...
llvm-svn: 12783
2004-04-08 20:39:40 +00:00
John Criswell
10db062d41
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.
llvm-svn: 12782
2004-04-08 20:31:47 +00:00
John Criswell
5201004ef9
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.
llvm-svn: 12781
2004-04-08 20:27:38 +00:00
John Criswell
6d42651933
Added the llvm.readport and llvm.writeport intrinsics.
...
llvm-svn: 12780
2004-04-08 20:26:21 +00:00
Chris Lattner
3b3861d305
Implement ScalarRepl/select_promote.ll
...
llvm-svn: 12779
2004-04-08 19:59:34 +00:00
Chris Lattner
3b613818f6
New testcase, corresponding to phi_promote.ll
...
llvm-svn: 12778
2004-04-08 19:59:22 +00:00
Brian Gaeke
a8d593e947
This file does not appear to be included anywhere.
...
llvm-svn: 12777
2004-04-08 19:36:26 +00:00
Chris Lattner
d61b13c6e2
Disable strict alias analysis in the backend c compiler, as the code we
...
generate is not TBAA safe.
llvm-svn: 12774
2004-04-08 15:18:59 +00:00
Chris Lattner
a182f5bf48
Revert previous patch, I'm a moron :)
...
llvm-svn: 12773
2004-04-08 15:18:03 +00:00
Chris Lattner
177fe8d82f
Right, we break strict aliasing requirements. Make sure to disable strict
...
aliasing in the C compiler.
llvm-svn: 12772
2004-04-08 15:14:43 +00:00
Chris Lattner
4d25c86b52
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.
llvm-svn: 12770
2004-04-08 06:34:31 +00:00
Chris Lattner
1c631e813d
Implement InstCombine/select.ll:test[7-10]
...
llvm-svn: 12769
2004-04-08 04:43:23 +00:00
Chris Lattner
ac42fd5912
Add some more cases we should combine
...
llvm-svn: 12768
2004-04-08 04:43:04 +00:00
Brian Gaeke
8a56f16700
This file is no longer used.
...
llvm-svn: 12767
2004-04-07 21:01:22 +00:00
Brian Gaeke
69ee7e1353
Don't include InstrSelectionSupport.h.
...
llvm-svn: 12766
2004-04-07 20:55:32 +00:00
Brian Gaeke
c125664927
Move ChooseRegOrImmed() prototype here, from InstrSelectionSupport.h.
...
llvm-svn: 12765
2004-04-07 20:38:57 +00:00
Brian Gaeke
5c80118367
Don't include InstrSelectionSupport.h.
...
llvm-svn: 12764
2004-04-07 20:38:56 +00:00
Chris Lattner
2b2412d0c8
Implement test/Regression/Transforms/InstCombine/getelementptr_index.ll
...
llvm-svn: 12762
2004-04-07 18:38:20 +00:00
Chris Lattner
dadf78d933
New testcase
...
llvm-svn: 12761
2004-04-07 18:38:01 +00:00
Brian Gaeke
8931345fe5
Fix insertion of SelectInsts.
...
llvm-svn: 12760
2004-04-07 18:31:47 +00:00
Brian Gaeke
85521d70dd
Don't print [%reg + 0], just print [%reg]
...
llvm-svn: 12759
2004-04-07 17:33:56 +00:00
Brian Gaeke
6d62df5422
First version of code to handle loads. Stub function for handling stores.
...
llvm-svn: 12758
2004-04-07 17:29:37 +00:00
Brian Gaeke
989c04ab58
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.
llvm-svn: 12757
2004-04-07 17:04:09 +00:00
Brian Gaeke
7985e56cf9
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.
llvm-svn: 12756
2004-04-07 16:41:22 +00:00
Chris Lattner
13de334a4e
New testcase that crashed scalarevolution on sparc
...
llvm-svn: 12755
2004-04-07 16:17:45 +00:00
Chris Lattner
74498e1066
Fix a bug Brian found.
...
llvm-svn: 12754
2004-04-07 16:16:11 +00:00
Brian Gaeke
52ad5f94e2
We have a global reg. allocator now -- thanks to Alkis.
...
Fix a typo.
Add a project I've always thought would be cool.
llvm-svn: 12747
2004-04-07 15:31:23 +00:00
Chris Lattner
d93de7a754
New file that can be useful for hand inspection of assembly required for certain
...
kinds of instructions.
llvm-svn: 12746
2004-04-07 05:06:39 +00:00
Chris Lattner
bd58b3fbe9
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.
llvm-svn: 12745
2004-04-07 05:04:51 +00:00
Chris Lattner
bb22d5a564
andd subcc instructions which is used to create the 'cmp' pseudo instruction
...
llvm-svn: 12744
2004-04-07 05:04:01 +00:00
Chris Lattner
f6245bc8e9
Avoid emitting an extra copy on each 32-bit operation
...
llvm-svn: 12743
2004-04-07 04:36:53 +00:00
Brian Gaeke
4aac81435f
Make generation of stack-slot loads and copies less ugly.
...
llvm-svn: 12742
2004-04-07 04:29:14 +00:00
Brian Gaeke
3675c30873
Fix bug in printing loads.
...
llvm-svn: 12741
2004-04-07 04:29:03 +00:00
Chris Lattner
42ffd2e32c
Add support for shift instructions, wrap some long lines
...
llvm-svn: 12740
2004-04-07 04:27:16 +00:00
Chris Lattner
8406cf3046
Fix encoding of existing shift instructions, add rr shifts
...
llvm-svn: 12739
2004-04-07 04:26:57 +00:00