Don't overwrite a register input.

`addr` is a register input, which can survive the current instruction,
therefore we can't overwrite it.

Change-Id: I6eaa60e5f91c2b7b9b31673457d2a0d63474e587
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index 63f5f94..d0a72bb 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -2596,7 +2596,8 @@
                                                          Register out_hi) {
   if (offset != 0) {
     __ LoadImmediate(out_lo, offset);
-    __ add(addr, addr, ShifterOperand(out_lo));
+    __ add(IP, addr, ShifterOperand(out_lo));
+    addr = IP;
   }
   __ ldrexd(out_lo, out_hi, addr);
 }
@@ -2610,7 +2611,8 @@
   Label fail;
   if (offset != 0) {
     __ LoadImmediate(temp1, offset);
-    __ add(addr, addr, ShifterOperand(temp1));
+    __ add(IP, addr, ShifterOperand(temp1));
+    addr = IP;
   }
   __ Bind(&fail);
   // We need a load followed by store. (The address used in a STREX instruction must