)]}'
{
  "commit": "cb4f026eee99c7400348667b02ea4b2d2c2770aa",
  "tree": "02589bfec306bf1ff78e4c16aaf7a47a7086610c",
  "parents": [
    "9e1280ddbe7c442191b630827c030d13de35b569"
  ],
  "author": {
    "name": "eric fang",
    "email": "eric.fang@arm.com",
    "time": "Mon Apr 13 07:04:40 2020 +0000"
  },
  "committer": {
    "name": "Than McIntosh",
    "email": "thanm@google.com",
    "time": "Mon Jun 08 23:57:40 2020 +0000"
  },
  "message": "gollvm: implement getg function with inline assembly for arm64\n\nThe getg function is called frequently in runtime, and its performance\nis very critical, so we turn the call to the getg function into a load\noperation to inline it. In order to avoid the thread pointer caching\nproblem when thread switching happens between two function calls of this\nfunction, we only inline the first one through GoSafeGetg pass. But this\nimplementation is not feasible on linux arm64, because it is based on the\nassumption that the llvm backend\u0027s cse optimization of the thread pointer\nonly happens in a block range, but on linux arm64, this optimization occurs\nin the entire function range.\nExpanding GoSafeGetg pass to the entire function range is not a good\nsolution, because there will still be a large number of getg function\ncalls that are not inlined.\nThis CL simulates the implementation of getg in the c file through inline\nassembly. This not only ensures its correctness, but also ensures that\neach getg function call in Go files is inlined.\nThe disadvantage is that if no thread switching occurs between two getg\nfunction calls, then theoretically the second getg function call can be\noptimized, but not in this implementation. In this implementation, all\ninstruction sequences of getg function will be executed once it is called.\n\nThis CL also added a unit test case for this implementation.\n\nUpdates golang/go#37295\n\nChange-Id: If9e47b2afeb420a1d0316f2a82602b18bed82477\nReviewed-on: https://go-review.googlesource.com/c/gollvm/+/228737\nReviewed-by: Than McIntosh \u003cthanm@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "da3c09dccf481b713c7a1698c0058f98893b2b9d",
      "old_mode": 33188,
      "old_path": "bridge/go-llvm-materialize.cpp",
      "new_id": "63fec776f1a68a1cf7d1ae76a6d196f2bd1dc6ba",
      "new_mode": 33188,
      "new_path": "bridge/go-llvm-materialize.cpp"
    },
    {
      "type": "modify",
      "old_id": "7dbe0cdc13c82cf684a76fa272957e57e4f97376",
      "old_mode": 33188,
      "old_path": "bridge/go-llvm.cpp",
      "new_id": "92c0f544d6611f4a285ee6e750f5ddb73fadee7a",
      "new_mode": 33188,
      "new_path": "bridge/go-llvm.cpp"
    },
    {
      "type": "modify",
      "old_id": "ff77d3bc5638b1e4c65016a16561b6145da60459",
      "old_mode": 33188,
      "old_path": "bridge/go-llvm.h",
      "new_id": "653c58ae97ab88005acdd232e4e1e552affd3407",
      "new_mode": 33188,
      "new_path": "bridge/go-llvm.h"
    },
    {
      "type": "modify",
      "old_id": "59b2f3d1f7e5f8979d164207b37b4ce39f9fe3d1",
      "old_mode": 33188,
      "old_path": "driver/CompileGo.cpp",
      "new_id": "b071aa0c0a2b3c857afe0287b1b710e6fade35c4",
      "new_mode": 33188,
      "new_path": "driver/CompileGo.cpp"
    },
    {
      "type": "modify",
      "old_id": "dc09b34ee0e41db9e67c084d57b9d03a6b95371a",
      "old_mode": 33188,
      "old_path": "unittests/BackendCore/BackendCABIOracleTests.cpp",
      "new_id": "98561e86f857fe03a5a5e85e33cc02ad527fd206",
      "new_mode": 33188,
      "new_path": "unittests/BackendCore/BackendCABIOracleTests.cpp"
    },
    {
      "type": "modify",
      "old_id": "c8f4f21f72ebd85901870c885d3c740c0769516b",
      "old_mode": 33188,
      "old_path": "unittests/BackendCore/BackendCallTests.cpp",
      "new_id": "e20e24cc531c01135c3eaed371be43cd2fe8edac",
      "new_mode": 33188,
      "new_path": "unittests/BackendCore/BackendCallTests.cpp"
    },
    {
      "type": "modify",
      "old_id": "0c3182842af737c011ce4bfede3c21ec845a3791",
      "old_mode": 33188,
      "old_path": "unittests/BackendCore/BackendTreeIntegrity.cpp",
      "new_id": "6c56512d0441458b9b3a094a4ca7ee49c45a057d",
      "new_mode": 33188,
      "new_path": "unittests/BackendCore/BackendTreeIntegrity.cpp"
    },
    {
      "type": "modify",
      "old_id": "ccfadd6068ff75d358538d7c456c327585529743",
      "old_mode": 33188,
      "old_path": "unittests/BackendCore/TestUtils.cpp",
      "new_id": "e84e51a2ff9cbb342fe62e95a0515a4018211ec0",
      "new_mode": 33188,
      "new_path": "unittests/BackendCore/TestUtils.cpp"
    }
  ]
}
