)]}'
{
  "commit": "598e882ee88a1e3349fb6d8dcd68f6d3b1c6334f",
  "tree": "aa6e5a2fd86cf7a6ad72dafabe5ae9925ab8ef03",
  "parents": [
    "3aa96f52cff3dfedba428d70fb2c55798b39e1b3"
  ],
  "author": {
    "name": "Joseph Huber",
    "email": "huberjn@outlook.com",
    "time": "Wed Mar 12 13:51:44 2025 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Mar 12 13:51:44 2025 -0500"
  },
  "message": "[libc] Template the writing mode for the writer class (#111559)\n\nSummary:\nCurrently we dispatch the writing mode off of a runtime enum passed in\nby the constructor. This causes very unfortunate codegen for the GPU\ntargets where we get worst-case codegen because of the unused function\npointer for `sprintf`. Instead, this patch moves all of this to a\ntemplate so it can be masked out. This results in no dynamic stack and\nuses 60 VGPRs instead of 117. It also compiles about 5x as fast.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c38d4242292185e6542ce4da49022f6e4eb90ba3",
      "old_mode": 33188,
      "old_path": "libc/config/config.json",
      "new_id": "d738aade74427734e65cb90758ef8e31b616f79d",
      "new_mode": 33188,
      "new_path": "libc/config/config.json"
    },
    {
      "type": "modify",
      "old_id": "d99f48ecbede1c13fbb4a918dbef581a82bd1fc4",
      "old_mode": 33188,
      "old_path": "libc/config/gpu/amdgpu/config.json",
      "new_id": "30ae10e2cfd614c5f838bbbde45f3a5cdfa594e3",
      "new_mode": 33188,
      "new_path": "libc/config/gpu/amdgpu/config.json"
    },
    {
      "type": "modify",
      "old_id": "d99f48ecbede1c13fbb4a918dbef581a82bd1fc4",
      "old_mode": 33188,
      "old_path": "libc/config/gpu/nvptx/config.json",
      "new_id": "30ae10e2cfd614c5f838bbbde45f3a5cdfa594e3",
      "new_mode": 33188,
      "new_path": "libc/config/gpu/nvptx/config.json"
    },
    {
      "type": "modify",
      "old_id": "940a07754c4582c653ff667f6055b9c06ff3120d",
      "old_mode": 33188,
      "old_path": "libc/docs/configure.rst",
      "new_id": "dee9a63101eb9c2a45982d17bd7696445c1e5036",
      "new_mode": 33188,
      "new_path": "libc/docs/configure.rst"
    },
    {
      "type": "modify",
      "old_id": "ea58067c7070a6fc87dae91a5a534f4890185f83",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/CMakeLists.txt",
      "new_id": "c22f9858f3b1e60a910c555828e17eb227e0b74b",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "2596cba813c2e9a414fe4a1a30073e0d95a17fe2",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/char_converter.h",
      "new_id": "fd2eb2553887a8f3a007aac48e96035d52c06a1f",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/char_converter.h"
    },
    {
      "type": "delete",
      "old_id": "b1c66451f53f0f1db46a31d4aae03e2fe8bfa06b",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/converter.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "2b3f06d0aa7a36cc54f5057592292a5d10a2ecfb",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/converter.h",
      "new_id": "f26ed727f05f40063482ce2923d95b982b359b32",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/converter.h"
    },
    {
      "type": "modify",
      "old_id": "ba0a62d9fcb87fd5522c51f723fa6bb315b030dc",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/fixed_converter.h",
      "new_id": "e8a33149675629c0acd76f17c42c782931f0bebf",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/fixed_converter.h"
    },
    {
      "type": "modify",
      "old_id": "d93457fcafd7f98bf266321bd396365d44ab81c2",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/float_dec_converter.h",
      "new_id": "ee5549825a6f223ad0f74e071039375a66bfee25",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/float_dec_converter.h"
    },
    {
      "type": "modify",
      "old_id": "b264b5cf207283321d46666d25cecd1a966fd310",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/float_hex_converter.h",
      "new_id": "16592e7bac93298c7456def42a67ee0258a37581",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/float_hex_converter.h"
    },
    {
      "type": "modify",
      "old_id": "3e41612e21c9fcca0dcf8f6687a6303462679cc4",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/float_inf_nan_converter.h",
      "new_id": "ce31d7ae55499a9f6ec6c6f2e38d2a9b0f4b9fee",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/float_inf_nan_converter.h"
    },
    {
      "type": "modify",
      "old_id": "d0af229f89be518594f829d507564641b9ff7673",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/int_converter.h",
      "new_id": "11234c32ce9979211fc09482849b34984ba47ae7",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/int_converter.h"
    },
    {
      "type": "delete",
      "old_id": "bd4a5a168bd23ecc2726765a466e2a7f6f7422e8",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/printf_main.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "3e73bf36e0e3092f6be2b3cc8fd418f7f9075e05",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/printf_main.h",
      "new_id": "57f29858d5298d09c01cb4bff16fe55a5b01d322",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/printf_main.h"
    },
    {
      "type": "modify",
      "old_id": "bf84718dfe6a86b51a86711a950e96665e6404ac",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/ptr_converter.h",
      "new_id": "c2a74e3043e6f6c23a91cbccc97866ecfd5f8baf",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/ptr_converter.h"
    },
    {
      "type": "modify",
      "old_id": "2902fd37c31ae31744b5566a72958ff4ac5b130a",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/strerror_converter.h",
      "new_id": "2cd6df0c01d457eec45ec6311d0367c68fa6e80e",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/strerror_converter.h"
    },
    {
      "type": "modify",
      "old_id": "1f36d5112410765bbe6185f0a8e5257d18639512",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/string_converter.h",
      "new_id": "74c9f598210f77e180ce95120bff2ed747f97ae0",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/string_converter.h"
    },
    {
      "type": "modify",
      "old_id": "0e446f856e43815b2e242d8c4ad07cc7fb757eb4",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/vasprintf_internal.h",
      "new_id": "9d46617da7751d2a32970a8c56f3a66e8602f97e",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/vasprintf_internal.h"
    },
    {
      "type": "modify",
      "old_id": "3becfee71dd273e95bb68ec39c27fb8bd43562fe",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/vfprintf_internal.h",
      "new_id": "630de9d9d43dd5eaeb177ca69f1f5271d7d4ddfa",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/vfprintf_internal.h"
    },
    {
      "type": "modify",
      "old_id": "a47cb41cb3287c02322294dea615fd278f40c9e4",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/write_int_converter.h",
      "new_id": "efcff278bd284c14238c3b3ab4d8e710599475d1",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/write_int_converter.h"
    },
    {
      "type": "delete",
      "old_id": "d1cf85df1c8f891bb44f9adfdec44386bf001fcf",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/writer.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "28c9a28270875b40cd6955dde6e5ea31feb514a9",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/printf_core/writer.h",
      "new_id": "1d4734a51b9b82290e57e0fd14ecb6c9e97c8a99",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/printf_core/writer.h"
    },
    {
      "type": "modify",
      "old_id": "12ad3cd1f762b270eccf5419d9c12a3b1ba3e821",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/snprintf.cpp",
      "new_id": "c8940862f711f3e0287fa2a2bf9d01fd8b0d0497",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/snprintf.cpp"
    },
    {
      "type": "modify",
      "old_id": "1f59e6bae4723c3490ed0901dcd9542bbe0834d9",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/sprintf.cpp",
      "new_id": "7be97d3591aaf3a90e452ac636c4d835602b0764",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/sprintf.cpp"
    },
    {
      "type": "modify",
      "old_id": "a584c76833a2dd8756cc82964fc652af98f37efe",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/vsnprintf.cpp",
      "new_id": "b07a2499a0dd3d6c45c9ab9015f462af3fa5e0a4",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/vsnprintf.cpp"
    },
    {
      "type": "modify",
      "old_id": "b3978a09c671ab20a73010d03cad712c89605c82",
      "old_mode": 33188,
      "old_path": "libc/src/stdio/vsprintf.cpp",
      "new_id": "26d497be421250a454630a78ce71580dc3594e1c",
      "new_mode": 33188,
      "new_path": "libc/src/stdio/vsprintf.cpp"
    },
    {
      "type": "modify",
      "old_id": "7f54bdf71a018232321e82d03f53f921e58e54cb",
      "old_mode": 33188,
      "old_path": "libc/src/stdlib/str_from_util.h",
      "new_id": "61e6ba24b38177a3c8a1afe73f72f46ac2ffb0d1",
      "new_mode": 33188,
      "new_path": "libc/src/stdlib/str_from_util.h"
    },
    {
      "type": "modify",
      "old_id": "4c51e4c5c8a01104f0f81b4bb88ecc73b4c362f3",
      "old_mode": 33188,
      "old_path": "libc/src/stdlib/strfromd.cpp",
      "new_id": "f51e6d4c7f1df3d823cae996386bca88b4f5ce75",
      "new_mode": 33188,
      "new_path": "libc/src/stdlib/strfromd.cpp"
    },
    {
      "type": "modify",
      "old_id": "ea98a69ee4d6087e6c396ccb3a54ee5ae6af24df",
      "old_mode": 33188,
      "old_path": "libc/src/stdlib/strfromf.cpp",
      "new_id": "14dbfdb25bab6e0ed3708ce0bc1815b6e5fa241a",
      "new_mode": 33188,
      "new_path": "libc/src/stdlib/strfromf.cpp"
    },
    {
      "type": "modify",
      "old_id": "d5bee7609f69caee0ac427ea47f11caff32b62ec",
      "old_mode": 33188,
      "old_path": "libc/src/stdlib/strfroml.cpp",
      "new_id": "12f22a8a2fb659146d1c08bfd02036842eca8773",
      "new_mode": 33188,
      "new_path": "libc/src/stdlib/strfroml.cpp"
    },
    {
      "type": "modify",
      "old_id": "c19e58fbadf71740700ed1da63df181057678282",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime.cpp",
      "new_id": "f36091bc9736ec830eea9787b7987282efde0d53",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime.cpp"
    },
    {
      "type": "modify",
      "old_id": "a12a26b2aee0fd158c2d82b31dc4a8e57cfcdc3d",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/CMakeLists.txt",
      "new_id": "5e40e662ac791d7f5b200c2593621ad0bfed02c0",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_core/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "3530075cfe9a9eda3a19c67376c9821133ace6c7",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/composite_converter.h",
      "new_id": "53cb7e536a0e5bd32eb212324b7a4227a337a05f",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_core/composite_converter.h"
    },
    {
      "type": "delete",
      "old_id": "e9263af3d0e556a1cf5d0900727aa585aacfdbc3",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/converter.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "154ee38d9f05accbef5e40dfd7fae7bc28f5ce77",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/converter.h",
      "new_id": "ff0faf35bbd90c2a0c43f849a4d193fe165717f2",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_core/converter.h"
    },
    {
      "type": "modify",
      "old_id": "aef9ddbf791b2c95c7f5afdc985eca5c985d5a17",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/num_converter.h",
      "new_id": "7da9195aa488529de1cb843180e246ef001ce72f",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_core/num_converter.h"
    },
    {
      "type": "modify",
      "old_id": "f0d5bf59102f30329097df1ae71f1cce7126182b",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/str_converter.h",
      "new_id": "13eccd3979ea67cced8b55c4aeca26260e46e1c4",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_core/str_converter.h"
    },
    {
      "type": "delete",
      "old_id": "00839e5a3f4dab2b5724cc4127283d37d71c4fc8",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/strftime_main.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "ae706828df44c816e6e03689da79ece6872fd835",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_core/strftime_main.h",
      "new_id": "c7e590627094a0a82090bd6ce702710109bc3625",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_core/strftime_main.h"
    },
    {
      "type": "modify",
      "old_id": "e19c7c605cd4a106462eeacf5cd534bc88c1f6d0",
      "old_mode": 33188,
      "old_path": "libc/src/time/strftime_l.cpp",
      "new_id": "201b85da39ee2ea5185fc51025a13873219e4a20",
      "new_mode": 33188,
      "new_path": "libc/src/time/strftime_l.cpp"
    },
    {
      "type": "modify",
      "old_id": "9da749f3b8ad1ab6d651947b3200730289e07091",
      "old_mode": 33188,
      "old_path": "libc/test/src/stdio/printf_core/converter_test.cpp",
      "new_id": "96a00ae598ec22ee2df9c13808962f28fc5acbe6",
      "new_mode": 33188,
      "new_path": "libc/test/src/stdio/printf_core/converter_test.cpp"
    },
    {
      "type": "modify",
      "old_id": "4fe5ffb4aa989124ca6d841a78308d818ff109d4",
      "old_mode": 33188,
      "old_path": "libc/test/src/stdio/printf_core/writer_test.cpp",
      "new_id": "8611caa2dfa58d897792a223ff1da9fc6196e613",
      "new_mode": 33188,
      "new_path": "libc/test/src/stdio/printf_core/writer_test.cpp"
    },
    {
      "type": "modify",
      "old_id": "ae8a0d902f4598e42bdca24b513f6a9d41cbaa3e",
      "old_mode": 33188,
      "old_path": "libc/utils/gpu/server/CMakeLists.txt",
      "new_id": "7ca101e42a0afcb8b132f65381e5296f686f5a31",
      "new_mode": 33188,
      "new_path": "libc/utils/gpu/server/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "1faee531fa20dd6d227b6746b535c2688f5334c3",
      "old_mode": 33188,
      "old_path": "libc/utils/gpu/server/rpc_server.cpp",
      "new_id": "6dc81a5ff805de9e9581a6b7b11d92135be390cd",
      "new_mode": 33188,
      "new_path": "libc/utils/gpu/server/rpc_server.cpp"
    }
  ]
}
