| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
%C = call int asm "xyz $0, $1, $2, $3", "=r,r,r,0"(int %A, int %B, int 4)
and get:
xyz r2, r3, r4, r2
note that the r2's are pinned together. Yaay for 2-address instructions.
2342 ----------------------------------------------------------------------
llvm-svn: 25893
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
substituted operands. For this testcase:
int %test(int %A, int %B) {
%C = call int asm "xyz $0, $1, $2", "=r,r,r"(int %A, int %B)
ret int %C
}
we now emit:
_test:
or r2, r3, r3
or r3, r4, r4
xyz r2, r2, r3 ;; look here
or r3, r2, r2
blr
... note the substituted operands. :)
llvm-svn: 25886
|
| |
|
|
| |
llvm-svn: 25879
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
compile:
int %test(int %A, int %B) {
%C = call int asm "xyz $0, $1, $2", "=r,r,r"(int %A, int %B)
ret int %C
}
into:
(0x8906130, LLVM BB @0x8902220):
%r2 = OR4 %r3, %r3
%r3 = OR4 %r4, %r4
INLINEASM <es:xyz $0, $1, $2>, %r2<def>, %r2, %r3
%r3 = OR4 %r2, %r2
BLR
which asmprints as:
_test:
or r2, r3, r3
or r3, r4, r4
xyz $0, $1, $2 ;; need to print the operands now :)
or r3, r2, r2
blr
llvm-svn: 25878
|
| |
|
|
|
|
| |
of the SELECT_CC, BR_CC, and BRTWOWAY_CC nodes.
llvm-svn: 25875
|
| |
|
|
| |
llvm-svn: 25865
|
| |
|
|
| |
llvm-svn: 25855
|
| |
|
|
|
|
| |
caused several test failures.
llvm-svn: 25852
|
| |
|
|
| |
llvm-svn: 25832
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
int %test_cpuid(int %op) {
%B = alloca int
%C = alloca int
%D = alloca int
%A = call int asm "cpuid", "=eax,==ebx,==ecx,==edx,eax"(int* %B, int* %C, int* %D, int %op)
%Bv = load int* %B
%Cv = load int* %C
%Dv = load int* %D
%x = add int %A, %Bv
%y = add int %x, %Cv
%z = add int %y, %Dv
ret int %z
}
to this:
_test_cpuid:
sub %ESP, 16
mov DWORD PTR [%ESP], %EBX
mov %EAX, DWORD PTR [%ESP + 20]
cpuid
mov DWORD PTR [%ESP + 8], %ECX
mov DWORD PTR [%ESP + 12], %EBX
mov DWORD PTR [%ESP + 4], %EDX
mov %ECX, DWORD PTR [%ESP + 12]
add %EAX, %ECX
mov %ECX, DWORD PTR [%ESP + 8]
add %EAX, %ECX
mov %ECX, DWORD PTR [%ESP + 4]
add %EAX, %ECX
mov %EBX, DWORD PTR [%ESP]
add %ESP, 16
ret
... note the proper register allocation. :)
it is unclear to me why the loads aren't folded into the adds.
llvm-svn: 25827
|
| |
|
|
| |
llvm-svn: 25822
|
| |
|
|
|
|
|
| |
a chance to custom legalize setcc, which broke a bunch of C++ Codes.
Testcase here: CodeGen/X86/2006-01-30-LongSetcc.ll
llvm-svn: 25821
|
| |
|
|
|
|
| |
of lowered target nodes.
llvm-svn: 25804
|
| |
|
|
|
|
| |
interface,making isMaskedValueZeroForTargetNode simpler, and useable from other partsof the compiler.
llvm-svn: 25803
|
| |
|
|
|
|
| |
to permit recursion
llvm-svn: 25799
|
| |
|
|
| |
llvm-svn: 25794
|
| |
|
|
| |
llvm-svn: 25785
|
| |
|
|
|
|
| |
instead.
llvm-svn: 25780
|
| |
|
|
| |
llvm-svn: 25774
|
| |
|
|
|
|
| |
custom expansion of ConstantFP nodes.
llvm-svn: 25772
|
| |
|
|
| |
llvm-svn: 25767
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
faster. This cuts about 120 lines of code out of the legalizer (mostly code
checking to see if operands have changed).
It also fixes an ugly performance issue, where the legalizer cloned the entire
graph after any change. Now the "UpdateNodeOperands" method gives it a chance
to reuse nodes if the operands of a node change but not its opcode or valuetypes.
This speeds up instruction selection time on kimwitu++ by about 8.2% with a
release build.
llvm-svn: 25746
|
| |
|
|
| |
llvm-svn: 25744
|
| |
|
|
| |
llvm-svn: 25742
|
| |
|
|
| |
llvm-svn: 25740
|
| |
|
|
| |
llvm-svn: 25739
|
| |
|
|
| |
llvm-svn: 25738
|
| |
|
|
| |
llvm-svn: 25737
|
| |
|
|
|
|
|
|
|
|
|
| |
1. Pull out the expand cases for BSWAP and CT* into a separate function,
reducing the size of LegalizeOp.
2. Fix a bug where expand(bswap i64) was wrong when i64 is legal.
3. Changed LegalizeOp/PromoteOp so that the legalizer never needs to be
iterative. It now operates in a single pass over the nodes.
4. Simplify a LOT of code, with a net reduction of ~280 lines.
llvm-svn: 25736
|
| |
|
|
|
|
|
|
|
|
|
| |
relegalizes the stuff it returns.
Add the ability to custom expand ADD/SUB, so that targets don't need to deal
with ADD_PARTS/SUB_PARTS if they don't want.
Fix some obscure potential bugs and simplify code.
llvm-svn: 25732
|
| |
|
|
|
|
| |
ExpandLibCall do it itself.
llvm-svn: 25731
|
| |
|
|
|
|
| |
a libcall.
llvm-svn: 25730
|
| |
|
|
| |
llvm-svn: 25728
|
| |
|
|
| |
llvm-svn: 25727
|
| |
|
|
|
|
| |
who don't want the default behavior (Alpha).
llvm-svn: 25726
|
| |
|
|
| |
llvm-svn: 25723
|
| |
|
|
| |
llvm-svn: 25721
|
| |
|
|
|
|
|
| |
the same functionality. This addresses another piece of bug 680. Next,
on to fixing Alpha VAARG, which I broke last time.
llvm-svn: 25696
|
| |
|
|
| |
llvm-svn: 25694
|
| |
|
|
| |
llvm-svn: 25691
|
| |
|
|
| |
llvm-svn: 25689
|
| |
|
|
| |
llvm-svn: 25687
|
| |
|
|
| |
llvm-svn: 25686
|
| |
|
|
| |
llvm-svn: 25685
|
| |
|
|
|
|
| |
Handle 64 in DIEs.
llvm-svn: 25684
|
| |
|
|
| |
llvm-svn: 25676
|
| |
|
|
|
|
| |
ISD::INLINEASM node.
llvm-svn: 25668
|
| |
|
|
|
|
| |
with outputs or inputs are not supported yet. :)
llvm-svn: 25664
|
| |
|
|
| |
llvm-svn: 25662
|
| |
|
|
|
|
| |
Global Variable information is now pulled from "llvm.dbg.globals"
llvm-svn: 25655
|