)]}'
{
  "commit": "28068adbf34a4602090efddc18b4dd123ffdeb6a",
  "tree": "f17baf225e28eee23ef0319fe9f2dd8dfbc3a6d2",
  "parents": [
    "969f6a33c32f9e7197672fbc911918589f5218bd"
  ],
  "author": {
    "name": "Jan Voung",
    "email": "jvoung@chromium.org",
    "time": "Fri Jul 31 12:58:46 2015 -0700"
  },
  "committer": {
    "name": "Jan Voung",
    "email": "jvoung@chromium.org",
    "time": "Fri Jul 31 12:58:46 2015 -0700"
  },
  "message": "ARM: Add a postRA pass to legalize stack offsets. Greedy approach (reserve IP).\n\nMake a post-register allocation and post-addProlog pass to\ngo through variables with stack offsets and legalize them\nin case the offsets are not encodeable. The naive approach\nis to reserve IP, and use IP to movw/movt the offset, then\nadd/sub the frame/stack pointer to IP and use IP as the new\nbase instead of the frame/stack pointer. We do some amount\nof CSE within a basic block, and share the IP base pointer\nwhen it is (a) within range for later stack references,\nand (b) IP hasn\u0027t been clobbered (e.g., by a function call).\nI chose to do this greedy approach for both Om1 and O2,\nsince it should just be a linear pass, and it reduces the\namount of variables/instructions created compared to the\nsuper-naive peephole approach (so might be faster?).\n\nIntroduce a test-only flag and use that to artificially\nbloat the stack frame so that spill offsets are out\nof range for ARM. Use that flag for cross tests to\nstress this new code a bit more (than would have been\nstressed by simply doing a lit test + FileCheck).\n\nAlso, the previous version of emitVariable() was using the\nVar\u0027s type to determine the range (only +/- 255 for i16,\nvs +/- 4095 for i32), even though mov\u0027s emit() always\nuses a full 32-bit \"ldr\" instead of a 16-bit \"ldrh\".\nUse a common legality check, which uses the stackSlotType\ninstead of the Var\u0027s type. This previously caused the\ntest_bitmanip to spuriously complain, even though the\noffsets for Om1 were \"only\" in the 300 byte range. With this\nfixed, we can then enable the test_bitmanip test too.\n\nBUG\u003d https://code.google.com/p/nativeclient/issues/detail?id\u003d4076\nR\u003dstichnot@chromium.org\n\nReview URL: https://codereview.chromium.org/1241763002 .\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ae9d50544f5a57b18ef9c4907370da81a7b835c7",
      "old_mode": 33188,
      "old_path": "Makefile.standalone",
      "new_id": "a892870f9c91121df0db90ee3d35c1566990e626",
      "new_mode": 33188,
      "new_path": "Makefile.standalone"
    },
    {
      "type": "modify",
      "old_id": "7a479c3963da094f0a10f4724449c7047e8dc33a",
      "old_mode": 33261,
      "old_path": "pydir/crosstest.py",
      "new_id": "c8ab30678cbd29c59926652bc43f33798ff5d105",
      "new_mode": 33261,
      "new_path": "pydir/crosstest.py"
    },
    {
      "type": "modify",
      "old_id": "499e226a794103e79a994820191a6a4d7be870a9",
      "old_mode": 33188,
      "old_path": "src/IceCfg.h",
      "new_id": "cf572c14f0824ee7bbee679606c15e675d6a6f1e",
      "new_mode": 33188,
      "new_path": "src/IceCfg.h"
    },
    {
      "type": "modify",
      "old_id": "5066a4b996d4a86ce75aa45f36248742ba319e41",
      "old_mode": 33188,
      "old_path": "src/IceClFlags.cpp",
      "new_id": "aa4b4b63ce49a35b0d1de5fcb37eb2e0f65e2a55",
      "new_mode": 33188,
      "new_path": "src/IceClFlags.cpp"
    },
    {
      "type": "modify",
      "old_id": "244790badeb1022486a3196d6639dc49b0bbfc0a",
      "old_mode": 33188,
      "old_path": "src/IceClFlags.h",
      "new_id": "26982365048708ca9ceb726059016772d174bbf5",
      "new_mode": 33188,
      "new_path": "src/IceClFlags.h"
    },
    {
      "type": "modify",
      "old_id": "ddc94a7bf83669b79c1f3e14365d283b0207c013",
      "old_mode": 33188,
      "old_path": "src/IceInstARM32.cpp",
      "new_id": "70b6791f0cece58decbf2121aa02619f169c2fe9",
      "new_mode": 33188,
      "new_path": "src/IceInstARM32.cpp"
    },
    {
      "type": "modify",
      "old_id": "93b1e22a07b000b67b7d628ee036a93c3cc3e953",
      "old_mode": 33188,
      "old_path": "src/IceInstARM32.def",
      "new_id": "5bf54ee24054887c1803d28cd0d54c3f8e42835d",
      "new_mode": 33188,
      "new_path": "src/IceInstARM32.def"
    },
    {
      "type": "modify",
      "old_id": "030c194fc047660205950cef9e34cd739b0697fe",
      "old_mode": 33188,
      "old_path": "src/IceInstARM32.h",
      "new_id": "d254180d8e3c9d28d47b4ec8837db7ee90d4967f",
      "new_mode": 33188,
      "new_path": "src/IceInstARM32.h"
    },
    {
      "type": "modify",
      "old_id": "815efafb9d9bdc9597a7f654e68d61341a22ed9f",
      "old_mode": 33188,
      "old_path": "src/IceOperand.cpp",
      "new_id": "e46fac03d9387604f3d1a0fea6fc48bb37c49713",
      "new_mode": 33188,
      "new_path": "src/IceOperand.cpp"
    },
    {
      "type": "modify",
      "old_id": "ccfefb95a4f9780633220ec7bfea1b93dc561205",
      "old_mode": 33188,
      "old_path": "src/IceOperand.h",
      "new_id": "5bf4676b38399d54450e3656a30cd84e389b1ebb",
      "new_mode": 33188,
      "new_path": "src/IceOperand.h"
    },
    {
      "type": "modify",
      "old_id": "417ad2f11d3dfa86505e0c657307a879a64913e3",
      "old_mode": 33188,
      "old_path": "src/IceTargetLowering.cpp",
      "new_id": "d1ca570ba7d2a0fe1a70a18a389a1bdfac038d92",
      "new_mode": 33188,
      "new_path": "src/IceTargetLowering.cpp"
    },
    {
      "type": "modify",
      "old_id": "c7ef9189fa585dfd9bf7f204e1b0949e4dec7270",
      "old_mode": 33188,
      "old_path": "src/IceTargetLowering.h",
      "new_id": "2d03a7699eb0c19d26786548ee401a7dc28a3544",
      "new_mode": 33188,
      "new_path": "src/IceTargetLowering.h"
    },
    {
      "type": "modify",
      "old_id": "5a87a0bb1d73c85af54852a8e8420a5a0a2c836e",
      "old_mode": 33188,
      "old_path": "src/IceTargetLoweringARM32.cpp",
      "new_id": "f137a939ad749235413b07a041ffd9c412287ba9",
      "new_mode": 33188,
      "new_path": "src/IceTargetLoweringARM32.cpp"
    },
    {
      "type": "modify",
      "old_id": "58deb240df8d1af4094e78f6554a31911c13a0c8",
      "old_mode": 33188,
      "old_path": "src/IceTargetLoweringARM32.h",
      "new_id": "b60b6a68a7245058119872de06c97d85d774b838",
      "new_mode": 33188,
      "new_path": "src/IceTargetLoweringARM32.h"
    },
    {
      "type": "modify",
      "old_id": "d55fce69ed1b3a6d1d334794909ca7b05c7d3102",
      "old_mode": 33188,
      "old_path": "src/IceTargetLoweringMIPS32.cpp",
      "new_id": "5e87fa7c51b855cab13ff0ec5679bb8f3cb58557",
      "new_mode": 33188,
      "new_path": "src/IceTargetLoweringMIPS32.cpp"
    },
    {
      "type": "modify",
      "old_id": "3c7ad5e66924f59501d901f09531401f2445c41d",
      "old_mode": 33188,
      "old_path": "src/IceTargetLoweringX86BaseImpl.h",
      "new_id": "88abe0969f1a6b2dfc0179e2bf366734d6afde6a",
      "new_mode": 33188,
      "new_path": "src/IceTargetLoweringX86BaseImpl.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6fba4dfe2b29a8e29cdadc07ac886539c081588c",
      "new_mode": 33188,
      "new_path": "tests_lit/llvm2ice_tests/large_stack_offs.ll"
    }
  ]
}
