Chris Lattner
|
e97b0e1358
|
New method
llvm-svn: 19517
|
2005-01-12 18:37:47 +00:00 |
|
Chris Lattner
|
1b3b24f116
|
Fix sign extend to long. When coming from sbyte, we used to generate:
movsbl 4(%esp), %eax
movl %eax, %edx
sarl $7, %edx
Now we generate:
movsbl 4(%esp), %eax
movl %eax, %edx
sarl $31, %edx
Which is right.
llvm-svn: 19515
|
2005-01-12 18:19:52 +00:00 |
|
Reid Spencer
|
c8c50250a1
|
Shut up warnings with GCC 3.4.3 about uninitialized variables.
llvm-svn: 19512
|
2005-01-12 14:53:45 +00:00 |
|
Chris Lattner
|
e7945a2e2e
|
Add an option to view the selection dags as they are generated.
llvm-svn: 19498
|
2005-01-12 03:41:21 +00:00 |
|
Chris Lattner
|
74fcfd5148
|
Print the value types in the nodes of the graph
llvm-svn: 19485
|
2005-01-11 22:21:04 +00:00 |
|
Chris Lattner
|
f588cdd51e
|
add an assertion, avoid creating copyfromreg/copytoreg pairs that are the
same for PHI nodes.
llvm-svn: 19484
|
2005-01-11 22:03:46 +00:00 |
|
Chris Lattner
|
8de5a27681
|
Squelch optimized warning.
llvm-svn: 19475
|
2005-01-11 17:46:49 +00:00 |
|
Chris Lattner
|
963af6652b
|
Teach legalize to lower MEMSET/MEMCPY/MEMMOVE operations if the target
does not support them.
llvm-svn: 19465
|
2005-01-11 05:57:22 +00:00 |
|
Chris Lattner
|
6b9082114f
|
Print new operations.
llvm-svn: 19464
|
2005-01-11 05:57:01 +00:00 |
|
Chris Lattner
|
7cde8a2658
|
Turn memset/memcpy/memmove into the corresponding operations.
llvm-svn: 19463
|
2005-01-11 05:56:49 +00:00 |
|
Chris Lattner
|
2eacd11a86
|
shift X, 0 -> X
llvm-svn: 19453
|
2005-01-11 04:25:13 +00:00 |
|
Chris Lattner
|
07a3ade230
|
Print SelectionDAGs bottom up, include extra info in the node labels
llvm-svn: 19447
|
2005-01-11 00:34:33 +00:00 |
|
Chris Lattner
|
1c273d3a14
|
Add a marker for the graph root.
llvm-svn: 19445
|
2005-01-10 23:52:04 +00:00 |
|
Chris Lattner
|
daa052a97e
|
Put the operation name in each node, put the function name on the graph.
llvm-svn: 19444
|
2005-01-10 23:26:00 +00:00 |
|
Chris Lattner
|
0307506841
|
Split out SDNode::getOperationName into its own method.
llvm-svn: 19443
|
2005-01-10 23:25:25 +00:00 |
|
Chris Lattner
|
8c13447254
|
Implement initial selectiondag printing support. This gets us a nice
graph with no labels! :)
llvm-svn: 19441
|
2005-01-10 23:08:40 +00:00 |
|
Chris Lattner
|
5433d8de29
|
Lower to the correct functions. This fixes FreeBench/fourinarow
llvm-svn: 19436
|
2005-01-10 21:02:37 +00:00 |
|
Chris Lattner
|
02236df007
|
Implement a couple of more simplifications. This lets us codegen:
int test2(int * P, int* Q, int A, int B) {
return P+A == P;
}
into:
test2:
movl 4(%esp), %eax
movl 12(%esp), %eax
shll $2, %eax
cmpl $0, %eax
sete %al
movzbl %al, %eax
ret
instead of:
test2:
movl 4(%esp), %eax
movl 12(%esp), %ecx
leal (%eax,%ecx,4), %ecx
cmpl %eax, %ecx
sete %al
movzbl %al, %eax
ret
ICC is producing worse code:
test2:
movl 4(%esp), %eax #8.5
movl 12(%esp), %edx #8.5
lea (%edx,%edx), %ecx #9.9
addl %ecx, %ecx #9.9
addl %eax, %ecx #9.9
cmpl %eax, %ecx #9.16
movl $0, %eax #9.16
sete %al #9.16
ret #9.16
as is GCC (looks like our old code):
test2:
movl 4(%esp), %edx
movl 12(%esp), %eax
leal (%edx,%eax,4), %ecx
cmpl %edx, %ecx
sete %al
movzbl %al, %eax
ret
llvm-svn: 19430
|
2005-01-10 02:03:02 +00:00 |
|
Chris Lattner
|
8d09b03ed1
|
Fix incorrect constant folds, fixing Stepanov after the SHR patch.
llvm-svn: 19429
|
2005-01-10 01:16:03 +00:00 |
|
Chris Lattner
|
9d479d4a34
|
Constant fold shifts, turning this loop:
.LBB_Z5test0PdS__3: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
movl $16000, %ecx
sarl $3, %ecx
cmpl %eax, %ecx
fstpl 16(%esp)
#FP_REG_KILL
jg .LBB_Z5test0PdS__3 # no_exit.1
into:
.LBB_Z5test0PdS__3: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
cmpl $2000, %eax
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__3 # no_exit.1
llvm-svn: 19427
|
2005-01-10 00:07:15 +00:00 |
|
Chris Lattner
|
59d7066da8
|
Add some folds for == and != comparisons. This allows us to
codegen this loop in stepanov:
no_exit.i: ; preds = %entry, %no_exit.i, %then.i, %_Z5checkd.exit
%i.0.0 = phi int [ 0, %entry ], [ %i.0.0, %no_exit.i ], [ %inc.0, %_Z5checkd.exit ], [ %inc.012, %then.i ] ; <int> [#uses=3]
%indvar = phi uint [ %indvar.next, %no_exit.i ], [ 0, %entry ], [ 0, %then.i ], [ 0, %_Z5checkd.exit ] ; <uint> [#uses=3]
%result_addr.i.0 = phi double [ %tmp.4.i.i, %no_exit.i ], [ 0.000000e+00, %entry ], [ 0.000000e+00, %then.i ], [ 0.000000e+00, %_Z5checkd.exit ] ; <double> [#uses=1]
%first_addr.0.i.2.rec = cast uint %indvar to int ; <int> [#uses=1]
%first_addr.0.i.2 = getelementptr [2000 x double]* %data, int 0, uint %indvar ; <double*> [#uses=1]
%inc.i.rec = add int %first_addr.0.i.2.rec, 1 ; <int> [#uses=1]
%inc.i = getelementptr [2000 x double]* %data, int 0, int %inc.i.rec ; <double*> [#uses=1]
%tmp.3.i.i = load double* %first_addr.0.i.2 ; <double> [#uses=1]
%tmp.4.i.i = add double %result_addr.i.0, %tmp.3.i.i ; <double> [#uses=2]
%tmp.2.i = seteq double* %inc.i, getelementptr ([2000 x double]* %data, int 0, int 2000) ; <bool> [#uses=1]
%indvar.next = add uint %indvar, 1 ; <uint> [#uses=1]
br bool %tmp.2.i, label %_Z10accumulateIPddET0_T_S2_S1_.exit, label %no_exit.i
To this:
.LBB_Z4testIPddEvT_S1_T0__1: # no_exit.i
fldl data(,%eax,8)
fldl 16(%esp)
faddp %st(1)
fstpl 16(%esp)
incl %eax
movl %eax, %ecx
shll $3, %ecx
cmpl $16000, %ecx
#FP_REG_KILL
jne .LBB_Z4testIPddEvT_S1_T0__1 # no_exit.i
instead of this:
.LBB_Z4testIPddEvT_S1_T0__1: # no_exit.i
fldl data(,%eax,8)
fldl 16(%esp)
faddp %st(1)
fstpl 16(%esp)
incl %eax
leal data(,%eax,8), %ecx
leal data+16000, %edx
cmpl %edx, %ecx
#FP_REG_KILL
jne .LBB_Z4testIPddEvT_S1_T0__1 # no_exit.i
llvm-svn: 19425
|
2005-01-09 20:52:51 +00:00 |
|
Jeff Cohen
|
91dd6d2d20
|
Fix VC++ compilation error
llvm-svn: 19423
|
2005-01-09 20:41:56 +00:00 |
|
Chris Lattner
|
fa06762d0e
|
Print the DAG out more like a DAG in nested format.
llvm-svn: 19422
|
2005-01-09 20:38:33 +00:00 |
|
Chris Lattner
|
e3b9f22967
|
Print out nodes sorted by their address to make it easier to find them in a list.
llvm-svn: 19421
|
2005-01-09 20:26:36 +00:00 |
|
Chris Lattner
|
82caa0dc2e
|
Add a simple transformation. This allows us to compile one of the inner
loops in stepanov to this:
.LBB_Z5test0PdS__2: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
cmpl $2000, %eax
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__2
instead of this:
.LBB_Z5test0PdS__2: # no_exit.1
fldl data(,%eax,8)
fldl 24(%esp)
faddp %st(1)
fstl 24(%esp)
incl %eax
movl $data, %ecx
movl %ecx, %edx
addl $16000, %edx
subl %ecx, %edx
movl %edx, %ecx
sarl $2, %ecx
shrl $29, %ecx
addl %ecx, %edx
sarl $3, %edx
cmpl %edx, %eax
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__2
The old instruction selector produced:
.LBB_Z5test0PdS__2: # no_exit.1
fldl 24(%esp)
faddl data(,%eax,8)
fstl 24(%esp)
movl %eax, %ecx
incl %ecx
incl %eax
leal data+16000, %edx
movl $data, %edi
subl %edi, %edx
movl %edx, %edi
sarl $2, %edi
shrl $29, %edi
addl %edi, %edx
sarl $3, %edx
cmpl %edx, %ecx
fstpl 16(%esp)
#FP_REG_KILL
jl .LBB_Z5test0PdS__2 # no_exit.1
Which is even worse!
llvm-svn: 19419
|
2005-01-09 20:09:57 +00:00 |
|
Chris Lattner
|
d674d08230
|
Fix a bug legalizing call instructions (make sure to remember all result
values), and eliminate some switch statements.
llvm-svn: 19417
|
2005-01-09 19:43:23 +00:00 |
|
Chris Lattner
|
ac23355362
|
Fix a minor bug legalizing dynamic_stackalloc. This allows us to compile
std::__pad<wchar_t, std::char_traits<wchar_t> >::_S_pad(std::ios_base&, wchar_t, wchar_t*, wchar_t const*, int, int, bool)
from libstdc++
llvm-svn: 19416
|
2005-01-09 19:07:54 +00:00 |
|
Chris Lattner
|
b3e31c6def
|
Teach legalize to deal with DYNAMIC_STACKALLOC (aka a dynamic llvm alloca)
llvm-svn: 19415
|
2005-01-09 19:03:49 +00:00 |
|
Chris Lattner
|
cc18c057cf
|
Handle static alloca arguments to PHI nodes.
llvm-svn: 19409
|
2005-01-09 01:16:24 +00:00 |
|
Chris Lattner
|
3454e31bba
|
Use new interfaces to correctly lower varargs and return/frame address intrinsics.
llvm-svn: 19407
|
2005-01-09 00:00:49 +00:00 |
|
Chris Lattner
|
aad3ca491d
|
Add support for llvm.setjmp and longjmp. Only 3 SingleSource/UnitTests fail now.
llvm-svn: 19404
|
2005-01-08 22:48:57 +00:00 |
|
Chris Lattner
|
3b52b2f6c2
|
Tighten up assertions.
llvm-svn: 19397
|
2005-01-08 20:35:13 +00:00 |
|
Chris Lattner
|
c23687789e
|
Silence VS warnings
llvm-svn: 19388
|
2005-01-08 19:59:10 +00:00 |
|
Chris Lattner
|
2dafaac5d1
|
Silence warnings from VS
llvm-svn: 19386
|
2005-01-08 19:55:00 +00:00 |
|
Chris Lattner
|
104064bf2c
|
Silence VS warnings
llvm-svn: 19385
|
2005-01-08 19:53:50 +00:00 |
|
Chris Lattner
|
a58b3f48ef
|
Silence VS warnings.
llvm-svn: 19384
|
2005-01-08 19:52:31 +00:00 |
|
Chris Lattner
|
38545e9952
|
Implement handling of most long operators through libcalls.
Fix a bug legalizing "ret (Val,Val)"
llvm-svn: 19375
|
2005-01-08 19:27:05 +00:00 |
|
Chris Lattner
|
60ef22ce82
|
Adjust to changes in LowerCAllTo interfaces
llvm-svn: 19374
|
2005-01-08 19:26:18 +00:00 |
|
Chris Lattner
|
fd84495692
|
Add support for FP->INT conversions and back.
llvm-svn: 19369
|
2005-01-08 08:08:56 +00:00 |
|
Chris Lattner
|
e759d984cf
|
Implement the 'store FPIMM, Ptr' -> 'store INTIMM, Ptr' optimization for
all targets.
llvm-svn: 19366
|
2005-01-08 06:25:56 +00:00 |
|
Chris Lattner
|
e32ab4bd47
|
1ULL << 64 is undefined, don't do it.
llvm-svn: 19365
|
2005-01-08 06:24:30 +00:00 |
|
Chris Lattner
|
717236fcd3
|
Fix a pointer invalidation problem. This fixes Generic/badarg6.ll
llvm-svn: 19361
|
2005-01-07 23:32:00 +00:00 |
|
Chris Lattner
|
53173ba1d1
|
Fold conditional branches on constants away.
llvm-svn: 19360
|
2005-01-07 22:49:57 +00:00 |
|
Chris Lattner
|
8f55fae569
|
Fix a thinko in the reassociation code, fixing Generic/badlive.ll
llvm-svn: 19359
|
2005-01-07 22:44:09 +00:00 |
|
Chris Lattner
|
6f461f406e
|
Add support for truncating integer casts from long.
llvm-svn: 19358
|
2005-01-07 22:37:48 +00:00 |
|
Chris Lattner
|
79ca9cdb7e
|
Fix a bug in load expansion legalization and ret legalization. This fixes
CodeGen/Generic/select.ll:castconst.
llvm-svn: 19357
|
2005-01-07 22:28:47 +00:00 |
|
Chris Lattner
|
a834e96647
|
Legalize unconditional branches too
llvm-svn: 19356
|
2005-01-07 22:12:08 +00:00 |
|
Chris Lattner
|
3f2ce91a99
|
Implement support for long GEP indices on 32-bit archs and support for
int GEP indices on 64-bit archs.
llvm-svn: 19354
|
2005-01-07 21:56:57 +00:00 |
|
Chris Lattner
|
191554c09f
|
Simplify: truncate ({zero|sign}_extend (X))
llvm-svn: 19353
|
2005-01-07 21:56:24 +00:00 |
|
Chris Lattner
|
60e3842843
|
implement legalization of a bunch more operators.
llvm-svn: 19352
|
2005-01-07 21:45:56 +00:00 |
|