)]}'
{
  "commit": "0192d15debf07e7d4d365aef8a1f37a9bbfe22a4",
  "tree": "755fd615b3e05bc79a8bc87b44705169d3f6e463",
  "parents": [
    "5da8d8de9762a1ed61590c2fb60193809349b522"
  ],
  "author": {
    "name": "Nicolas Capens",
    "email": "capn@google.com",
    "time": "Wed Mar 27 14:46:07 2019 -0400"
  },
  "committer": {
    "name": "Nicolas Capens",
    "email": "nicolascapens@google.com",
    "time": "Mon Apr 01 14:46:35 2019 +0000"
  },
  "message": "Elide single basic block variable materialization\n\nVariables which are only used within a single basic block and don\u0027t\nhave their address taken, don\u0027t require allocating stack memory.\nInstead they can track the latest rvalue that has been assigned to them.\nAllocating stack memory is necessary for variables that are assigned to\nin divergent basic blocks since there is no single rvalue to track after\nthe merge point (unless we inserted phi instructions, but that is\noutside of the scope of this change).\n\nBecause Reactor can\u0027t look forward to check whether a variable will be\nused in divergent basic blocks, we keep the set of variables that may\nnot have been materialized yet, meaning they have no stack address yet.\nWhen a branch is encountered, they are all materialized.\n\nVariables not yet materialized at a Return() are \u0027killed\u0027 to prevent\nmaterializing afterwards, which would cause the terminator ret\ninstruction to not be the last instruction of the basic block.\n\nNote that this change creates a dependency of the Nucleus\nimplementation on Variable, which is currently defined in a higher\nlayer in Reactor.hpp. Since Variable doesn\u0027t depend on anything else\nin Reactor.hpp it could be made part of Nucleus, or an in-between\nlayer could be added.\n\nBug b/129356087\n\nChange-Id: Ie8c09e34c8befb9787a5c0bca7a20e770bcbf8d3\nReviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/27928\nTested-by: Nicolas Capens \u003cnicolascapens@google.com\u003e\nPresubmit-Ready: Nicolas Capens \u003cnicolascapens@google.com\u003e\nReviewed-by: Ben Clayton \u003cbclayton@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "624af832f8f719c159556db77351f30b51f90f6f",
      "old_mode": 33188,
      "old_path": "src/Reactor/LLVMReactor.cpp",
      "new_id": "55ca0495c79ad4152e8a6d4b2b72284d0d6f4673",
      "new_mode": 33188,
      "new_path": "src/Reactor/LLVMReactor.cpp"
    },
    {
      "type": "modify",
      "old_id": "559cb4f2967ddcc71a270ad73ab7cdc148e00ade",
      "old_mode": 33188,
      "old_path": "src/Reactor/Reactor.cpp",
      "new_id": "b0225335e67adc6925520cda364091c12478edb0",
      "new_mode": 33188,
      "new_path": "src/Reactor/Reactor.cpp"
    },
    {
      "type": "modify",
      "old_id": "ebf2a7a0a96d5c3565df3b0b1e7233e257795d00",
      "old_mode": 33188,
      "old_path": "src/Reactor/Reactor.hpp",
      "new_id": "ee473a63fb9e60a44bedd08ed2b85a7015386989",
      "new_mode": 33188,
      "new_path": "src/Reactor/Reactor.hpp"
    },
    {
      "type": "modify",
      "old_id": "e44533e7e925532a483c3047aee1243916067a9f",
      "old_mode": 33188,
      "old_path": "src/Reactor/ReactorUnitTests.cpp",
      "new_id": "a5de4f9b3afd76d7266dda3177f71bc0470e0748",
      "new_mode": 33188,
      "new_path": "src/Reactor/ReactorUnitTests.cpp"
    },
    {
      "type": "modify",
      "old_id": "fce17171a70501a257aef6b0b3dbdd5bd013e430",
      "old_mode": 33188,
      "old_path": "src/Reactor/SubzeroReactor.cpp",
      "new_id": "dee4af0ebe709bde9ff381e132b03d5b27ed574e",
      "new_mode": 33188,
      "new_path": "src/Reactor/SubzeroReactor.cpp"
    }
  ]
}
