Chris Lattner
a1b5e160ed
Add two new instructions
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12850 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-12 01:38:55 +00:00
Chris Lattner
9938286325
Fix a bug in my load/cast folding patch.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12849 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-12 00:23:04 +00:00
Chris Lattner
13c07feb20
Adjust some comments, fix a bug in my previous patch
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12848 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-12 00:12:04 +00:00
Chris Lattner
36ee07ff9d
Disambiguate symbols after loop extraction so that we can diagnose a code
...
generator bug if multiple loops are extracted from a function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12847 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 23:52:35 +00:00
Chris Lattner
feac3e18aa
On X86, casting an integer to floating point requires going through memory.
...
If the source of the cast is a load, we can just use the source memory location,
without having to create a temporary stack slot entry.
Before we code generated this:
double %int(int* %P) {
%V = load int* %P
%V2 = cast int %V to double
ret double %V2
}
into:
int:
sub %ESP, 4
mov %EAX, DWORD PTR [%ESP + 8]
mov %EAX, DWORD PTR [%EAX]
mov DWORD PTR [%ESP], %EAX
fild DWORD PTR [%ESP]
add %ESP, 4
ret
Now we produce this:
int:
mov %EAX, DWORD PTR [%ESP + 4]
fild DWORD PTR [%EAX]
ret
... which is nicer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12846 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 23:21:26 +00:00
Chris Lattner
bb4d6c59c3
New testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12845 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 23:18:30 +00:00
Chris Lattner
95157f7638
Implement folding of loads into floating point operations. This implements:
...
test/Regression/CodeGen/X86/fp_load_fold.llx
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12844 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 22:05:45 +00:00
Chris Lattner
2d9de9d0cb
New testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12843 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 22:05:16 +00:00
Chris Lattner
6621ed94cc
Unify all of the code for floating point +,-,*,/ into one function
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12842 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 21:23:56 +00:00
Chris Lattner
8ebf1c35a1
This implements folding of constant operands into floating point operations
...
for mul and div.
Instead of generating this:
test_divr:
fld QWORD PTR [%ESP + 4]
fld QWORD PTR [.CPItest_divr_0]
fdivrp %ST(1)
ret
We now generate this:
test_divr:
fld QWORD PTR [%ESP + 4]
fdivr QWORD PTR [.CPItest_divr_0]
ret
This code desperately needs refactoring, which will come in the next
patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12841 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 21:09:14 +00:00
Chris Lattner
462fa82270
Restructure the mul/div/rem handling code to follow the pattern the other
...
instructions use. This doesn't change any functionality except that long
constant expressions of these operations will now magically start working.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12840 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 20:56:28 +00:00
Chris Lattner
48b0c97e20
Codegen FP adds and subtracts with a constant more efficiently, generating:
...
fld QWORD PTR [%ESP + 4]
fadd QWORD PTR [.CPItest_add_0]
instead of:
fld QWORD PTR [%ESP + 4]
fld QWORD PTR [.CPItest_add_0]
faddp %ST(1)
I also intend to do this for mul & div, but it appears that I have to
refactor a bit of code before I can do so.
This is tested by: test/Regression/CodeGen/X86/fp_constant_op.llx
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12839 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 20:26:20 +00:00
Chris Lattner
490e86fed5
Add some new instructions
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12838 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 20:24:15 +00:00
Chris Lattner
dbd1588a36
New testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12837 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 20:24:01 +00:00
Chris Lattner
4cf15e7a3b
Relax assertion to make this function work with a broader class of instructions
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12836 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 20:21:06 +00:00
Chris Lattner
427aeb476f
Two changes:
...
1. If an incoming argument is dead, don't load it from the stack
2. Do not code gen noop copies at all (ie, cast int -> uint), not even to
a move. This should reduce register pressure for allocators that are
unable to coallesce away these copies in some cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12835 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 19:21:59 +00:00
Chris Lattner
4a1f2e3399
Add another variant of the testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12834 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 19:01:35 +00:00
Chris Lattner
bec63d606f
operator new & operator new[] do not kill any legal memory locations.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12833 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 18:16:34 +00:00
Chris Lattner
ffdc4ff1c4
new testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12832 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 16:47:15 +00:00
Chris Lattner
65585aa3fc
Allow clients to be more efficient.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12831 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 16:43:07 +00:00
Chris Lattner
414c36769a
Make comments above APIs reflect what they should do.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12830 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 16:42:50 +00:00
Chris Lattner
e40bb915ba
New method to allow more efficient clients
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12829 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 16:35:30 +00:00
Chris Lattner
fbede52af4
Fix a bug in my select transformation
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12826 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 01:39:19 +00:00
Chris Lattner
a0ae8196a1
Add a missing break, which caused a crash in an obscure situation
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12825 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-11 01:29:30 +00:00
Chris Lattner
adb7c0de39
Update the value numbering interface.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12824 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:33:34 +00:00
Chris Lattner
7015a035e7
Note to self: SAVE FILES!
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12823 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:32:47 +00:00
Chris Lattner
c39546cceb
Add an interface to update value numbering
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12822 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:32:09 +00:00
Chris Lattner
d76956d444
Implement InstCombine/select.ll:test13*
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12821 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:21:27 +00:00
Chris Lattner
fb384a15ff
New testcases
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12820 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:21:14 +00:00
Chris Lattner
66331a4e33
Implement InstCombine/add.ll:test20
...
Canonicalize add of sign bit constant into a xor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12819 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:01:55 +00:00
Chris Lattner
7706324512
New testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12818 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 22:01:27 +00:00
Chris Lattner
38e66bd9d1
Rewrite the GCSE pass to be *substantially* simpler, a bit more efficient,
...
and a bit more powerful
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12817 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 21:11:11 +00:00
Chris Lattner
326c0f3013
Fix spurious warning in release mode
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12816 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 19:15:56 +00:00
Chris Lattner
85aa7097c2
Silence a spurious warning
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12815 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 18:32:01 +00:00
Chris Lattner
a5f4103931
Simplify code a bit, and fix a bug that was breaking perlbmk
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12814 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 18:06:21 +00:00
Chris Lattner
562cb66b84
Fix a bug in my checkin last night that was breaking programs using invoke.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12813 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 16:53:29 +00:00
Chris Lattner
27c694bacb
Fix previous patch
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12811 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 07:27:48 +00:00
Chris Lattner
17177601fb
Correctly update counters
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12810 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 07:02:02 +00:00
Chris Lattner
0190fdba44
Add note
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12809 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 06:56:53 +00:00
Chris Lattner
b903fc5c1b
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
2004-04-10 06:55:27 +00:00
Chris Lattner
ede6ac60a5
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
2004-04-10 06:53:09 +00:00
Chris Lattner
dc4736f8e6
New testcases
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12806 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 06:52:20 +00:00
Chris Lattner
94c420da4a
Clarify interface
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12805 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-10 06:11:29 +00:00
Chris Lattner
5364360294
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
2004-04-10 06:03:22 +00:00
Chris Lattner
4f21c174aa
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
2004-04-09 23:50:29 +00:00
Chris Lattner
7c4865dfff
Another testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12802 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-09 23:47:52 +00:00
Chris Lattner
1c48527330
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
2004-04-09 23:47:24 +00:00
Chris Lattner
e576b91948
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
2004-04-09 23:46:01 +00:00
Chris Lattner
a5c5830d53
Add testcases for harder combining cases.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12799 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-09 23:43:48 +00:00
Chris Lattner
570751c2a7
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
2004-04-09 22:50:22 +00:00