Subzero. ARM32. Fixes infinite loop during address mode formation.

BUG= https://bugs.chromium.org/p/nativeclient/issues/detail?id=4076
R=kschimpf@google.com, sehr@chromium.org, stichnot@chromium.org

Review URL: https://codereview.chromium.org/1609753002 .
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
index 02097ed..0626902 100644
--- a/src/IceTargetLoweringARM32.cpp
+++ b/src/IceTargetLoweringARM32.cpp
@@ -4849,10 +4849,12 @@
     return false;
 
   Operand *SrcOp = VarAssign->getSrc(0);
+  bool Optimized = false;
   if (auto *SrcVar = llvm::dyn_cast<Variable>(SrcOp)) {
     if (!VMetadata->isMultiDef(SrcVar) ||
         // TODO: ensure SrcVar stays single-BB
         false) {
+      Optimized = true;
       *Var = SrcVar;
     } else if (auto *Const = llvm::dyn_cast<ConstantInteger32>(SrcOp)) {
       int32_t MoreOffset = Const->getValue();
@@ -4861,13 +4863,15 @@
         return false;
       *Var = nullptr;
       *Offset += NewOffset;
+      Optimized = true;
     }
-
-    *Reason = VarAssign;
-    return true;
   }
 
-  return false;
+  if (Optimized) {
+    *Reason = VarAssign;
+  }
+
+  return Optimized;
 }
 
 bool isAddOrSub(const Inst *Inst, InstArithmetic::OpKind *Kind) {