OSDN Git Service

Bug fixes for ld/st elimination.
authorBen Cheng <bccheng@android.com>
Tue, 26 Apr 2011 17:00:22 +0000 (10:00 -0700)
committerBen Cheng <bccheng@android.com>
Tue, 26 Apr 2011 17:26:16 +0000 (10:26 -0700)
commitde9e2b90c156664a1bdc2b5c9911e4dfa527c148
treee954d8defe0190ccbfdbd71f3a74ce63dd4ca305
parent98bfc3b7162417dc1816a75dc566de3572a7e5da
Bug fixes for ld/st elimination.

1) Only optimize each block once. Strictly speaking this is not a
correctness issue however it triggers the subsequent problem.

2) Ignore dead instructions.

   1: ldr     r2, [r5, #8]
   2: ldr     r3, [r5, #8](nop)
   3: str     r3, [r5, #4]
   4: movs    r3, r2

When using instruction 1 to initiate redundant ld/st eliminations, if
instruction 2 (which is already dead) is not ignored, it will be turned
into a "mov r3, r2" and that will clobber r3 used by the str.

Change-Id: I8eecd13eeb30e4a67ecf1f8fbad925b1e6e91fc8
vm/compiler/codegen/arm/CodegenDriver.c
vm/compiler/codegen/arm/LocalOptimizations.c