)]}'
{
  "commit": "03dabcdca5606e67a484ddd41571590e2a027005",
  "tree": "7099302f8e8c6d9de0db1be74703dcd1c5c7a896",
  "parents": [
    "ffa03675bbdd3fe92e309ce44dcd3159483baa41"
  ],
  "author": {
    "name": "dan sinclair",
    "email": "dsinclair@chromium.org",
    "time": "Tue Apr 01 08:43:40 2025 -0700"
  },
  "committer": {
    "name": "Dawn LUCI CQ",
    "email": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Tue Apr 01 08:43:40 2025 -0700"
  },
  "message": "Revert \"Range Analysis: Get loop exit condition from body block\"\n\nThis reverts commit 1411699ba4cdf29eca037c4320543ab8189bad28.\n\nReason for revert: Crashing on the cmake-linux-clang-dbg-x64-ubsan bot\n\n[ RUN      ] IR_IntegerRangeAnalysisTest.AnalyzeLoopBody_Failure_Index_LessThan_Min_I32\n/b/s/w/ir/cache/uncached/dawn/src/tint/lang/core/number.h:176:46: runtime error: negation of -2147483648 cannot be represented in type \u0027type\u0027 (aka \u0027int\u0027); cast to an unsigned type to negate this value to itself\n   \n\nOriginal change\u0027s description:\n\u003e Range Analysis: Get loop exit condition from body block\n\u003e\n\u003e This patch is the third part to implement the computation of the\n\u003e range on the loop control variables. In this patch we implement the\n\u003e function `GetBinaryToCompareLoopControlVariableInLoopBody()` to get\n\u003e the condition to exit the loop in the loop body block if the loop\n\u003e meets the below requirements (a straightforward for-loop):\n\u003e - The loop control variable is only used as the parameter of the\n\u003e   load instruction.\n\u003e - The first instruction is to load the loop control variable into a\n\u003e   temporary variable.\n\u003e - The second instruction is to compare the temporary variable with\n\u003e   a constant value and save the result to a boolean variable.\n\u003e - The second instruction cannot be a comparison that will never be\n\u003e   true (out of range of 32-bit integer).\n\u003e - The third instruction is an `ifelse` expression that uses the\n\u003e   boolean variable got in the second instruction as the condition.\n\u003e - The true block of the above `ifelse` expression doesn\u0027t contain\n\u003e   `exit_loop`.\n\u003e - The false block of the above `ifelse` expression only contains\n\u003e   `exit_loop`.\n\u003e\n\u003e Bug: chromium:348701956\n\u003e Test: tint_unittests\n\u003e Change-Id: Ie99911791eb6530e6d081ac9b54c2ec74e1be64c\n\u003e Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/233294\n\u003e Commit-Queue: Jiawei Shao \u003cjiawei.shao@intel.com\u003e\n\u003e Reviewed-by: James Price \u003cjrprice@google.com\u003e\n\nTBR\u003djiawei.shao@intel.com,dneto@google.com,jrprice@google.com,dawn-scoped@luci-project-accounts.iam.gserviceaccount.com\n\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nBug: chromium:348701956\nChange-Id: Idf151f39c2b25d66d0ce40dd31300735f3aabf76\nReviewed-on: https://dawn-review.googlesource.com/c/dawn/+/234094\nReviewed-by: James Price \u003cjrprice@google.com\u003e\nCommit-Queue: James Price \u003cjrprice@google.com\u003e\nReviewed-by: dan sinclair \u003cdsinclair@chromium.org\u003e\nAuto-Submit: dan sinclair \u003cdsinclair@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7ea8370b13819991659a73543930b30287ad2c6d",
      "old_mode": 33188,
      "old_path": "src/tint/lang/core/ir/analysis/integer_range_analysis.cc",
      "new_id": "1e7384d2d29d7e80c7b7221701e97905555513a4",
      "new_mode": 33188,
      "new_path": "src/tint/lang/core/ir/analysis/integer_range_analysis.cc"
    },
    {
      "type": "modify",
      "old_id": "d00e262b86d14e02fcda6cae74462ad8e389b996",
      "old_mode": 33188,
      "old_path": "src/tint/lang/core/ir/analysis/integer_range_analysis.h",
      "new_id": "00576c56c14980da62fdc764edcffab7448b8943",
      "new_mode": 33188,
      "new_path": "src/tint/lang/core/ir/analysis/integer_range_analysis.h"
    },
    {
      "type": "modify",
      "old_id": "97b7aa2b4c6762676853c0228435dbbdae2021be",
      "old_mode": 33188,
      "old_path": "src/tint/lang/core/ir/analysis/integer_range_analysis_test.cc",
      "new_id": "9601f6097771a0e256be13d1670206d0e40df80c",
      "new_mode": 33188,
      "new_path": "src/tint/lang/core/ir/analysis/integer_range_analysis_test.cc"
    },
    {
      "type": "modify",
      "old_id": "54879fadaacf0ca22dda1cc34a11d04714034dbf",
      "old_mode": 33188,
      "old_path": "src/tint/lang/core/ir/value.h",
      "new_id": "c2475b6aee670a6a1e3b05fd735809bc5b0b9757",
      "new_mode": 33188,
      "new_path": "src/tint/lang/core/ir/value.h"
    }
  ]
}
