)]}'
{
  "commit": "e7dbc0bcab159a2c64d7d8dff746d273bf80fa36",
  "tree": "a696da7b7f6472deaf9ead89871fcb7a49d27d2f",
  "parents": [
    "1921fba6cf3997787f7821d8fbf72b71f0342ae9"
  ],
  "author": {
    "name": "Jim Stichnoth",
    "email": "stichnot@chromium.org",
    "time": "Tue Sep 15 10:09:24 2015 -0700"
  },
  "committer": {
    "name": "Jim Stichnoth",
    "email": "stichnot@chromium.org",
    "time": "Tue Sep 15 10:09:24 2015 -0700"
  },
  "message": "Subzero: Fix labels for block profiling.\n\nThe problem is that the block profiling pass runs at the very beginning and commits to particular label strings, but the actual label names might change by emission time because of node reordering.\n\nThere was actually something of a workaround - given a label string from the profile output, inspect the *profiled* asm code and search for the block containing the increment of the counter location, as the name of the counter location label is related to the label string in the profile output.  However, it\u0027s tedious to mentally filter out the counter update code, and the counter update code has a huge impact on register allocation.\n\nThe solution is to use a persistent number in CfgNode for constructing the label string, which doesn\u0027t change when the nodes are reordered.\n\nOne note (independent of this change): Without block profiling, empty basic blocks are deleted and don\u0027t appear in the asm output.  But with block profiling, these blocks are never empty because they contain profile update instructions.  This means the profile output may contain labels that don\u0027t exist in the non-profiled asm.\n\nAnother note: New nodes created as a result of edge splitting from advanced phi lowering are not profiled.\n\nBUG\u003d none\nR\u003dascull@google.com, jpp@chromium.org\n\nReview URL: https://codereview.chromium.org/1341613002 .\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c068c44b342e5e07b0d9c3b3a16607a50fbcfacc",
      "old_mode": 33188,
      "old_path": "src/IceCfg.cpp",
      "new_id": "57f216ff39d582b903f22ecf87e98e2500c70763",
      "new_mode": 33188,
      "new_path": "src/IceCfg.cpp"
    },
    {
      "type": "modify",
      "old_id": "78fd47aa28c5f0cb75d7128468d54b90d6fb0af2",
      "old_mode": 33188,
      "old_path": "src/IceCfg.h",
      "new_id": "ca9d7062d4634a9ede5a4d5afb142287fd365eec",
      "new_mode": 33188,
      "new_path": "src/IceCfg.h"
    },
    {
      "type": "modify",
      "old_id": "58e74d484490943cc970bb7f14189124734543d0",
      "old_mode": 33188,
      "old_path": "src/IceCfgNode.cpp",
      "new_id": "cb8d97e95ade4a9da16f91d828fe471885538945",
      "new_mode": 33188,
      "new_path": "src/IceCfgNode.cpp"
    },
    {
      "type": "modify",
      "old_id": "bbfdae203bd14cb7e12a8adab238f5af51e0a962",
      "old_mode": 33188,
      "old_path": "src/IceCfgNode.h",
      "new_id": "63f2c62c36fabf2a6ab7f4b0a85e57599e51f1a9",
      "new_mode": 33188,
      "new_path": "src/IceCfgNode.h"
    },
    {
      "type": "modify",
      "old_id": "60117fd0665bed5c42f77ef224cf2c1d29ad80e0",
      "old_mode": 33188,
      "old_path": "src/IceClFlags.cpp",
      "new_id": "653d7f9bc28bf953d83f50375ed2bdbb50c0c1e0",
      "new_mode": 33188,
      "new_path": "src/IceClFlags.cpp"
    }
  ]
}
