The flag modifications weren't picking up the old values of the
flags before. Save them in a temporary variable, then restore them from the
temporary after creating the new constant.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6520 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/JIT/SparcEmitter.cpp b/lib/ExecutionEngine/JIT/SparcEmitter.cpp
index a9547ac..6c9cdc9 100644
--- a/lib/ExecutionEngine/JIT/SparcEmitter.cpp
+++ b/lib/ExecutionEngine/JIT/SparcEmitter.cpp
@@ -106,13 +106,18 @@
         // Location is the target of the branch
         // Ref is the location of the instruction, and hence the PC
         unsigned branchTarget = (Location - (long)Ref) >> 2;
+        // Save the flags.
+        bool loBits32=false, hiBits32=false, loBits64=false, hiBits64=false;
+        if (op.opLoBits32()) { loBits32=true; }
+        if (op.opHiBits32()) { hiBits32=true; }
+        if (op.opLoBits64()) { loBits64=true; }
+        if (op.opHiBits64()) { hiBits64=true; }
         MI->SetMachineOperandConst(ii, MachineOperand::MO_SignExtendedImmed,
                                    branchTarget);
-        // Copy the flags.
-        if (op.opLoBits32()) { MI->setOperandLo32(ii); }
-        else if (op.opHiBits32()) { MI->setOperandHi32(ii); }
-        else if (op.opLoBits64()) { MI->setOperandLo64(ii); }
-        else if (op.opHiBits64()) { MI->setOperandHi64(ii); }
+        if (loBits32) { MI->setOperandLo32(ii); }
+        else if (hiBits32) { MI->setOperandHi32(ii); }
+        else if (loBits64) { MI->setOperandLo64(ii); }
+        else if (hiBits64) { MI->setOperandHi64(ii); }
         std::cerr << "Rewrote BB ref: ";
         unsigned fixedInstr = SparcV9CodeEmitter::getBinaryCodeForInstr(*MI);
         *Ref = fixedInstr;