Skip to content

Tags: facebook/redex

Tags

v2017.10.31

Toggle v2017.10.31's commit message
regalloc: Always rebuild CFG after inserting instructions

Summary:
The lack of rebuilding caused a bug in the code that inserted loads for param
register in their immediate dominators. Roughly, we started with this code:

  B0:
    load-param v16
    load-param v17
    load-param v18
    load-param v19
    if-eqz v16 :foo
  B1:
    if-eqz v17 :bar

In the first iteration of the regalloc loop, we inserted a load for v18 in B1.
Without rebuilding the CFG, we end up with:

  B0:
    load-param v16
    load-param v17
    load-param v18
    load-param v19
    if-eqz v16 :foo
    move v0 v18
  B1:
    if-eqz v17 :bar

Now in the second iteration of the regalloc loop, we wanted to insert a load
for v19 in B0. We looked to see if the last instruction was a branch opcode --
that would necessitate inserting the move instruction before the branch -- but
since the last opcode in B0 is now a move, we inserted our load in the wrong
place.

I'm not sure why the ART verifier doesn't choke on this, but I'm glad arnaudvenet's
IRTypeChecker did...

Reviewed By: kgsharma

Differential Revision: D6194764

fbshipit-source-id: f7945af4771a82afc6c65f9839b84d34dfc18f15

v1.1.0

Toggle v1.1.0's commit message
Produce a single-file self-extracting script for OSS

Summary:
For the benefit of Buck, homebrew, and all the users who have no idea
what redex-all is, we'll now build redex as a magic self-extracting script.  The
script contains a bash extraction preamble followed by a tar file containing
redex-all and the python wrapper (and libraries).  When `redex` is invoked it
untars this payload to a temp location, executes redex with the specified
parameters, and then deletes the untarred payload.

Differential Revision: D4401602

fbshipit-source-id: 94fa04d7a966be55ab86720c4d426ea566b562bb

v1.0.0

Toggle v1.0.0's commit message
Update stringly-typed method refs to account for colon

Summary:
We added a colon to the method descriptor string used by ProguardMap
and the canonical-name form of DexMethod::get_method.  This is why using strings
to represent complex data is bad.

This was causing remove-unreachable to go haywire, since it's driven by seeds
information, which is in turn parsed using these assumptions.

Reviewed By: satnam6502

Differential Revision: D4000864

fbshipit-source-id: 561b67794f518d534cce16dab6ee9580bfb44ff6