Need to subtract, not add, stack size in SAVE instruction!
authorVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 28 Oct 2001 21:39:47 +0000 (21:39 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Sun, 28 Oct 2001 21:39:47 +0000 (21:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1005 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SparcV9/SparcV9InstrSelection.cpp

index dc8ab1b761f7c103365057888a0f0f6d7032a59d..4bcb9f5f10e339dbe39c292a6c837a87aafcedda 100644 (file)
@@ -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())