| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
llvm-svn: 12685
|
| |
|
|
| |
llvm-svn: 12684
|
| |
|
|
|
|
| |
This allows us to handle code like 'add long %X, 123456789012' more efficiently.
llvm-svn: 12683
|
| |
|
|
| |
llvm-svn: 12682
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
llvm-svn: 12681
|
| |
|
|
|
|
| |
to eliminate
llvm-svn: 12680
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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
}
llvm-svn: 12679
|
| |
|
|
| |
llvm-svn: 12674
|
| |
|
|
| |
llvm-svn: 12673
|
| |
|
|
| |
llvm-svn: 12670
|
| |
|
|
| |
llvm-svn: 12669
|
| |
|
|
| |
llvm-svn: 12668
|
| |
|
|
|
|
| |
testcase! :)
llvm-svn: 12659
|
| |
|
|
| |
llvm-svn: 12658
|
| |
|
|
|
|
|
| |
types and can have arbitrary 32- and 64-bit integer types indexing into
sequential types.
llvm-svn: 12653
|
| |
|
|
|
|
|
|
|
| |
types and can have arbitrary 32- and 64-bit integer types indexing into
sequential types.
Auto-upgrade .ll files that use ubytes to index into structures to use uint's.
llvm-svn: 12652
|
| |
|
|
|
|
|
| |
to index into structure types and allows arbitrary 32- and 64-bit integer
types to index into sequential types.
llvm-svn: 12651
|
| |
|
|
| |
llvm-svn: 12648
|
| |
|
|
|
|
|
| |
have non-long indices for sequential types. In order to avoid trying to figure
out how the v9 backend works, we'll just hack it in the preselection pass.
llvm-svn: 12647
|
| |
|
|
| |
llvm-svn: 12646
|
| |
|
|
| |
llvm-svn: 12644
|
| |
|
|
|
|
|
| |
prerelease format for LLVM bytecode files. Now we only are compatible with
LLVM 1.0+.
llvm-svn: 12643
|
| |
|
|
| |
llvm-svn: 12641
|
| |
|
|
| |
llvm-svn: 12639
|
| |
|
|
| |
llvm-svn: 12638
|
| |
|
|
| |
llvm-svn: 12633
|
| |
|
|
|
|
|
| |
Eliminating call-frame pseudo instrs and frame indices are still stubs.
Flesh out the emitPrologue method based on better ABI knowledge.
llvm-svn: 12632
|
| |
|
|
|
|
| |
Fix up comments.
llvm-svn: 12631
|
| |
|
|
|
|
| |
the CALL instruction).
llvm-svn: 12630
|
| |
|
|
| |
llvm-svn: 12629
|
| |
|
|
| |
llvm-svn: 12623
|
| |
|
|
|
|
|
|
| |
This also implements some new features for the indvars pass, including
linear function test replacement, exit value substitution, and it works with
a much more general class of induction variables and loops.
llvm-svn: 12620
|
| |
|
|
| |
llvm-svn: 12619
|
| |
|
|
| |
llvm-svn: 12618
|
| |
|
|
|
|
|
|
|
|
| |
This actually causes us to turn code like:
return C ? A : B;
into a select instruction.
llvm-svn: 12617
|
| |
|
|
| |
llvm-svn: 12615
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move lowerselect pass to come after preselection. Move machine
code construction and stack slots pass to come right before instruction
selection. This is to help fix perlbmk.
Update comments.
Make the sequence of passes in addPassesToJITCompile look more like
the sequence of passes in addPassesToEmitAssembly, including support
for -print-machineinstrs.
llvm-svn: 12614
|
| |
|
|
| |
llvm-svn: 12613
|
| |
|
|
| |
llvm-svn: 12611
|
| |
|
|
| |
llvm-svn: 12610
|
| |
|
|
|
|
| |
Patch contributed by Reid Spencer
llvm-svn: 12609
|
| |
|
|
| |
llvm-svn: 12607
|
| |
|
|
| |
llvm-svn: 12600
|
| |
|
|
| |
llvm-svn: 12597
|
| |
|
|
| |
llvm-svn: 12595
|
| |
|
|
|
|
| |
Testcase: LoopSimplify/2004-04-01-IncorrectDomUpdate.ll
llvm-svn: 12592
|
| |
|
|
| |
llvm-svn: 12589
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implement a small optimization. In test/Regression/CodeGen/X86/select.ll,
we now generate this for foldSel3:
foldSel3:
mov %AL, BYTE PTR [%ESP + 4]
fld DWORD PTR [%ESP + 8]
fld DWORD PTR [%ESP + 12]
mov %EAX, DWORD PTR [%ESP + 16]
mov %ECX, DWORD PTR [%ESP + 20]
cmp %EAX, %ECX
fxch %ST(1)
fcmovae %ST(0), %ST(1)
*** fstp %ST(1)
ret
Instead of:
foldSel3:
mov %AL, BYTE PTR [%ESP + 4]
fld DWORD PTR [%ESP + 8]
fld DWORD PTR [%ESP + 12]
mov %EAX, DWORD PTR [%ESP + 16]
mov %ECX, DWORD PTR [%ESP + 20]
cmp %EAX, %ECX
fxch %ST(1)
fcmovae %ST(0), %ST(1)
*** fxch %ST(1)
*** fstp %ST(0)
ret
In practice, this only effects code size: performance should be basically
unaffected.
llvm-svn: 12588
|
| |
|
|
| |
llvm-svn: 12587
|
| |
|
|
| |
llvm-svn: 12579
|