/*
 * README.android describes in high-level the LLVM changes that we cannot push
 * upstream to the llvm.org repository:
 *  - Changes due to Android's build system.
 *  - Changes due to Android's toolchain.
 *  - Changes due to the limitations in Android-based consumer electronics.
 *
 * Some of them are to-dos. If and when they are done, there will no longer be
 * merge conflicts with upstream on those parts.
 *
 * The file contains useful hints when we try to resolve future 3-way merge
 * conflicts.
 */

* For Honeycomb: Synced to upstream r112344.
* For Honeycomb MR1: Synced to upstream r119309
* For Honeycomb MR2: Synced to upstream r119309
* For Ice Cream Sandwich: Synced to upstream r135569
* For Ice Cream Sandwich MR1: Synced to upstream r142530
* For Ice Cream Sandwich MR2: Synced to upstream r146714
* For Jellybean: Synced to upstream r155090
* For Jellybean MR1: Synced to upstream r162314
* For Jellybean MR2: Synced to upstream r176139

* Recent downstreaming on 2013/3/5: Synced to r176139 (Contact srhines for merge questions.)
* Recent downstreaming on 2013/1/8: Synced to r171905 (Contact srhines for merge questions.)
* Recent downstreaming on 2012/8/23: Synced to r162314 (Contact srhines for merge questions.)
* Recent downstreaming on 2012/8/3: Synced to r160668 (Contact sliao for merge questions.)
* Cherry-pick on 2012/05/23: https://llvm.org/svn/llvm-project/llvm/trunk@157317 (Contact srhines for merge questions.)
* Recent downstreaming on 2012/4/24: Synced to r155090 (Contact sliao for merge questions.)
* Recent downstreaming on 2012/3/24: Synced to r153224 (Contact sliao & srhines for merge questions.)
* Recent downstreaming on 2012/3/5: Synced to r152063 (Contact srhines & sliao for merge questions.)
* Recent downstreaming on 2011/12/17: Synced to r146714 (Contact loganchien & sliao for merge questions.)
* Recent downstreaming on 2011/11/26: Synced to r145126 (Contact loganchien & sliao for merge questions.)
* Recent downstreaming on 2011/11/17: Synced to r144606 (Contact loganchien & sliao for merge questions.)
* Recent downstreaming on 2011/11/14: Synced to r144354 (Contact srhines for merge questions.)
* Recent downstreaming on 2011/10/22: Synced to r142530 (Contact sliao & loganchien for merge questions.)
* Recent downstreaming on 2011/7/21:  Synced to r135569 (Contact sliao & loganchien for merge questions.)
* Recent downstreaming on 2011/7/19:  Synced to r135360 (Contact sliao for merge questions.)
* Recent downstreaming on 2011/7/2:   Synced to r134306 (Contact sliao for merge questions.)
* Recent downstreaming on 2011/6/30:  Synced to r133718 (Contact sliao for merge questions.)
  * This downstreaming could have broken bitcode compatibility
    * Upstream was migrating from 2.7 bitcode to 3.0 bitcode.
    * See the 4 commits on 2011/6/17:
    ==> * 4f6bab9 - Drop the "2" suffix on some enums. (13 days ago) <Chris Lattner>
    ==> * 96a74c5 - remove support for a bunch of obsolete instruction encodings and other backward compatibility hacks. (13 days ago) <Chris Lattner>
        * 738f05a - Remove a useless copy of MCELFStreamer. Patch by Logan Chien! (13 days ago) <Benjamin Kramer>
        * 981d826 - getSuccWeight returns now default 0 if Weights vector is empty. (13 days ago) <Jakub Staszak>
        * 799a58a55 - missed a file. (13 days ago) <Chris Lattner>
    ==> * 9d61dd9 - Remove some "2" suffixes from the metadata enums now that "1" is gone. (13 days ago) <Chris Lattner>
    ==> * 020a5a4 - remove bitcode reader support for LLVM 2.7 metadata encoding. (13 days ago) <Chris Lattner>
  * We maintain compatibility because Honeycomb SDK is out there.
    * Our bitcode reader can read both 2.7 and 3.0 versions. Writer is tracking upstream.
* Recent downstreaming on 2011/6/22:  Synced to r133240 (Contact sliao@ for merge questions.)
* Recent downstreaming on 2011/4/8:   Synced to r129128 (Contact sliao@ for merge questions.)
* Recent downstreaming on 2011/3/11:  Synced from r119309 to r127116 (Contact sliao@ for merge questions.)

* We add 40+ Android's *.mk files that are specific to Android's build system.

* All the configuration files because we don't have configure/make/make-install

* Changes for enabling both host and device builds.

* All the tblgen work to enable Android to build a generator-generator binary
  and then run it in the middle of Android build process.

* Explicitly include <cctype> header since is*() are not builtin functions in
Android toolchain.

* Code changes to make Android's toolchain stop outputting warnings. (This part
  should be pushed upstream eventually.)

* lib/Target/{X86,ARM}/AsmPrinter/{X86,ARM}AsmPrinter.cpp
   Move from lib/Target/{X86,ARM}/{X86,ARM}AsmPrinter.cpp.
   AsmPrinter is only needed in Android when disassembly functionality
      is desired to be included.

* Our ARM code generation fixes that upstream hasn't accepted yet. (This
  conflict will be resolved eventually, but there will always be time lag.)

* Assorted size optimizations because Android-based consumer electronics
  need them.
