aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2001-10-28 21:39:47 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2001-10-28 21:39:47 +0000
commit0589b2c63f34c61a446813ec62791a52ed56c65b (patch)
treebbf7d9af8010f325c1278aeea8f663d8c9dcaeca
parent953c83e1ee6f65fbff7dabb18fa45189986571d8 (diff)
Need to subtract, not add, stack size in SAVE instruction!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1005 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/SparcV9/SparcV9InstrSelection.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
index dc8ab1b761..4bcb9f5f10 100644
--- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp
+++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp
@@ -1011,7 +1011,7 @@ GetInstructionsForProlog(BasicBlock* entryBB,
mvec[0] = new MachineInstr(SAVE);
mvec[0]->SetMachineOperand(0, target.getRegInfo().getStackPointer());
mvec[0]->SetMachineOperand(1, MachineOperand::MO_SignExtendedImmed,
- staticStackSize);
+ - staticStackSize);
mvec[0]->SetMachineOperand(2, target.getRegInfo().getStackPointer());
return 1;
@@ -1519,8 +1519,11 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
case 42: // bool: SetCC(reg, reg):
{
// If result of the SetCC is only used for a single branch, we can
- // discard the result. Otherwise, the boolean value must go into
- // an integer register.
+ // discard the boolean result and keep only the condition code.
+ // Otherwise, the boolean value must go into an integer register.
+ // To put the boolean result in a register we use a conditional move,
+ // unless the result of the SUBCC instruction can be used as the bool!
+ // This assumes that zero is FALSE and any non-zero integer is TRUE.
//
bool keepBoolVal = (subtreeRoot->parent() == NULL ||
((InstructionNode*) subtreeRoot->parent())