)]}'
{
  "commit": "a093ef43dd592b729da46db4ff3057fef9a46023",
  "tree": "1ffb77d71b2e83ab6625126da2ac29c71753316a",
  "parents": [
    "b2d6212d1a051d750fbbc6e71607ad76153e04f0"
  ],
  "author": {
    "name": "Tom Stellard",
    "email": "thomas.stellard@amd.com",
    "time": "Tue Dec 06 20:09:33 2016 +0000"
  },
  "committer": {
    "name": "Tom Stellard",
    "email": "thomas.stellard@amd.com",
    "time": "Tue Dec 06 20:09:33 2016 +0000"
  },
  "message": "Merging r288433:\n\n------------------------------------------------------------------------\nr288433 | oranevskyy | 2016-12-01 14:58:35 -0800 (Thu, 01 Dec 2016) | 24 lines\n\n[ARM] Fix for 64-bit CAS expansion on ARM32 with -O0\n\nSummary:\nThis patch fixes comparison of 64-bit atomic with its expected value in CMP_SWAP_64 expansion.\n\nCurrently, the low words are compared with CMP, while the high words are compared with SBC. SBC expects the carry flag to be set if CMP detects a difference. CMP might leave the carry unset for unequal arguments though if the first one is \u003e\u003d than the second. This might cause the comparison logic to detect false equality.\n\nExample of the broken C++ code:\n```\nstd::atomic\u003clong long\u003e at(2);\n\nlong long ll \u003d 1;\nstd::atomic_compare_exchange_strong(\u0026at, \u0026ll, 3);\n```\nEven though the atomic `at` and the expected value `ll` are not equal and `atomic_compare_exchange_strong` returns `false`, `at` is changed to 3.\n\nThe patch replaces SBC with CMPEQ.\n\nReviewers: t.p.northover\n\nSubscribers: aemerson, rengolin, llvm-commits, asl\n\nDifferential Revision: https://reviews.llvm.org/D27315\n\n------------------------------------------------------------------------\n\ngit-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_39@288847 91177308-0d34-0410-b5e6-96231b3b80d8\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "56f5728ecfb8963b448060a06e3caaf2f9b9315c",
      "old_mode": 33188,
      "old_path": "lib/Target/ARM/ARMExpandPseudoInsts.cpp",
      "new_id": "a7b299677c1cc82ffc8a48f3c4f8343e24ee8940",
      "new_mode": 33188,
      "new_path": "lib/Target/ARM/ARMExpandPseudoInsts.cpp"
    },
    {
      "type": "modify",
      "old_id": "ec3005dd8ada00fa93fca87f56d3bd7acf76534d",
      "old_mode": 33188,
      "old_path": "test/CodeGen/ARM/cmpxchg-O0.ll",
      "new_id": "f8ad2bbbbe0e4170739a08c7506ef2acc4230c83",
      "new_mode": 33188,
      "new_path": "test/CodeGen/ARM/cmpxchg-O0.ll"
    }
  ]
}
