From 0589b2c63f34c61a446813ec62791a52ed56c65b Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Sun, 28 Oct 2001 21:39:47 +0000 Subject: [PATCH] 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 --- lib/Target/SparcV9/SparcV9InstrSelection.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp index dc8ab1b761f..4bcb9f5f10e 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()) -- 2.34.1