| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 45576
|
| |
|
|
| |
llvm-svn: 45575
|
| |
|
|
| |
llvm-svn: 45574
|
| |
|
|
| |
llvm-svn: 45573
|
| |
|
|
| |
llvm-svn: 45572
|
| |
|
|
| |
llvm-svn: 45571
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
--enable-sinking.
It is missing validity checks, so it is known broken. However, it is powerful enough
to compile this contrived code:
void test1(int C, double A, double B, double *P) {
double Tmp = A*A+B*B;
*P = C ? Tmp : A;
}
into:
_test1:
movsd 8(%esp), %xmm0
cmpl $0, 4(%esp)
je LBB1_2 # entry
LBB1_1: # entry
movsd 16(%esp), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
LBB1_2: # entry
movl 24(%esp), %eax
movsd %xmm0, (%eax)
ret
instead of:
_test1:
movsd 16(%esp), %xmm0
mulsd %xmm0, %xmm0
movsd 8(%esp), %xmm1
movapd %xmm1, %xmm2
mulsd %xmm2, %xmm2
addsd %xmm0, %xmm2
cmpl $0, 4(%esp)
je LBB1_2 # entry
LBB1_1: # entry
movapd %xmm2, %xmm1
LBB1_2: # entry
movl 24(%esp), %eax
movsd %xmm1, (%eax)
ret
woo.
llvm-svn: 45570
|
| |
|
|
| |
llvm-svn: 45569
|
| |
|
|
| |
llvm-svn: 45568
|
| |
|
|
| |
llvm-svn: 45562
|
| |
|
|
| |
llvm-svn: 45553
|
| |
|
|
| |
llvm-svn: 45536
|
| |
|
|
|
|
|
| |
could theoretically introduce a trap, but is also a performance issue.
This speeds up ptrdist/ks by 8%.
llvm-svn: 45533
|
| |
|
|
|
|
| |
"libc_nonshared.a". Patch by Edwin Török!
llvm-svn: 45532
|
| |
|
|
| |
llvm-svn: 45529
|
| |
|
|
| |
llvm-svn: 45528
|
| |
|
|
|
|
| |
for non-function GV relocations that require function address stubs (e.g. Mac OS X in non-static mode).
llvm-svn: 45527
|
| |
|
|
|
|
|
| |
refcount on these correctly, and can end up referring to deleted
attributes. This fixes PR1881.
llvm-svn: 45525
|
| |
|
|
|
|
| |
get a profile.
llvm-svn: 45524
|
| |
|
|
| |
llvm-svn: 45519
|
| |
|
|
|
|
|
| |
own file. Don't #include ParameterAttributes.h into any major
public header files: just move methods out of line as appropriate.
llvm-svn: 45517
|
| |
|
|
| |
llvm-svn: 45516
|
| |
|
|
| |
llvm-svn: 45515
|
| |
|
|
| |
llvm-svn: 45512
|
| |
|
|
| |
llvm-svn: 45506
|
| |
|
|
| |
llvm-svn: 45499
|
| |
|
|
|
|
| |
check that register isn't 0 before going further.
llvm-svn: 45498
|
| |
|
|
| |
llvm-svn: 45496
|
| |
|
|
| |
llvm-svn: 45494
|
| |
|
|
| |
llvm-svn: 45493
|
| |
|
|
|
|
|
| |
instruction. Also, use "splice" to move the new instruction instead of
remove/insert (where it was leaking memory anyway).
llvm-svn: 45492
|
| |
|
|
| |
llvm-svn: 45485
|
| |
|
|
| |
llvm-svn: 45484
|
| |
|
|
|
|
| |
def of the vreg at the start of the list, so the list doesn't need to be traversed.
llvm-svn: 45483
|
| |
|
|
|
|
|
|
|
|
|
| |
dereferencing
it now returns the machineinstr of the use. To get the operand, use I.getOperand().
Add a new MachineRegisterInfo::replaceRegWith, which is basically like
Value::replaceAllUsesWith.
llvm-svn: 45482
|
| |
|
|
|
|
| |
Patch by Bryan O'Sullivan!
llvm-svn: 45481
|
| |
|
|
|
|
| |
instruction that defines the specified vreg. Crazy.
llvm-svn: 45480
|
| |
|
|
|
|
|
| |
operands. The lists are currently kept in MachineRegisterInfo, but it does
not yet provide an iterator interface to them.
llvm-svn: 45477
|
| |
|
|
|
|
| |
version. It's unclear why gcc would ever compile this...
llvm-svn: 45476
|
| |
|
|
|
|
|
|
|
|
| |
a header file from libcodegen. This violates a layering order: codegen
depends on target, not the other way around. The fix to this is to
split TII into two classes, TII and TargetInstrInfoImpl, which defines
stuff that depends on libcodegen. It is defined in libcodegen, where
the base is not.
llvm-svn: 45475
|
| |
|
|
|
|
|
|
| |
values, which means doing extra legalization work.
It would be easier to get this kind of thing right if
there was some documentation...
llvm-svn: 45472
|
| |
|
|
|
|
| |
Machine-level API cleanup instigated by Chris.
llvm-svn: 45470
|
| |
|
|
| |
llvm-svn: 45469
|
| |
|
|
| |
llvm-svn: 45468
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
that "machine" classes are used to represent the current state of
the code being compiled. Given this expanded name, we can start
moving other stuff into it. For now, move the UsedPhysRegs and
LiveIn/LoveOuts vectors from MachineFunction into it.
Update all the clients to match.
This also reduces some needless #includes, such as MachineModuleInfo
from MachineFunction.
llvm-svn: 45467
|
| |
|
|
|
|
|
|
|
|
|
|
| |
e.g. MO.isMBB() instead of MO.isMachineBasicBlock(). I don't plan on
switching everything over, so new clients should just start using the
shorter names.
Remove old long accessors, switching everything over to use the short
accessor: getMachineBasicBlock() -> getMBB(),
getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.
llvm-svn: 45464
|
| |
|
|
|
|
|
|
|
|
| |
- Eliminate the static "print" method for operands, moving it
into MachineOperand::print.
- Change various set* methods for register flags to take a bool
for the value to set it to. Remove unset* methods.
- Group methods more logically by operand flavor in MachineOperand.h
llvm-svn: 45461
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add getParent() accessors.
- Move SubReg out of the AuxInfo union, to make way for future changes.
- Remove the getImmedValue/setImmedValue methods.
- in some MachineOperand::Create* methods, stop initializing fields that are dead.
MachineInstr:
- Delete one copy of the MachineInstr printing code, now there is only one dump
format and one copy of the code.
- Make MachineOperand use the parent field to get info about preg register names if
no target info is otherwise available.
- Move def/use/kill/dead flag printing to the machineoperand printer, so they are
always printed for an operand.
llvm-svn: 45460
|
| |
|
|
| |
llvm-svn: 45459
|
| |
|
|
| |
llvm-svn: 45458
|