mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Add bundle aware API for querying instruction properties and switch the code
generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API. For properties like mayLoad / mayStore, look into the bundle and if any of the bundled instructions has the property it would return true. For properties like isPredicable, only return true if *all* of the bundled instructions have the property. For properties like canFoldAsLoad, isCompare, conservatively return false for bundles. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146026 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -64,7 +64,7 @@ static void RemoveVRSaveCode(MachineInstr *MI) {
|
||||
// epilog blocks.
|
||||
for (MachineFunction::iterator I = MF->begin(), E = MF->end(); I != E; ++I) {
|
||||
// If last instruction is a return instruction, add an epilogue
|
||||
if (!I->empty() && I->back().getDesc().isReturn()) {
|
||||
if (!I->empty() && I->back().isReturn()) {
|
||||
bool FoundIt = false;
|
||||
for (MBBI = I->end(); MBBI != I->begin(); ) {
|
||||
--MBBI;
|
||||
|
@@ -210,13 +210,13 @@ void PPCDAGToDAGISel::InsertVRSaveCode(MachineFunction &Fn) {
|
||||
|
||||
// Find all return blocks, outputting a restore in each epilog.
|
||||
for (MachineFunction::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB) {
|
||||
if (!BB->empty() && BB->back().getDesc().isReturn()) {
|
||||
if (!BB->empty() && BB->back().isReturn()) {
|
||||
IP = BB->end(); --IP;
|
||||
|
||||
// Skip over all terminator instructions, which are part of the return
|
||||
// sequence.
|
||||
MachineBasicBlock::iterator I2 = IP;
|
||||
while (I2 != BB->begin() && (--I2)->getDesc().isTerminator())
|
||||
while (I2 != BB->begin() && (--I2)->isTerminator())
|
||||
IP = I2;
|
||||
|
||||
// Emit: MTVRSAVE InVRSave
|
||||
|
Reference in New Issue
Block a user