diff --git a/MODULE.bazel b/MODULE.bazel index 9d646e8..b682568 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -13,7 +13,7 @@ pip.parse( use_repo(pip, "pypi") # https://registry.bazel.build/modules/abseil-cpp -bazel_dep(name = "abseil-cpp", version = "20250512.1") +bazel_dep(name = "abseil-cpp", version = "20250814.1") # https://registry.bazel.build/modules/nlohmann_json bazel_dep(name = "nlohmann_json", version = "3.11.3") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 67761e0..72c05ba 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 11, + "lockFileVersion": 18, "registryFileHashes": { "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", @@ -7,27 +7,29 @@ "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.0/MODULE.bazel": "98dc378d64c12a4e4741ad3362f87fb737ee6a0886b2d90c3cdbb4d93ea3e0bf", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/source.json": "750d5e29326fb59cbe61116a7b803c8a1d0a7090a9c8ed89888d188e3c473fc7", - "https://bcr.bazel.build/modules/apple_support/1.13.0/MODULE.bazel": "7c8cdea7e031b7f9f67f0b497adf6d2c6a2675e9304ca93a9af6ed84eef5a524", + "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/MODULE.bazel": "d1086e248cda6576862b4b3fe9ad76a214e08c189af5b42557a6e1888812c5d5", + "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/source.json": "cea3901d7e299da7320700abbaafe57a65d039f10d0d7ea601c4a66938ea4b0c", + "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896", "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", "https://bcr.bazel.build/modules/apple_support/1.15.1/source.json": "517f2b77430084c541bc9be2db63fdcbb7102938c5f64c17ee60ffda2e5cf07b", - "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", - "https://bcr.bazel.build/modules/aspect_bazel_lib/1.31.2/MODULE.bazel": "7bee702b4862612f29333590f4b658a5832d433d6f8e4395f090e8f4e85d442f", - "https://bcr.bazel.build/modules/aspect_bazel_lib/1.38.0/MODULE.bazel": "6307fec451ba9962c1c969eb516ebfe1e46528f7fa92e1c9ac8646bef4cdaa3f", - "https://bcr.bazel.build/modules/aspect_bazel_lib/1.40.3/MODULE.bazel": "668e6bcb4d957fc0e284316dba546b705c8d43c857f87119619ee83c4555b859", - "https://bcr.bazel.build/modules/aspect_bazel_lib/1.40.3/source.json": "f5a28b1320e5f444e798b4afc1465c8b720bfaec7522cca38a23583dffe85e6d", - "https://bcr.bazel.build/modules/aspect_rules_js/1.33.1/MODULE.bazel": "db3e7f16e471cf6827059d03af7c21859e7a0d2bc65429a3a11f005d46fc501b", - "https://bcr.bazel.build/modules/aspect_rules_js/1.39.0/MODULE.bazel": "aece421d479e3c31dc3e5f6d49a12acc2700457c03c556650ec7a0ff23fc0d95", - "https://bcr.bazel.build/modules/aspect_rules_js/1.39.0/source.json": "a8f93e4ad8843e8aa407fa5fd7c8b63a63846c0ce255371ff23384582813b13d", - "https://bcr.bazel.build/modules/aspect_rules_lint/0.12.0/MODULE.bazel": "e767c5dbfeb254ec03275a7701b5cfde2c4d2873676804bc7cb27ddff3728fed", - "https://bcr.bazel.build/modules/aspect_rules_lint/0.12.0/source.json": "9a3668e1ee219170e22c0e7f3ab959724c6198fdd12cd503fa10b1c6923a2559", - "https://bcr.bazel.build/modules/bazel_features/0.1.0/MODULE.bazel": "47011d645b0f949f42ee67f2e8775188a9cf4a0a1528aa2fa4952f2fd00906fd", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", - "https://bcr.bazel.build/modules/bazel_features/1.11.0/source.json": "c9320aa53cd1c441d24bd6b716da087ad7e4ff0d9742a9884587596edfe53015", + "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", + "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", + "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", + "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", + "https://bcr.bazel.build/modules/bazel_features/1.23.0/MODULE.bazel": "fd1ac84bc4e97a5a0816b7fd7d4d4f6d837b0047cf4cbd81652d616af3a6591a", + "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", + "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9", + "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87", + "https://bcr.bazel.build/modules/bazel_features/1.30.0/source.json": "b07e17f067fe4f69f90b03b36ef1e08fe0d1f3cac254c1241a1818773e3423bc", + "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", @@ -38,101 +40,248 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", - "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/source.json": "082ed5f9837901fada8c68c2f3ddc958bb22b6d654f71dd73f3df30d45d4b749", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/source.json": "7ebaefba0b03efe59cac88ed5bbc67bcf59a3eff33af937345ede2a38b2d368a", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", - "https://bcr.bazel.build/modules/gazelle/0.27.0/MODULE.bazel": "3446abd608295de6d90b4a8a118ed64a9ce11dcb3dda2dc3290a22056bd20996", - "https://bcr.bazel.build/modules/gazelle/0.30.0/MODULE.bazel": "f888a1effe338491f35f0e0e85003b47bb9d8295ccba73c37e07702d8d31c65b", - "https://bcr.bazel.build/modules/gazelle/0.30.0/source.json": "7af0779f99120aafc73be127615d224f26da2fc5a606b52bdffb221fd9efb737", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", "https://bcr.bazel.build/modules/googletest/1.15.0/MODULE.bazel": "c4515ecca65378b9035bb6ccee496c1a362b31311c2380ca7740a73bfdaccb51", - "https://bcr.bazel.build/modules/googletest/1.15.0/source.json": "c235880d343a5758da581c839653abeebb5f5cd9d987ff879ca68bf08a59f879", + "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108", + "https://bcr.bazel.build/modules/googletest/1.17.0/MODULE.bazel": "dbec758171594a705933a29fcf69293d2468c49ec1f2ebca65c36f504d72df46", + "https://bcr.bazel.build/modules/googletest/1.17.0/source.json": "38e4454b25fc30f15439c0378e57909ab1fd0a443158aa35aec685da727cd713", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/MODULE.bazel": "2f8d20d3b7d54143213c4dfc3d98225c42de7d666011528dc8fe91591e2e17b0", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/source.json": "a04756d367a2126c3541682864ecec52f92cdee80a35735a3cb249ce015ca000", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", "https://bcr.bazel.build/modules/nlohmann_json/3.11.3/MODULE.bazel": "87023db2f55fc3a9949c7b08dc711fae4d4be339a80a99d04453c4bb3998eefc", "https://bcr.bazel.build/modules/nlohmann_json/3.11.3/source.json": "296c63a90c6813e53b3812d24245711981fc7e563d98fe15625f55181494488a", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/MODULE.bazel": "6f7b417dcc794d9add9e556673ad25cb3ba835224290f4f848f8e2db1e1fca74", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", + "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580", + "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", - "https://bcr.bazel.build/modules/protobuf/28.2/MODULE.bazel": "c0c8e51757df486d0314fa290e174d707bad4a6c2aa5ccb08a4b4abd76a23e90", - "https://bcr.bazel.build/modules/protobuf/28.2/source.json": "31a22dd0dd25b579257b0c5821b527a9bc987b7c16cf111fbf31704c2786651b", + "https://bcr.bazel.build/modules/protobuf/23.1/MODULE.bazel": "88b393b3eb4101d18129e5db51847cd40a5517a53e81216144a8c32dfeeca52a", + "https://bcr.bazel.build/modules/protobuf/24.4/MODULE.bazel": "7bc7ce5f2abf36b3b7b7c8218d3acdebb9426aeb35c2257c96445756f970eb12", + "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", + "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", + "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", + "https://bcr.bazel.build/modules/protobuf/29.0/MODULE.bazel": "319dc8bf4c679ff87e71b1ccfb5a6e90a6dbc4693501d471f48662ac46d04e4e", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", - "https://bcr.bazel.build/modules/protobuf/3.19.2/MODULE.bazel": "532ffe5f2186b69fdde039efe6df13ba726ff338c6bc82275ad433013fa10573", - "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", + "https://bcr.bazel.build/modules/protobuf/31.1/MODULE.bazel": "379a389bb330b7b8c1cdf331cc90bf3e13de5614799b3b52cdb7c6f389f6b38e", + "https://bcr.bazel.build/modules/protobuf/31.1/source.json": "25af5d0219da0c0fc4d1191a24ce438e6ca7f49d2e1a94f354efeba6ef10426f", "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34", "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680", "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/MODULE.bazel": "b4963dda9b31080be1905ef085ecd7dd6cd47c05c79b9cdf83ade83ab2ab271a", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/source.json": "2ff292be6ef3340325ce8a045ecc326e92cbfab47c7cbab4bd85d28971b97ac4", "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa", - "https://bcr.bazel.build/modules/re2/2024-07-02/source.json": "547d0111a9d4f362db32196fef805abbf3676e8d6afbe44d395d87816c1130ca", - "https://bcr.bazel.build/modules/rules_buf/0.1.1/MODULE.bazel": "6189aec18a4f7caff599ad41b851ab7645d4f1e114aa6431acf9b0666eb92162", - "https://bcr.bazel.build/modules/rules_buf/0.1.1/source.json": "021363d254f7438f3f10725355969c974bb2c67e0c28667782ade31a9cdb747f", + "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", + "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", + "https://bcr.bazel.build/modules/rules_apple/3.16.0/MODULE.bazel": "0d1caf0b8375942ce98ea944be754a18874041e4e0459401d925577624d3a54a", + "https://bcr.bazel.build/modules/rules_apple/3.16.0/source.json": "d8b5fe461272018cc07cfafce11fe369c7525330804c37eec5a82f84cd475366", "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", + "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", + "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", + "https://bcr.bazel.build/modules/rules_cc/0.0.14/MODULE.bazel": "5e343a3aac88b8d7af3b1b6d2093b55c347b8eefc2e7d1442f7a02dc8fea48ac", + "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", + "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a", "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", - "https://bcr.bazel.build/modules/rules_cc/0.0.9/source.json": "1f1ba6fea244b616de4a554a0f4983c91a9301640c8fe0dd1d410254115c8430", + "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", + "https://bcr.bazel.build/modules/rules_cc/0.1.4/MODULE.bazel": "bb03a452a7527ac25a7518fb86a946ef63df860b9657d8323a0c50f8504fb0b9", + "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c", + "https://bcr.bazel.build/modules/rules_cc/0.2.0/source.json": "5f7f4e578e950adbf194217d4b607237a8197fc53ba46c367b3d61a86ecf35c2", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", - "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", - "https://bcr.bazel.build/modules/rules_go/0.33.0/MODULE.bazel": "a2b11b64cd24bf94f57454f53288a5dacfe6cb86453eee7761b7637728c1910c", - "https://bcr.bazel.build/modules/rules_go/0.38.1/MODULE.bazel": "fb8e73dd3b6fc4ff9d260ceacd830114891d49904f5bda1c16bc147bcc254f71", - "https://bcr.bazel.build/modules/rules_go/0.39.1/MODULE.bazel": "d34fb2a249403a5f4339c754f1e63dc9e5ad70b47c5e97faee1441fc6636cd61", - "https://bcr.bazel.build/modules/rules_go/0.39.1/source.json": "f21e042154010ae2c944ab230d572b17d71cdb27c5255806d61df6ccaed4354c", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", + "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39", + "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", + "https://bcr.bazel.build/modules/rules_java/6.4.0/MODULE.bazel": "e986a9fe25aeaa84ac17ca093ef13a4637f6107375f64667a15999f77db6c8f6", "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", - "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", - "https://bcr.bazel.build/modules/rules_java/7.6.5/source.json": "a805b889531d1690e3c72a7a7e47a870d00323186a9904b36af83aa3d053ee8d", + "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel": "30d9135a2b6561c761bd67bd4990da591e6bdc128790ce3e7afd6a3558b2fb64", + "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", + "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", + "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", + "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", + "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", + "https://bcr.bazel.build/modules/rules_java/8.12.0/MODULE.bazel": "8e6590b961f2defdfc2811c089c75716cb2f06c8a4edeb9a8d85eaa64ee2a761", + "https://bcr.bazel.build/modules/rules_java/8.12.0/source.json": "cbd5d55d9d38d4008a7d00bee5b5a5a4b6031fcd4a56515c9accbcd42c7be2ba", + "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", + "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", + "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", - "https://bcr.bazel.build/modules/rules_jvm_external/5.1/source.json": "5abb45cc9beb27b77aec6a65a11855ef2b55d95dfdc358e9f312b78ae0ba32d5", + "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", + "https://bcr.bazel.build/modules/rules_jvm_external/5.3/MODULE.bazel": "bf93870767689637164657731849fb887ad086739bd5d360d90007a581d5527d", + "https://bcr.bazel.build/modules/rules_jvm_external/6.1/MODULE.bazel": "75b5fec090dbd46cf9b7d8ea08cf84a0472d92ba3585b476f44c326eda8059c4", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", + "https://bcr.bazel.build/modules/rules_jvm_external/6.7/MODULE.bazel": "e717beabc4d091ecb2c803c2d341b88590e9116b8bf7947915eeb33aab4f96dd", + "https://bcr.bazel.build/modules/rules_jvm_external/6.7/source.json": "5426f412d0a7fc6b611643376c7e4a82dec991491b9ce5cb1cfdd25fe2e92be4", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.0/MODULE.bazel": "ef85697305025e5a61f395d4eaede272a5393cee479ace6686dba707de804d59", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", - "https://bcr.bazel.build/modules/rules_license/0.0.8/MODULE.bazel": "5669c6fe49b5134dbf534db681ad3d67a2d49cfc197e4a95f1ca2fd7f3aebe96", - "https://bcr.bazel.build/modules/rules_license/0.0.8/source.json": "ccfd3964cd0cd1739202efb8dbf9a06baab490e61e174b2ad4790f9c4e610beb", - "https://bcr.bazel.build/modules/rules_nodejs/5.8.2/MODULE.bazel": "6bc03c8f37f69401b888023bf511cb6ee4781433b0cb56236b2e55a21e3a026a", - "https://bcr.bazel.build/modules/rules_nodejs/5.8.2/source.json": "6e82cf5753d835ea18308200bc79b9c2e782efe2e2a4edc004a9162ca93382ca", + "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", + "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", - "https://bcr.bazel.build/modules/rules_pkg/0.7.0/source.json": "c2557066e0c0342223ba592510ad3d812d4963b9024831f7f66fd0584dd8c66c", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", - "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/source.json": "8d8448e71706df7450ced227ca6b3812407ff5e2ccad74a43a9fbe79c84e34e0", + "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", - "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", + "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.29.0/MODULE.bazel": "2ac8cd70524b4b9ec49a0b8284c79e4cd86199296f82f6e0d5da3f783d660c82", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937", - "https://bcr.bazel.build/modules/rules_python/0.33.2/source.json": "e539592cd3aae4492032cecea510e46ca16eeb972271560b922cae9893944e2f", + "https://bcr.bazel.build/modules/rules_python/0.38.0/MODULE.bazel": "ee75c9510a481eb92c7c04e432f84023065bbc8dcf6e49b7399e7c660624acdd", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_rust/0.45.1/MODULE.bazel": "a69d0db3a958fab2c6520961e1b2287afcc8b36690fd31bbc4f6f7391397150d", - "https://bcr.bazel.build/modules/rules_rust/0.45.1/source.json": "28a181c6bc9d037bd2a8f2875908d821027def05f87af51b79277395c7b50c71", - "https://bcr.bazel.build/modules/stardoc/0.5.0/MODULE.bazel": "f9f1f46ba8d9c3362648eea571c6f9100680efc44913618811b58cc9c02cd678", + "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", + "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", + "https://bcr.bazel.build/modules/rules_python/1.0.0/source.json": "b0162a65c6312e45e7912e39abd1a7f8856c2c7e41ecc9b6dc688a6f6400a917", + "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", + "https://bcr.bazel.build/modules/rules_swift/1.16.0/MODULE.bazel": "4a09f199545a60d09895e8281362b1ff3bb08bbde69c6fc87aff5b92fcc916ca", + "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046", + "https://bcr.bazel.build/modules/rules_swift/2.1.1/source.json": "40fc69dfaac64deddbb75bd99cdac55f4427d9ca0afbe408576a65428427a186", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", - "https://bcr.bazel.build/modules/stardoc/0.5.4/MODULE.bazel": "6569966df04610b8520957cb8e97cf2e9faac2c0309657c537ab51c16c18a2a4", - "https://bcr.bazel.build/modules/stardoc/0.5.4/source.json": "a961f58a71e735aa9dcb2d79b288e06b0a2d860ba730302c8f11be411b76631e", + "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", + "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", + "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", + "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", + "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", + "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/source.json": "32bd87e5f4d7acc57c5b2ff7c325ae3061d5e242c0c4c214ae87e0f1c13e54cb", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/upb/0.0.0-20230516-61a97ef/MODULE.bazel": "c0df5e35ad55e264160417fd0875932ee3c9dda63d9fccace35ac62f45e1b6f9", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", - "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" }, "selectedYankedVersions": {}, - "moduleExtensions": {} + "moduleExtensions": { + "@@apple_support+//crosstool:setup.bzl%apple_cc_configure_extension": { + "general": { + "bzlTransitiveDigest": "E970FlMbwpgJPdPUQzatKh6BMfeE0ZpWABvwshh7Tmg=", + "usagesDigest": "EJfdUgbJdIRboG70S9dz8HhGVkL2/s3qFQ9xht8y2Rs=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "local_config_apple_cc_toolchains": { + "repoRuleId": "@@apple_support+//crosstool:setup.bzl%_apple_cc_autoconf_toolchains", + "attributes": {} + }, + "local_config_apple_cc": { + "repoRuleId": "@@apple_support+//crosstool:setup.bzl%_apple_cc_autoconf", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "apple_support+", + "bazel_tools", + "bazel_tools" + ], + [ + "bazel_tools", + "rules_cc", + "rules_cc+" + ] + ] + } + }, + "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { + "general": { + "bzlTransitiveDigest": "hUTp2w+RUVdL7ma5esCXZJAFnX7vLbVfLd7FwnQI6bU=", + "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_github_jetbrains_kotlin_git": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", + "attributes": { + "urls": [ + "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + ], + "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + } + }, + "com_github_jetbrains_kotlin": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", + "attributes": { + "git_repository_name": "com_github_jetbrains_kotlin_git", + "compiler_version": "1.9.23" + } + }, + "com_github_google_ksp": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", + "attributes": { + "urls": [ + "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + ], + "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", + "strip_version": "1.9.23-1.0.20" + } + }, + "com_github_pinterest_ktlint": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", + "urls": [ + "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" + ], + "executable": true + } + }, + "rules_android": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", + "strip_prefix": "rules_android-0.1.1", + "urls": [ + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_kotlin+", + "bazel_tools", + "bazel_tools" + ] + ] + } + } + } } diff --git a/README.md b/README.md index 729a122..e19c136 100644 --- a/README.md +++ b/README.md @@ -49,18 +49,7 @@ JSIR needs to achieve two seemingly conflicting goals: * It needs to be **low-level** enough to facilitate dataflow analysis, in order to support taint analysis, constant propagation, etc.. -To achieve these goals, JSIR defines two dialects: - -* **JSHIR:** - - This is a high-level IR that uses MLIR regions to accurately model control - flow structures. - -* **JSLIR:** - - This is a low-level IR that uses CFGs to represent branching behaviors. - JSLIR adds extra operations to annotate the kind of original control flow - structures. This allows JSLIR to be fully converted back to JSHIR. +To achieve these goals, JSIR defines a high level IR that uses MLIR regions to accurately model control flow structures. See [intermediate_representation_design.md](docs/intermediate_representation_design.md) diff --git a/docs/intermediate_representation_design.md b/docs/intermediate_representation_design.md index 14fa326..341fd7b 100644 --- a/docs/intermediate_representation_design.md +++ b/docs/intermediate_representation_design.md @@ -2,55 +2,49 @@ ## Overview -JSIR is a next-generation JavaScript analysis tool from Google. At its core +JSIR is a next-generation JavaScript analysis tooling from Google. At its core is an [MLIR](https://mlir.llvm.org)-based high-level intermediate representation (IR). More specifically: * JSIR **retains all information** from the ([Babel](https://babeljs.io)) abstract syntax tree (AST), including original control flow structures, - source ranges, comments, etc.. As a result, **JSIR can be fully lifted back + source ranges, comments, etc. As a result, **JSIR can be fully lifted back to the AST**, and therefore back to the source, making it suitable for source-to-source transformation. * JSIR provides a standard **dataflow analysis API**, built on top of the - upstream [MLIR API](https://mlir.llvm.org/docs/Tutorials/DataFlowAnalysis), + built-in [MLIR API](https://mlir.llvm.org/docs/Tutorials/DataFlowAnalysis), with ease-of-use improvements. This design was driven by the diverse needs at Google for malicious JavaScript -analysis and detection. For example, taint analysis is a dataflow analysis which -requires a CFG; decompilation requires lifting low-level representations to -source code; deobfuscation is a source-to-source transformation. +analysis and detection. For example, taint analysis is a dataflow analysis; +decompilation requires lifting low-level representations to source code; +deobfuscation is a source-to-source transformation. -To achieve the design goals, JSIR defines two MLIR dialects: - -* **JSHIR:** A high-level IR that has a nearly one-to-one mapping with the - abstract syntax tree (AST). JSHIR models control flow structures using MLIR - [regions](https://mlir.llvm.org/docs/LangRef/#regions). - -* **JSLIR:** A low-level IR that uses Control Flow Graphs (CFGs) to represent - branching behaviors. JSLIR adds extra annotations to the CFGs, to preserve - information about original control flow structures and enable full - conversion back to the JSHIR. +To achieve these design goals, JSIR is designed as a high-level IR that has a +nearly one-to-one mapping with the abstract syntax tree (AST), and models +control flow structures using MLIR +[regions](https://mlir.llvm.org/docs/LangRef/#regions). ## Achieving AST ↔ IR Roundtrip -A critical goal of this project is to ensure an accurate lift of the IR back to -the AST. This "reversible" IR design enables source-to-source transformations - -we perform IR transformations then lift the transformed IR to source. +A critical goal of JSIR is to ensure an accurate lift of the IR back to the AST. +This "reversible" IR design enables source-to-source transformations - we +perform IR transformations then lift the transformed IR to source. -Internal evaluations on billions of JavaScript samples showed that, AST - IR +Internal evaluations on billions of JavaScript samples showed that AST - IR round-trips achieved 99.9%+ success resulting in the same source. In the following sections, we will describe important design decisions that -achieve this perfect round-trip. +achieve this high-fidelity round-trip. ## Post-order traversal of AST -Let’s start from the simplest case - straightline code, i.e. a list of +Let’s start from the simplest case - straight-line code, i.e. a list of statements with no control flow structures like `if`-statements. -Each of these simple expression / statement AST node is mapped to a -corresponding JSIR operation. Therefore, JSIR for straightline code is +Each of these simple expression / statement AST nodes is mapped to a +corresponding JSIR operation. Therefore, JSIR for straight-line code is equivalent to a post-order traversal dump of the AST. For example, for the following JavaScript statements: @@ -71,16 +65,16 @@ for the full AST): op: '+', left: BinaryExpression { op: '+', - left: NumericLiteral { value: 1 } + left: NumericLiteral { value: 1 }, right: NumericLiteral { value: 2 } - } + }, right: NumericLiteral { value: 3 } } }, ExpressionStatement { expression: BinaryExpression { op: '*', - left: NumericLiteral { value: 4 } + left: NumericLiteral { value: 4 }, right: NumericLiteral { value: 5 } } }, @@ -102,6 +96,22 @@ jsir.expression_statement (%1_plus_2_plus_3) jsir.expression_statement (%4_mult_5) ``` +Perhaps the one-to-one mapping from AST nodes to JSIR operations is more obvious +if we add some indentations: + +```mlir + %1 = jsir.numeric_literal {1} + %2 = jsir.numeric_literal {2} + %1_plus_2 = jsir.binary_expression {'+'} (%1, %2) + %3 = jsir.numeric_literal {3} + %1_plus_2_plus_3 = jsir.binary_expression {'+'} (%1_plus_2, %3) +jsir.expression_statement (%1_plus_2_plus_3) + %4 = jsir.numeric_literal {4} + %5 = jsir.numeric_literal {5} + %4_mult_5 = jsir.binary_expression {'*'} (%4, %5) +jsir.expression_statement (%4_mult_5) +``` + To lift this IR back to the AST, we **cannot** treat each op as a separate statement, because that would cause every SSA value (e.g. `%1`) to become a local variable: @@ -125,18 +135,18 @@ However, we can detect the two statement-level ops (i.e. the two ```js {.good} 1 + 2 + 3 ; -// ~ %1 = jsir.numeric_literal {1} -// ~ %2 = jsir.numeric_literal {2} -// ~~~~~ %1_plus_2 = jsir.binary_expression {'+'} (%1, %2) -// ~ %3 = jsir.numeric_literal {3} -// ~~~~~~~~~ %1_plus_2_plus_3 = jsir.binary_expression {'+'} (%1_plus_2, %3) +// ~ %1 = jsir.numeric_literal {1} +// ~ %2 = jsir.numeric_literal {2} +// ~~~~~ %1_plus_2 = jsir.binary_expression {'+'} (%1, %2) +// ~ %3 = jsir.numeric_literal {3} +// ~~~~~~~~~ %1_plus_2_plus_3 = jsir.binary_expression {'+'} (%1_plus_2, %3) // ~~~~~~~~~~~ jsir.expression_statement (%1_plus_2_plus_3) 4 * 5 ; -// ~ %4 = jsir.numeric_literal {4} -// ~ %5 = jsir.numeric_literal {5} -// ~~~~~ %4_mult_5 = jsir.binary_expression {'*'} (%4, %5) -// ~~~~~~~ jsir.expression_statement (%4_mult_5) +// ~ %4 = jsir.numeric_literal {4} +// ~ %5 = jsir.numeric_literal {5} +// ~~~~~ %4_mult_5 = jsir.binary_expression {'*'} (%4, %5) +// ~~~~~~~ jsir.expression_statement (%4_mult_5) ``` When we try to lift a basic block (`mlir::Block`) of JSIR ops we always know @@ -159,21 +169,21 @@ ahead of time what "kind" of content it holds: ## Symbols, l-values and r-values -We distinguish between lvalues and rvalues in JSIR. For example, consider the +We distinguish between l-values and r-values in JSIR. For example, consider the following assignment: ```js a = b; ``` -`a` is an lvalue, and `b` is an rvalue. +`a` is an l-value, and `b` is an r-value. -L-values ane r-values are represented in the **same** way in the AST: +L-values and r-values are represented in the **same** way in the AST: ```c++ ExpressionStatement { expression: AssignmentExpression { - left: Identifier {"a"} + left: Identifier {"a"}, right: Identifier {"b"} } } @@ -182,8 +192,8 @@ ExpressionStatement { However, they are represented **differently** in the IR: ```c++ -%a_ref = jsir.identifier_ref {"a"} // lvalue -%b = jsir.identifier {"b"} // rvalue +%a_ref = jsir.identifier_ref {"a"} // l-value +%b = jsir.identifier {"b"} // r-value %assign = jsir.assignment_expression (%a_ref, %b) jsir.expression_statement (%assign) ``` @@ -193,17 +203,21 @@ semantic meanings: * An l-value is a reference to some object / some memory location; -* An rvalue is some value. +* An r-value is some value. -## Representing control flows: JSHIR +> **NOTE:** We will likely revisit how we represent symbols. -As mentioned above, JSHIR seeks to have a nearly one-to-one mapping from the +## Representing control flows + +As mentioned above, JSIR seeks to have a nearly one-to-one mapping from the AST. Therefore, to preserve all information about the original control flow structures, we define a separate op for each control flow structure (e.g. `jshir.if_statement`, `jshir.while_statement`, etc.). The nested code blocks are represented as MLIR [regions](https://mlir.llvm.org/docs/LangRef/#regions). -For example, consider the following `if`-statement: +### Example: `if`-statement + +Consider the following `if`-statement: ```js if (cond) @@ -212,21 +226,22 @@ else b; ``` -Its corresponding AST is as follows: +Its corresponding AST is as follows +([astexplorer](https://astexplorer.net/#/gist/58e3ca121e8bc97d9d1987766f4df96a/37b0de0e94073d24f40aede05b14e1c480b7b39a)): ```c++ IfStatement { - test: Identifier {"cond"} + test: Identifier { name: "cond" }, consequent: ExpressionStatement { - expression: Identifier {"a"} - } + expression: Identifier { name: "a" } + }, alternate: ExpressionStatement { - expression: Identifier {"b"} + expression: Identifier { name: "b" } } } ``` -And, its corresponding JSHIR is as follows: +And, its corresponding JSIR is as follows: ```mlir %cond = jsir.identifier {"cond"} @@ -239,143 +254,92 @@ jshir.if_statement (%cond) ({ }) ``` -Since nested structure is fully preserved, lifting JSHIR back to the AST is +Since nested structure is fully preserved, lifting JSIR back to the AST is achieved by a standard recursive traversal. -## Representing control flows: JSLIR +### Example: `while`-statement -### Control flow graph +Consider the following `while`-statement: -The region-based nested structure of JSHIR, though intuitive and readable, does -not provide enough control flow information to facilitate -[dataflow analysis](https://en.wikipedia.org/wiki/Data-flow_analysis). +```js +while (cond()) + x++; +``` -Dataflow analysis traverses the IR as a graph, which requires knowing the "next -op" of each op. Ironically, a program with only `goto`-statements but no -structured control flow would satisfy this requirement. IRs typically lower -structured control flow to branch ops which are essentially `goto`-statements. -This is also what JSLIR does. +Its corresponding AST is as follows ([astexplorer](https://astexplorer.net/#/gist/58e3ca121e8bc97d9d1987766f4df96a/6ce08d84210afbacdf99732366e04eafcd6b3ab5)): + +```c++ +WhileStatement { + test: CallExpression { + callee: Identifier { name: "cond" }, + arguments: [] + }, + body: ExpressionStatement { + expression: UpdateExpression { + operator: "++", + prefix: false, + argument: Identifier { name: "x" } + } + } +} +``` -For example, for the following JSHIR: +Its corresponding JSIR is as follows: ```mlir -%cond = jsir.identifier {"cond"} -jshir.if_statement (%cond) ({ - %a = jsir.identifier {"a"} - jsir.expression_statement (%a) +jshir.while_statement ({ + %cond_id = jsir.identifier {"cond"} + %cond_call = jsir.call_expression (%cond_id) + jsir.expr_region_end (%cond_call) }, { - %b = jsir.identifier {"b"} - jsir.expression_statement (%b) + %x_ref = jsir.identifier_ref {"x"} + %update = jsir.update_expression {"++"} (%x_ref) + jsir.expression_statement (%update) }) ``` -We lower the `jshir.if_statement` into the following CFG with branch ops: - -
  %cond = jsir.identifier {"cond"}
-  // if %cond goto ^bb_true else goto ^bb_false
-  cf.cond_br (%cond) [^bb_true, ^bb_false]
+Note that unlike `jshir.if_statement`, the condition in a
+`jshir.while_statement` is represented as a region rather than a normal SSA
+value (`%cond`). This is because the condition is evaluated in each iteration
+**within** the `while`-statement, whereas the condition is evaluated only once
+**before** the `if`-statement.
 
-^bb_true:
-  %a = jsir.identifier {"a"}
-  jsir.expression_statement (%a)
-  // goto ^bb_end
-  cf.br [^bb_end]
+### Example: logical expression
 
-^bb_false:
-  %b = jsir.identifier {"b"}
-  jsir.expression_statement (%b)
-  // goto ^bb_end
-  cf.br [^bb_end]
-
-^bb_end:
-  ...
-
- -In particular: - -* We flatten the nested structure into blocks (e.g. `^bb_true`); - -* Each block contains a list of ops; - -* We explicitly represent branch behaviors with `cf.cond_br` - ("control_flow.conditional_branch") and `cf.br` ("control_flow.branch") ops. - In particular, at the entry of the `if`-statement, we branch into either - `bb_true` or `bb_false` based on the condition `%cond`; and at the end of - both blocks we branch and merge to the same block `bb_end`. - -### Challenge: lift back to AST - -However, this IR would lose the explicit information that these blocks represent -an `if`-statement, which makes it hard to lift back the AST. - -This challenge is more evident with more complex control flow structures. For -example, consider the following code with an `if`-statement within a -`while`-statement. +Consider the following statement with a logical expression: ```js -... -while (cond) - if (test) - body; -... +x = a && b; ``` -The JSLIR is as follows: +Its corresponding AST is as follows ([astexplorer](https://astexplorer.net/#/gist/58e3ca121e8bc97d9d1987766f4df96a/c7fbec034a61bcbb66959714b7d95dbd9ca86e32)): -``` {.bad} - ... - cf.br [^bb1] - -^bb1: - %cond = jsir.identifier {"cond"} - cf.cond_br (%cond) [^bb2, ^bb5] - -^bb2: - %test = jsir.identifier {"test"} - cf.cond_br (%test) [^bb3, ^bb4] - -^bb3: - %body = jsir.identifier {"body"} - jsir.expression_statement (%body) - cf.br [^bb4] - -^bb4: - cf.br [^while_test] - -^bb5: - ... +```c++ +ExpressionStatement { + expression: AssignmentExpression { + left: Identifier { name: "x" }, + right: LogicalExpression { + left: Identifier { name: "a" }, + right: Identifier { name: "b" } + } + } +} ``` -### Solution: annotation ops - -Our solution is to add additional annotation ops to JSLIR which provide explicit -information about what control flow structure each block represents. These -annotation ops do not affect the semantics of the IR (i.e. they are considered -no-ops during analyses). However, during the lift, we can use them to guide a -recursive traversal of the original control flow structures. +Its corresponding JSIR is as follows: -For example, the annotated JSLIR for the `if`-statement is as follows: - -
  %cond = jsir.identifier {"cond"}
-  %token = jslir.control_flow_starter {IfStatement}
-  cf.cond_br (%cond) [^bb_true, ^bb_false]
-
-^bb_true:
-  jslir.control_flow_marker (%token) {IfStatementConsequent}
-  %a = jsir.identifier {"a"}
-  jsir.expression_statement (%a)
-  cf.br [^bb_end]
-
-^bb_false:
-  jslir.control_flow_marker (%token) {IfStatementAlternate}
+```mlir
+%x_ref = jsir.identifier_ref {"x"}
+%a = jsir.identifier {"a"}
+%and = jshir.logical_expression (%a) ({
   %b = jsir.identifier {"b"}
-  jsir.expression_statement (%b)
-  cf.br [^bb_end]
-
-^bb_end:
-  jslir.control_flow_marker (%token) {IfStatementEnd}
-  ...
-
+ jsir.expr_region_end (%b) +}) +%assign = jsir.assignment_expression (%x_ref, %and) +jsir.expression_statement (%assign) +``` -Note that by tracing the uses of `%token`, we can locate the starting points of -all components of an `if`-statement. +Note that in `jshir.logical_expression`, `left` is an SSA value, and `right` is +a region. This is because `left` is always evaluated first, whereas `right` is +only evaluated if the result of `left` is truthy, and omitted if `left` is falsy +due to the short-circuit behavior. diff --git a/maldoca/astgen/BUILD b/maldoca/astgen/BUILD index c2d14c8..7d85aba 100644 --- a/maldoca/astgen/BUILD +++ b/maldoca/astgen/BUILD @@ -144,6 +144,7 @@ cc_test( "//maldoca/base:filesystem", "//maldoca/base/testing:status_matchers", "@abseil-cpp//absl/container:flat_hash_map", + "@abseil-cpp//absl/status", "@googletest//:gtest_main", ], ) diff --git a/maldoca/astgen/OWNERS b/maldoca/astgen/OWNERS deleted file mode 100644 index d163000..0000000 --- a/maldoca/astgen/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -# LLVM owners for API updates. (see go/mlir-sla). -suggest-reviewers-ignore: file://depot/google3/llvm/OWNERS diff --git a/maldoca/astgen/ast_def.cc b/maldoca/astgen/ast_def.cc index 573ed0a..e5d08d7 100644 --- a/maldoca/astgen/ast_def.cc +++ b/maldoca/astgen/ast_def.cc @@ -355,6 +355,11 @@ absl::StatusOr AstDef::FromProto(const AstDefPb &pb) { for (const UnionTypePb &union_type_pb : pb.union_types()) { auto union_type_node = absl::WrapUnique(new NodeDef()); union_type_node->name_ = union_type_pb.name(); + union_type_node->should_generate_ir_op_ = + union_type_pb.should_generate_ir_op(); + for (auto kind : union_type_pb.kinds()) { + union_type_node->kinds_.push_back(static_cast(kind)); + } if (nodes.contains(union_type_pb.name())) { return absl::InvalidArgumentError( absl::StrCat(union_type_pb.name(), " already exists!")); diff --git a/maldoca/astgen/ast_def.proto b/maldoca/astgen/ast_def.proto index 2d169cd..c607113 100644 --- a/maldoca/astgen/ast_def.proto +++ b/maldoca/astgen/ast_def.proto @@ -20,7 +20,6 @@ import "maldoca/astgen/type.proto"; option java_multiple_files = true; - // ========= // FieldKind // ========= @@ -336,6 +335,13 @@ message UnionTypePb { // Types which are members of this union. repeated string types = 3; + + // If true, automatically generate the corresponding op. + // If false, the op is expected to be manually written. + optional bool should_generate_ir_op = 4; + + // Supported kinds. Each kind leads to a different IR op. + repeated FieldKind kinds = 5; } // Top-level AST definition. diff --git a/maldoca/astgen/symbol.h b/maldoca/astgen/symbol.h index fe02a8d..3ca34ed 100644 --- a/maldoca/astgen/symbol.h +++ b/maldoca/astgen/symbol.h @@ -43,13 +43,13 @@ class Symbol { // Concatenation. // E.g. "one_two" + "three_four" => "one_two_three_four" - Symbol &operator+=(const Symbol &other); - Symbol &operator+=(Symbol &&other); + Symbol& operator+=(const Symbol& other); + Symbol& operator+=(Symbol&& other); - Symbol &operator+=(absl::string_view other); + Symbol& operator+=(absl::string_view other); template - Symbol operator+(T &&other) const { + Symbol operator+(T&& other) const { Symbol words = *this; words += other; return words; diff --git a/maldoca/astgen/test/lambda/conversion/ast_to_lair.h b/maldoca/astgen/test/lambda/conversion/ast_to_lair.h index c8d1c84..a374a36 100644 --- a/maldoca/astgen/test/lambda/conversion/ast_to_lair.h +++ b/maldoca/astgen/test/lambda/conversion/ast_to_lair.h @@ -35,7 +35,7 @@ class AstToLair { template Op CreateStmt(const JsNode *node, Args &&...args) { - return builder_.create(builder_.getUnknownLoc(), std::nullopt, + return builder_.create(builder_.getUnknownLoc(), mlir::TypeRange(), std::forward(args)...); } diff --git a/maldoca/astgen/test/lambda/conversion/lair_to_ast.generated.cc b/maldoca/astgen/test/lambda/conversion/lair_to_ast.generated.cc deleted file mode 100644 index 154085c..0000000 --- a/maldoca/astgen/test/lambda/conversion/lair_to_ast.generated.cc +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// ============================================================================= -// STOP!! DO NOT MODIFY!! THIS FILE IS AUTOMATICALLY GENERATED. -// ============================================================================= - -// IWYU pragma: begin_keep -// NOLINTBEGIN(whitespace/line_length) -// clang-format off - -#include "maldoca/astgen/test/lambda/conversion/lair_to_ast.h" - -#include -#include -#include -#include -#include -#include - -#include "llvm/ADT/APFloat.h" -#include "llvm/ADT/TypeSwitch.h" -#include "llvm/Support/Casting.h" -#include "mlir/IR/Attributes.h" -#include "mlir/IR/Block.h" -#include "mlir/IR/Builders.h" -#include "mlir/IR/BuiltinAttributes.h" -#include "mlir/IR/BuiltinTypes.h" -#include "mlir/IR/Operation.h" -#include "mlir/IR/Region.h" -#include "mlir/IR/Value.h" -#include "absl/cleanup/cleanup.h" -#include "absl/log/check.h" -#include "absl/log/log.h" -#include "absl/status/status.h" -#include "absl/status/statusor.h" -#include "absl/strings/str_cat.h" -#include "absl/types/optional.h" -#include "absl/types/variant.h" -#include "maldoca/base/status_macros.h" -#include "maldoca/astgen/test/lambda/ast.generated.h" -#include "maldoca/astgen/test/lambda/ir.h" - -namespace maldoca { - -absl::StatusOr> -LairToAst::VisitExpression(LairExpressionOpInterface op) { - using Ret = absl::StatusOr>; - return llvm::TypeSwitch(op) - .Case([&](LairVariableOp op) { - return VisitVariable(op); - }) - .Case([&](LairFunctionDefinitionOp op) { - return VisitFunctionDefinition(op); - }) - .Case([&](LairFunctionCallOp op) { - return VisitFunctionCall(op); - }) - .Default([&](mlir::Operation* op) { - return absl::InvalidArgumentError("Unrecognized op"); - }); -} - -absl::StatusOr> -LairToAst::VisitVariable(LairVariableOp op) { - std::string identifier = op.getIdentifierAttr().str(); - return Create( - op, - std::move(identifier)); -} - -absl::StatusOr> -LairToAst::VisitVariableRef(LairVariableRefOp op) { - std::string identifier = op.getIdentifierAttr().str(); - return Create( - op, - std::move(identifier)); -} - -absl::StatusOr> -LairToAst::VisitFunctionDefinition(LairFunctionDefinitionOp op) { - MALDOCA_ASSIGN_OR_RETURN(auto mlir_parameter_value, GetExprRegionValue(op.getParameter())); - auto parameter_op = llvm::dyn_cast(mlir_parameter_value.getDefiningOp()); - if (parameter_op == nullptr) { - return absl::InvalidArgumentError( - absl::StrCat("Expected LairVariableRefOp, got ", - mlir_parameter_value.getDefiningOp()->getName().getStringRef().str(), ".")); - } - MALDOCA_ASSIGN_OR_RETURN(std::unique_ptr parameter, VisitVariableRef(parameter_op)); - MALDOCA_ASSIGN_OR_RETURN(auto mlir_body_value, GetExprRegionValue(op.getBody())); - auto body_op = llvm::dyn_cast(mlir_body_value.getDefiningOp()); - if (body_op == nullptr) { - return absl::InvalidArgumentError( - absl::StrCat("Expected LairExpressionOpInterface, got ", - mlir_body_value.getDefiningOp()->getName().getStringRef().str(), ".")); - } - MALDOCA_ASSIGN_OR_RETURN(std::unique_ptr body, VisitExpression(body_op)); - return Create( - op, - std::move(parameter), - std::move(body)); -} - -absl::StatusOr> -LairToAst::VisitFunctionCall(LairFunctionCallOp op) { - auto function_op = llvm::dyn_cast(op.getFunction().getDefiningOp()); - if (function_op == nullptr) { - return absl::InvalidArgumentError( - absl::StrCat("Expected LairExpressionOpInterface, got ", - op.getFunction().getDefiningOp()->getName().getStringRef().str(), ".")); - } - MALDOCA_ASSIGN_OR_RETURN(std::unique_ptr function, VisitExpression(function_op)); - auto argument_op = llvm::dyn_cast(op.getArgument().getDefiningOp()); - if (argument_op == nullptr) { - return absl::InvalidArgumentError( - absl::StrCat("Expected LairExpressionOpInterface, got ", - op.getArgument().getDefiningOp()->getName().getStringRef().str(), ".")); - } - MALDOCA_ASSIGN_OR_RETURN(std::unique_ptr argument, VisitExpression(argument_op)); - return Create( - op, - std::move(function), - std::move(argument)); -} - -// clang-format on -// NOLINTEND(whitespace/line_length) -// IWYU pragma: end_keep - -} // namespace maldoca diff --git a/maldoca/astgen/test/multiple_inheritance/mir_ops.generated.td b/maldoca/astgen/test/multiple_inheritance/mir_ops.generated.td deleted file mode 100644 index 59f791b..0000000 --- a/maldoca/astgen/test/multiple_inheritance/mir_ops.generated.td +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// ============================================================================= -// STOP!! DO NOT MODIFY!! THIS FILE IS AUTOMATICALLY GENERATED. -// ============================================================================= - -#ifndef MALDOCA_ASTGEN_TEST_MULTIPLE_INHERITANCE_MIR_OPS_GENERATED_TD_ -#define MALDOCA_ASTGEN_TEST_MULTIPLE_INHERITANCE_MIR_OPS_GENERATED_TD_ - -include "mlir/Interfaces/ControlFlowInterfaces.td" -include "mlir/Interfaces/InferTypeOpInterface.td" -include "mlir/Interfaces/LoopLikeInterface.td" -include "mlir/Interfaces/SideEffectInterfaces.td" -include "mlir/IR/OpBase.td" -include "mlir/IR/SymbolInterfaces.td" -include "maldoca/astgen/test/multiple_inheritance/interfaces.td" -include "maldoca/astgen/test/multiple_inheritance/mir_dialect.td" -include "maldoca/astgen/test/multiple_inheritance/mir_types.td" - -#endif // MALDOCA_ASTGEN_TEST_MULTIPLE_INHERITANCE_MIR_OPS_GENERATED_TD_ diff --git a/maldoca/astgen/test/region/conversion/ast_to_rir.h b/maldoca/astgen/test/region/conversion/ast_to_rir.h index 33cbd8c..38733fa 100644 --- a/maldoca/astgen/test/region/conversion/ast_to_rir.h +++ b/maldoca/astgen/test/region/conversion/ast_to_rir.h @@ -45,7 +45,7 @@ class AstToRir { template Op CreateStmt(const RNode *node, Args &&...args) { - return builder_.create(builder_.getUnknownLoc(), std::nullopt, + return builder_.create(builder_.getUnknownLoc(), mlir::TypeRange(), std::forward(args)...); } diff --git a/maldoca/astgen/test/typed_lambda/tlir_ops.generated.td b/maldoca/astgen/test/typed_lambda/tlir_ops.generated.td deleted file mode 100644 index 2c12356..0000000 --- a/maldoca/astgen/test/typed_lambda/tlir_ops.generated.td +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// ============================================================================= -// STOP!! DO NOT MODIFY!! THIS FILE IS AUTOMATICALLY GENERATED. -// ============================================================================= - -#ifndef MALDOCA_ASTGEN_TEST_TYPED_LAMBDA_TLIR_OPS_GENERATED_TD_ -#define MALDOCA_ASTGEN_TEST_TYPED_LAMBDA_TLIR_OPS_GENERATED_TD_ - -include "mlir/Interfaces/ControlFlowInterfaces.td" -include "mlir/Interfaces/InferTypeOpInterface.td" -include "mlir/Interfaces/LoopLikeInterface.td" -include "mlir/Interfaces/SideEffectInterfaces.td" -include "mlir/IR/OpBase.td" -include "mlir/IR/SymbolInterfaces.td" -include "maldoca/astgen/test/typed_lambda/interfaces.td" -include "maldoca/astgen/test/typed_lambda/tlir_dialect.td" -include "maldoca/astgen/test/typed_lambda/tlir_types.td" - -#endif // MALDOCA_ASTGEN_TEST_TYPED_LAMBDA_TLIR_OPS_GENERATED_TD_ diff --git a/maldoca/astgen/test/union/BUILD b/maldoca/astgen/test/union/BUILD index 5121f35..bfdedab 100644 --- a/maldoca/astgen/test/union/BUILD +++ b/maldoca/astgen/test/union/BUILD @@ -17,12 +17,7 @@ load("@rules_cc//cc:cc_test.bzl", "cc_test") licenses(["notice"]) -package( - default_applicable_licenses = ["//:license"], - default_visibility = [ - "//maldoca/astgen:__subpackages__", - ], -) +package(default_applicable_licenses = ["//:license"]) cc_test( name = "ast_gen_test", diff --git a/maldoca/astgen/test/union/eir_ops.generated.td b/maldoca/astgen/test/union/eir_ops.generated.td deleted file mode 100644 index 7687265..0000000 --- a/maldoca/astgen/test/union/eir_ops.generated.td +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// ============================================================================= -// STOP!! DO NOT MODIFY!! THIS FILE IS AUTOMATICALLY GENERATED. -// ============================================================================= - -#ifndef MALDOCA_ASTGEN_TEST_UNION_EIR_OPS_GENERATED_TD_ -#define MALDOCA_ASTGEN_TEST_UNION_EIR_OPS_GENERATED_TD_ - -include "mlir/Interfaces/ControlFlowInterfaces.td" -include "mlir/Interfaces/InferTypeOpInterface.td" -include "mlir/Interfaces/LoopLikeInterface.td" -include "mlir/Interfaces/SideEffectInterfaces.td" -include "mlir/IR/OpBase.td" -include "mlir/IR/SymbolInterfaces.td" -include "maldoca/astgen/test/union/interfaces.td" -include "maldoca/astgen/test/union/eir_dialect.td" -include "maldoca/astgen/test/union/eir_types.td" - -#endif // MALDOCA_ASTGEN_TEST_UNION_EIR_OPS_GENERATED_TD_ diff --git a/maldoca/astgen/type.proto b/maldoca/astgen/type.proto index c467727..8f781f6 100644 --- a/maldoca/astgen/type.proto +++ b/maldoca/astgen/type.proto @@ -18,7 +18,6 @@ package maldoca; option java_multiple_files = true; - // The Type Hierarchy // // BuiltinType ::= BoolType, DoubleType, StringType diff --git a/maldoca/astgen/type_test.cc b/maldoca/astgen/type_test.cc index 6d5bcd4..a894385 100644 --- a/maldoca/astgen/type_test.cc +++ b/maldoca/astgen/type_test.cc @@ -21,10 +21,11 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" #include "absl/container/flat_hash_map.h" +#include "absl/status/status.h" #include "maldoca/astgen/ast_def.pb.h" #include "maldoca/astgen/type.pb.h" -#include "maldoca/base/testing/status_matchers.h" #include "maldoca/base/filesystem.h" +#include "maldoca/base/testing/status_matchers.h" namespace maldoca { namespace { diff --git a/maldoca/base/get_runfiles_dir.cc b/maldoca/base/get_runfiles_dir.cc index 61be48b..30cb756 100644 --- a/maldoca/base/get_runfiles_dir.cc +++ b/maldoca/base/get_runfiles_dir.cc @@ -32,4 +32,8 @@ std::string GetDataDependencyFilepath(absl::string_view path) { return runfiles->Rlocation(JoinPath("com_google_maldoca", path)); } +std::string GetRunfilesDir() { + return GetDataDependencyFilepath(""); +} + } // namespace maldoca diff --git a/maldoca/base/get_runfiles_dir.h b/maldoca/base/get_runfiles_dir.h index 7993a3a..0e680c5 100644 --- a/maldoca/base/get_runfiles_dir.h +++ b/maldoca/base/get_runfiles_dir.h @@ -22,6 +22,7 @@ namespace maldoca { std::string GetDataDependencyFilepath(absl::string_view path); +std::string GetRunfilesDir(); } // namespace maldoca diff --git a/maldoca/base/status_builder.cc b/maldoca/base/status_builder.cc index 108995d..836ce96 100644 --- a/maldoca/base/status_builder.cc +++ b/maldoca/base/status_builder.cc @@ -90,14 +90,14 @@ void StatusBuilder::ConditionallyLog(const absl::Status& status) const { }; static auto* vlog_sites = new LogSites(); - vlog_sites->mutex.Lock(); + vlog_sites->mutex.lock(); // This assumes that loc_.file_name() is a compile time constant in order // to satisfy the lifetime constraints imposed by VLogSite. The // constructors of SourceLocation guarantee that for us. auto [iter, unused] = vlog_sites->sites_by_file.try_emplace( loc_.file_name(), loc_.file_name()); auto& site = iter->second; - vlog_sites->mutex.Unlock(); + vlog_sites->mutex.unlock(); if (!site.IsEnabled(rep_->verbose_level)) { return; @@ -114,11 +114,11 @@ void StatusBuilder::ConditionallyLog(const absl::Status& status) const { }; static auto* log_every_n_sites = new LogSites(); - log_every_n_sites->mutex.Lock(); + log_every_n_sites->mutex.lock(); const uint count = log_every_n_sites ->counts_by_file_and_line[{loc_.file_name(), loc_.line()}]++; - log_every_n_sites->mutex.Unlock(); + log_every_n_sites->mutex.unlock(); if (count % rep_->n != 0) { return; @@ -134,7 +134,7 @@ void StatusBuilder::ConditionallyLog(const absl::Status& status) const { static auto* log_every_sites = new LogSites(); const auto now = absl::Now(); - absl::MutexLock lock(&log_every_sites->mutex); + absl::MutexLock lock(log_every_sites->mutex); absl::Time& next_log = log_every_sites ->next_log_by_file_and_line[{loc_.file_name(), loc_.line()}]; diff --git a/maldoca/js/ast/ast.generated.cc b/maldoca/js/ast/ast.generated.cc index 3ef1a66..1d6fb4c 100644 --- a/maldoca/js/ast/ast.generated.cc +++ b/maldoca/js/ast/ast.generated.cc @@ -379,24 +379,32 @@ absl::StatusOr StringToJsCommentType(absl::string_view s) { } JsComment::JsComment( - std::unique_ptr loc, + std::optional> loc, std::string value, - int64_t start, - int64_t end) + std::optional start, + std::optional end) : loc_(std::move(loc)), value_(std::move(value)), start_(std::move(start)), end_(std::move(end)) {} -JsSourceLocation* JsComment::loc() { - return loc_.get(); +std::optional JsComment::loc() { + if (!loc_.has_value()) { + return std::nullopt; + } else { + return loc_.value().get(); + } } -const JsSourceLocation* JsComment::loc() const { - return loc_.get(); +std::optional JsComment::loc() const { + if (!loc_.has_value()) { + return std::nullopt; + } else { + return loc_.value().get(); + } } -void JsComment::set_loc(std::unique_ptr loc) { +void JsComment::set_loc(std::optional> loc) { loc_ = std::move(loc); } @@ -408,19 +416,27 @@ void JsComment::set_value(std::string value) { value_ = std::move(value); } -int64_t JsComment::start() const { - return start_; +std::optional JsComment::start() const { + if (!start_.has_value()) { + return std::nullopt; + } else { + return start_.value(); + } } -void JsComment::set_start(int64_t start) { +void JsComment::set_start(std::optional start) { start_ = std::move(start); } -int64_t JsComment::end() const { - return end_; +std::optional JsComment::end() const { + if (!end_.has_value()) { + return std::nullopt; + } else { + return end_.value(); + } } -void JsComment::set_end(int64_t end) { +void JsComment::set_end(std::optional end) { end_ = std::move(end); } @@ -429,10 +445,10 @@ void JsComment::set_end(int64_t end) { // ============================================================================= JsCommentBlock::JsCommentBlock( - std::unique_ptr loc, + std::optional> loc, std::string value, - int64_t start, - int64_t end) + std::optional start, + std::optional end) : JsComment(std::move(loc), std::move(value), std::move(start), std::move(end)) {} // ============================================================================= @@ -440,10 +456,10 @@ JsCommentBlock::JsCommentBlock( // ============================================================================= JsCommentLine::JsCommentLine( - std::unique_ptr loc, + std::optional> loc, std::string value, - int64_t start, - int64_t end) + std::optional start, + std::optional end) : JsComment(std::move(loc), std::move(value), std::move(start), std::move(end)) {} // ============================================================================= @@ -954,26 +970,10 @@ void JsInterpreterDirective::set_value(std::string value) { } // ============================================================================= -// JsStatement -// ============================================================================= - -JsStatement::JsStatement( - std::optional> loc, - std::optional start, - std::optional end, - std::optional> leading_comment_uids, - std::optional> trailing_comment_uids, - std::optional> inner_comment_uids, - std::optional scope_uid, - std::optional> referenced_symbol, - std::optional>> defined_symbols) - : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} - -// ============================================================================= -// JsModuleDeclaration +// JsProgramBodyElement // ============================================================================= -JsModuleDeclaration::JsModuleDeclaration( +JsProgramBodyElement::JsProgramBodyElement( std::optional> loc, std::optional start, std::optional end, @@ -1105,7 +1105,7 @@ JsProgram::JsProgram( std::optional>> defined_symbols, std::optional> interpreter, std::string source_type, - std::vector, std::unique_ptr>> body, + std::vector> body, std::vector> directives) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), interpreter_(std::move(interpreter)), @@ -1141,15 +1141,15 @@ void JsProgram::set_source_type(std::string source_type) { source_type_ = std::move(source_type); } -std::vector, std::unique_ptr>>* JsProgram::body() { +std::vector>* JsProgram::body() { return &body_; } -const std::vector, std::unique_ptr>>* JsProgram::body() const { +const std::vector>* JsProgram::body() const { return &body_; } -void JsProgram::set_body(std::vector, std::unique_ptr>> body) { +void JsProgram::set_body(std::vector> body) { body_ = std::move(body); } @@ -1763,6 +1763,23 @@ void JsFunction::set_async(bool async) { async_ = async; } +// ============================================================================= +// JsStatement +// ============================================================================= + +JsStatement::JsStatement( + std::optional> loc, + std::optional start, + std::optional end, + std::optional> leading_comment_uids, + std::optional> trailing_comment_uids, + std::optional> inner_comment_uids, + std::optional scope_uid, + std::optional> referenced_symbol, + std::optional>> defined_symbols) + : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} + // ============================================================================= // JsBlockStatement // ============================================================================= @@ -1780,6 +1797,7 @@ JsBlockStatement::JsBlockStatement( std::vector> body, std::vector> directives) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), body_(std::move(body)), directives_(std::move(directives)) {} @@ -1859,6 +1877,7 @@ JsExpressionStatement::JsExpressionStatement( std::optional>> defined_symbols, std::unique_ptr expression) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), expression_(std::move(expression)) {} @@ -1889,6 +1908,7 @@ JsEmptyStatement::JsEmptyStatement( std::optional> referenced_symbol, std::optional>> defined_symbols) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} // ============================================================================= @@ -1906,6 +1926,7 @@ JsDebuggerStatement::JsDebuggerStatement( std::optional> referenced_symbol, std::optional>> defined_symbols) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} // ============================================================================= @@ -1925,6 +1946,7 @@ JsWithStatement::JsWithStatement( std::unique_ptr object, std::unique_ptr body) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), object_(std::move(object)), body_(std::move(body)) {} @@ -1969,6 +1991,7 @@ JsReturnStatement::JsReturnStatement( std::optional>> defined_symbols, std::optional> argument) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), argument_(std::move(argument)) {} @@ -2009,6 +2032,7 @@ JsLabeledStatement::JsLabeledStatement( std::unique_ptr label, std::unique_ptr body) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), label_(std::move(label)), body_(std::move(body)) {} @@ -2053,6 +2077,7 @@ JsBreakStatement::JsBreakStatement( std::optional>> defined_symbols, std::optional> label) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), label_(std::move(label)) {} @@ -2092,6 +2117,7 @@ JsContinueStatement::JsContinueStatement( std::optional>> defined_symbols, std::optional> label) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), label_(std::move(label)) {} @@ -2133,6 +2159,7 @@ JsIfStatement::JsIfStatement( std::unique_ptr consequent, std::optional> alternate) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), test_(std::move(test)), consequent_(std::move(consequent)), @@ -2251,6 +2278,7 @@ JsSwitchStatement::JsSwitchStatement( std::unique_ptr discriminant, std::vector> cases) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), discriminant_(std::move(discriminant)), cases_(std::move(cases)) {} @@ -2295,6 +2323,7 @@ JsThrowStatement::JsThrowStatement( std::optional>> defined_symbols, std::unique_ptr argument) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), argument_(std::move(argument)) {} @@ -2380,6 +2409,7 @@ JsTryStatement::JsTryStatement( std::optional> handler, std::optional> finalizer) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), block_(std::move(block)), handler_(std::move(handler)), @@ -2454,6 +2484,7 @@ JsWhileStatement::JsWhileStatement( std::unique_ptr test, std::unique_ptr body) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), test_(std::move(test)), body_(std::move(body)) {} @@ -2499,6 +2530,7 @@ JsDoWhileStatement::JsDoWhileStatement( std::unique_ptr body, std::unique_ptr test) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), body_(std::move(body)), test_(std::move(test)) {} @@ -2542,6 +2574,7 @@ JsDeclaration::JsDeclaration( std::optional> referenced_symbol, std::optional>> defined_symbols) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} // ============================================================================= @@ -2613,6 +2646,7 @@ JsVariableDeclaration::JsVariableDeclaration( std::vector> declarations, std::string kind) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), declarations_(std::move(declarations)), @@ -2657,6 +2691,7 @@ JsForStatement::JsForStatement( std::optional> update, std::unique_ptr body) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), init_(std::move(init)), test_(std::move(test)), @@ -2771,6 +2806,7 @@ JsForInStatement::JsForInStatement( std::unique_ptr right, std::unique_ptr body) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), left_(std::move(left)), right_(std::move(right)), @@ -2849,6 +2885,7 @@ JsForOfStatement::JsForOfStatement( std::unique_ptr body, bool await) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), left_(std::move(left)), right_(std::move(right)), @@ -2939,6 +2976,7 @@ JsFunctionDeclaration::JsFunctionDeclaration( : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsFunction(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols), std::move(id), std::move(params), std::move(generator), std::move(async)), JsBlockStatementFunction(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols), std::move(id), std::move(params), std::move(generator), std::move(async), std::move(body)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} @@ -4838,6 +4876,7 @@ JsClassDeclaration::JsClassDeclaration( std::optional> id) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsClass(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols), std::move(super_class), std::move(body)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsStatement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), id_(std::move(id)) {} @@ -4949,6 +4988,23 @@ void JsMetaProperty::set_property(std::unique_ptr property) { property_ = std::move(property); } +// ============================================================================= +// JsModuleDeclaration +// ============================================================================= + +JsModuleDeclaration::JsModuleDeclaration( + std::optional> loc, + std::optional start, + std::optional end, + std::optional> leading_comment_uids, + std::optional> trailing_comment_uids, + std::optional> inner_comment_uids, + std::optional scope_uid, + std::optional> referenced_symbol, + std::optional>> defined_symbols) + : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)) {} + // ============================================================================= // JsModuleSpecifier // ============================================================================= @@ -5152,6 +5208,7 @@ JsImportDeclaration::JsImportDeclaration( std::unique_ptr source, std::optional> assertions) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsModuleDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), specifiers_(std::move(specifiers)), source_(std::move(source)), @@ -5309,6 +5366,7 @@ JsExportNamedDeclaration::JsExportNamedDeclaration( std::optional> source, std::optional>> assertions) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsModuleDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), declaration_(std::move(declaration)), specifiers_(std::move(specifiers)), @@ -5403,6 +5461,7 @@ JsExportDefaultDeclaration::JsExportDefaultDeclaration( std::optional>> defined_symbols, std::variant, std::unique_ptr, std::unique_ptr> declaration) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsModuleDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), declaration_(std::move(declaration)) {} @@ -5459,6 +5518,7 @@ JsExportAllDeclaration::JsExportAllDeclaration( std::unique_ptr source, std::optional>> assertions) : JsNode(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), + JsProgramBodyElement(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), JsModuleDeclaration(std::move(loc), std::move(start), std::move(end), std::move(leading_comment_uids), std::move(trailing_comment_uids), std::move(inner_comment_uids), std::move(scope_uid), std::move(referenced_symbol), std::move(defined_symbols)), source_(std::move(source)), assertions_(std::move(assertions)) {} diff --git a/maldoca/js/ast/ast.generated.h b/maldoca/js/ast/ast.generated.h index e148c4c..995c8fd 100644 --- a/maldoca/js/ast/ast.generated.h +++ b/maldoca/js/ast/ast.generated.h @@ -199,10 +199,10 @@ absl::StatusOr StringToJsCommentType(absl::string_view s); class JsComment { public: explicit JsComment( - std::unique_ptr loc, + std::optional> loc, std::string value, - int64_t start, - int64_t end); + std::optional start, + std::optional end); virtual ~JsComment() = default; @@ -212,18 +212,18 @@ class JsComment { static absl::StatusOr> FromJson(const nlohmann::json& json); - JsSourceLocation* loc(); - const JsSourceLocation* loc() const; - void set_loc(std::unique_ptr loc); + std::optional loc(); + std::optional loc() const; + void set_loc(std::optional> loc); absl::string_view value() const; void set_value(std::string value); - int64_t start() const; - void set_start(int64_t start); + std::optional start() const; + void set_start(std::optional start); - int64_t end() const; - void set_end(int64_t end); + std::optional end() const; + void set_end(std::optional end); protected: // Internal function used by Serialize(). @@ -233,25 +233,25 @@ class JsComment { // Internal functions used by FromJson(). // Extracts a field from a JSON object. - static absl::StatusOr> GetLoc(const nlohmann::json& json); + static absl::StatusOr>> GetLoc(const nlohmann::json& json); static absl::StatusOr GetValue(const nlohmann::json& json); - static absl::StatusOr GetStart(const nlohmann::json& json); - static absl::StatusOr GetEnd(const nlohmann::json& json); + static absl::StatusOr> GetStart(const nlohmann::json& json); + static absl::StatusOr> GetEnd(const nlohmann::json& json); private: - std::unique_ptr loc_; + std::optional> loc_; std::string value_; - int64_t start_; - int64_t end_; + std::optional start_; + std::optional end_; }; class JsCommentBlock : public virtual JsComment { public: explicit JsCommentBlock( - std::unique_ptr loc, + std::optional> loc, std::string value, - int64_t start, - int64_t end); + std::optional start, + std::optional end); JsCommentType comment_type() const override { return JsCommentType::kCommentBlock; @@ -271,10 +271,10 @@ class JsCommentBlock : public virtual JsComment { class JsCommentLine : public virtual JsComment { public: explicit JsCommentLine( - std::unique_ptr loc, + std::optional> loc, std::string value, - int64_t start, - int64_t end); + std::optional start, + std::optional end); JsCommentType comment_type() const override { return JsCommentType::kCommentLine; @@ -537,31 +537,9 @@ class JsInterpreterDirective : public virtual JsNode { std::string value_; }; -class JsStatement : public virtual JsNode { - public: - explicit JsStatement( - std::optional> loc, - std::optional start, - std::optional end, - std::optional> leading_comment_uids, - std::optional> trailing_comment_uids, - std::optional> inner_comment_uids, - std::optional scope_uid, - std::optional> referenced_symbol, - std::optional>> defined_symbols); - - static absl::StatusOr> FromJson(const nlohmann::json& json); - - protected: - // Internal function used by Serialize(). - // Sets the fields defined in this class. - // Does not set fields defined in ancestors. - void SerializeFields(std::ostream& os, bool &needs_comma) const; -}; - -class JsModuleDeclaration : public virtual JsNode { +class JsProgramBodyElement : public virtual JsNode { public: - explicit JsModuleDeclaration( + explicit JsProgramBodyElement( std::optional> loc, std::optional start, std::optional end, @@ -572,7 +550,7 @@ class JsModuleDeclaration : public virtual JsNode { std::optional> referenced_symbol, std::optional>> defined_symbols); - static absl::StatusOr> FromJson(const nlohmann::json& json); + static absl::StatusOr> FromJson(const nlohmann::json& json); protected: // Internal function used by Serialize(). @@ -713,7 +691,7 @@ class JsProgram : public virtual JsNode { std::optional>> defined_symbols, std::optional> interpreter, std::string source_type, - std::vector, std::unique_ptr>> body, + std::vector> body, std::vector> directives); JsNodeType node_type() const override { @@ -731,9 +709,9 @@ class JsProgram : public virtual JsNode { absl::string_view source_type() const; void set_source_type(std::string source_type); - std::vector, std::unique_ptr>>* body(); - const std::vector, std::unique_ptr>>* body() const; - void set_body(std::vector, std::unique_ptr>> body); + std::vector>* body(); + const std::vector>* body() const; + void set_body(std::vector> body); std::vector>* directives(); const std::vector>* directives() const; @@ -749,13 +727,13 @@ class JsProgram : public virtual JsNode { // Extracts a field from a JSON object. static absl::StatusOr>> GetInterpreter(const nlohmann::json& json); static absl::StatusOr GetSourceType(const nlohmann::json& json); - static absl::StatusOr, std::unique_ptr>>> GetBody(const nlohmann::json& json); + static absl::StatusOr>> GetBody(const nlohmann::json& json); static absl::StatusOr>> GetDirectives(const nlohmann::json& json); private: std::optional> interpreter_; std::string source_type_; - std::vector, std::unique_ptr>> body_; + std::vector> body_; std::vector> directives_; }; @@ -1405,6 +1383,28 @@ class JsFunction : public virtual JsNode { bool async_; }; +class JsStatement : public virtual JsNode, public virtual JsProgramBodyElement { + public: + explicit JsStatement( + std::optional> loc, + std::optional start, + std::optional end, + std::optional> leading_comment_uids, + std::optional> trailing_comment_uids, + std::optional> inner_comment_uids, + std::optional scope_uid, + std::optional> referenced_symbol, + std::optional>> defined_symbols); + + static absl::StatusOr> FromJson(const nlohmann::json& json); + + protected: + // Internal function used by Serialize(). + // Sets the fields defined in this class. + // Does not set fields defined in ancestors. + void SerializeFields(std::ostream& os, bool &needs_comma) const; +}; + class JsBlockStatement : public virtual JsStatement { public: explicit JsBlockStatement( @@ -4452,6 +4452,28 @@ class JsMetaProperty : public virtual JsExpression { std::unique_ptr property_; }; +class JsModuleDeclaration : public virtual JsNode, public virtual JsProgramBodyElement { + public: + explicit JsModuleDeclaration( + std::optional> loc, + std::optional start, + std::optional end, + std::optional> leading_comment_uids, + std::optional> trailing_comment_uids, + std::optional> inner_comment_uids, + std::optional scope_uid, + std::optional> referenced_symbol, + std::optional>> defined_symbols); + + static absl::StatusOr> FromJson(const nlohmann::json& json); + + protected: + // Internal function used by Serialize(). + // Sets the fields defined in this class. + // Does not set fields defined in ancestors. + void SerializeFields(std::ostream& os, bool &needs_comma) const; +}; + class JsModuleSpecifier : public virtual JsNode { public: explicit JsModuleSpecifier( diff --git a/maldoca/js/ast/ast_from_json.generated.cc b/maldoca/js/ast/ast_from_json.generated.cc index effea1a..6c95333 100644 --- a/maldoca/js/ast/ast_from_json.generated.cc +++ b/maldoca/js/ast/ast_from_json.generated.cc @@ -176,7 +176,7 @@ JsSourceLocation::FromJson(const nlohmann::json& json) { // JsComment // ============================================================================= -absl::StatusOr> +absl::StatusOr>> JsComment::GetLoc(const nlohmann::json& json) { auto loc_it = json.find("loc"); if (loc_it == json.end()) { @@ -185,7 +185,7 @@ JsComment::GetLoc(const nlohmann::json& json) { const nlohmann::json& json_loc = loc_it.value(); if (json_loc.is_null()) { - return absl::InvalidArgumentError("json_loc is null."); + return std::nullopt; } return JsSourceLocation::FromJson(json_loc); } @@ -207,7 +207,7 @@ JsComment::GetValue(const nlohmann::json& json) { return json_value.get(); } -absl::StatusOr +absl::StatusOr> JsComment::GetStart(const nlohmann::json& json) { auto start_it = json.find("start"); if (start_it == json.end()) { @@ -216,7 +216,7 @@ JsComment::GetStart(const nlohmann::json& json) { const nlohmann::json& json_start = start_it.value(); if (json_start.is_null()) { - return absl::InvalidArgumentError("json_start is null."); + return std::nullopt; } if (!json_start.is_number_integer()) { return absl::InvalidArgumentError("Expecting json_start.is_number_integer()."); @@ -224,7 +224,7 @@ JsComment::GetStart(const nlohmann::json& json) { return json_start.get(); } -absl::StatusOr +absl::StatusOr> JsComment::GetEnd(const nlohmann::json& json) { auto end_it = json.find("end"); if (end_it == json.end()) { @@ -233,7 +233,7 @@ JsComment::GetEnd(const nlohmann::json& json) { const nlohmann::json& json_end = end_it.value(); if (json_end.is_null()) { - return absl::InvalidArgumentError("json_end is null."); + return std::nullopt; } if (!json_end.is_number_integer()) { return absl::InvalidArgumentError("Expecting json_end.is_number_integer()."); @@ -751,6 +751,8 @@ JsNode::FromJson(const nlohmann::json& json) { return JsModuleSpecifier::FromJson(json); } else if (type == "ImportAttribute") { return JsImportAttribute::FromJson(json); + } else if (type == "ProgramBodyElement") { + return JsProgramBodyElement::FromJson(json); } return absl::InvalidArgumentError(absl::StrCat("Invalid type: ", type)); } @@ -807,51 +809,11 @@ JsInterpreterDirective::FromJson(const nlohmann::json& json) { } // ============================================================================= -// JsStatement +// JsProgramBodyElement // ============================================================================= -static bool IsStatement(const nlohmann::json& json) { - if (!json.is_object()) { - return false; - } - auto type_it = json.find("type"); - if (type_it == json.end()) { - return false; - } - const nlohmann::json &type_json = type_it.value(); - if (!type_json.is_string()) { - return false; - } - const std::string &type = type_json.get(); - static const auto *kTypes = new absl::flat_hash_set{ - "ExpressionStatement", - "BlockStatement", - "EmptyStatement", - "DebuggerStatement", - "WithStatement", - "ReturnStatement", - "LabeledStatement", - "BreakStatement", - "ContinueStatement", - "IfStatement", - "SwitchStatement", - "ThrowStatement", - "TryStatement", - "WhileStatement", - "DoWhileStatement", - "ForStatement", - "ForInStatement", - "ForOfStatement", - "FunctionDeclaration", - "VariableDeclaration", - "ClassDeclaration", - }; - - return kTypes->contains(type); -} - -absl::StatusOr> -JsStatement::FromJson(const nlohmann::json& json) { +absl::StatusOr> +JsProgramBodyElement::FromJson(const nlohmann::json& json) { if (!json.is_object()) { return absl::InvalidArgumentError("JSON is not an object."); } @@ -902,46 +864,9 @@ JsStatement::FromJson(const nlohmann::json& json) { return JsClassDeclaration::FromJson(json); } else if (type == "Declaration") { return JsDeclaration::FromJson(json); - } - return absl::InvalidArgumentError(absl::StrCat("Invalid type: ", type)); -} - -// ============================================================================= -// JsModuleDeclaration -// ============================================================================= - -static bool IsModuleDeclaration(const nlohmann::json& json) { - if (!json.is_object()) { - return false; - } - auto type_it = json.find("type"); - if (type_it == json.end()) { - return false; - } - const nlohmann::json &type_json = type_it.value(); - if (!type_json.is_string()) { - return false; - } - const std::string &type = type_json.get(); - static const auto *kTypes = new absl::flat_hash_set{ - "ImportDeclaration", - "ExportNamedDeclaration", - "ExportDefaultDeclaration", - "ExportAllDeclaration", - }; - - return kTypes->contains(type); -} - -absl::StatusOr> -JsModuleDeclaration::FromJson(const nlohmann::json& json) { - if (!json.is_object()) { - return absl::InvalidArgumentError("JSON is not an object."); - } - - MALDOCA_ASSIGN_OR_RETURN(std::string type, GetType(json)); - - if (type == "ImportDeclaration") { + } else if (type == "Statement") { + return JsStatement::FromJson(json); + } else if (type == "ImportDeclaration") { return JsImportDeclaration::FromJson(json); } else if (type == "ExportNamedDeclaration") { return JsExportNamedDeclaration::FromJson(json); @@ -949,6 +874,8 @@ JsModuleDeclaration::FromJson(const nlohmann::json& json) { return JsExportDefaultDeclaration::FromJson(json); } else if (type == "ExportAllDeclaration") { return JsExportAllDeclaration::FromJson(json); + } else if (type == "ModuleDeclaration") { + return JsModuleDeclaration::FromJson(json); } return absl::InvalidArgumentError(absl::StrCat("Invalid type: ", type)); } @@ -1155,7 +1082,7 @@ JsProgram::GetSourceType(const nlohmann::json& json) { return json_source_type.get(); } -absl::StatusOr, std::unique_ptr>>> +absl::StatusOr>> JsProgram::GetBody(const nlohmann::json& json) { auto body_it = json.find("body"); if (body_it == json.end()) { @@ -1170,22 +1097,12 @@ JsProgram::GetBody(const nlohmann::json& json) { return absl::InvalidArgumentError("json_body expected to be array."); } - std::vector, std::unique_ptr>> body; + std::vector> body; for (const nlohmann::json& json_body_element : json_body) { if (json_body_element.is_null()) { return absl::InvalidArgumentError("json_body_element is null."); } - std::variant, std::unique_ptr> body_element; - if (IsStatement(json_body_element)) { - MALDOCA_ASSIGN_OR_RETURN(body_element, JsStatement::FromJson(json_body_element)); - } else if (IsModuleDeclaration(json_body_element)) { - MALDOCA_ASSIGN_OR_RETURN(body_element, JsModuleDeclaration::FromJson(json_body_element)); - } else { - auto result = absl::InvalidArgumentError("json_body_element has invalid type."); - result.SetPayload("json", absl::Cord{json.dump()}); - result.SetPayload("json_element", absl::Cord{json_body_element.dump()}); - return result; - } + MALDOCA_ASSIGN_OR_RETURN(auto body_element, JsProgramBodyElement::FromJson(json_body_element)); body.push_back(std::move(body_element)); } return body; @@ -2409,6 +2326,66 @@ JsFunction::FromJson(const nlohmann::json& json) { return absl::InvalidArgumentError(absl::StrCat("Invalid type: ", type)); } +// ============================================================================= +// JsStatement +// ============================================================================= + +absl::StatusOr> +JsStatement::FromJson(const nlohmann::json& json) { + if (!json.is_object()) { + return absl::InvalidArgumentError("JSON is not an object."); + } + + MALDOCA_ASSIGN_OR_RETURN(std::string type, GetType(json)); + + if (type == "ExpressionStatement") { + return JsExpressionStatement::FromJson(json); + } else if (type == "BlockStatement") { + return JsBlockStatement::FromJson(json); + } else if (type == "EmptyStatement") { + return JsEmptyStatement::FromJson(json); + } else if (type == "DebuggerStatement") { + return JsDebuggerStatement::FromJson(json); + } else if (type == "WithStatement") { + return JsWithStatement::FromJson(json); + } else if (type == "ReturnStatement") { + return JsReturnStatement::FromJson(json); + } else if (type == "LabeledStatement") { + return JsLabeledStatement::FromJson(json); + } else if (type == "BreakStatement") { + return JsBreakStatement::FromJson(json); + } else if (type == "ContinueStatement") { + return JsContinueStatement::FromJson(json); + } else if (type == "IfStatement") { + return JsIfStatement::FromJson(json); + } else if (type == "SwitchStatement") { + return JsSwitchStatement::FromJson(json); + } else if (type == "ThrowStatement") { + return JsThrowStatement::FromJson(json); + } else if (type == "TryStatement") { + return JsTryStatement::FromJson(json); + } else if (type == "WhileStatement") { + return JsWhileStatement::FromJson(json); + } else if (type == "DoWhileStatement") { + return JsDoWhileStatement::FromJson(json); + } else if (type == "ForStatement") { + return JsForStatement::FromJson(json); + } else if (type == "ForInStatement") { + return JsForInStatement::FromJson(json); + } else if (type == "ForOfStatement") { + return JsForOfStatement::FromJson(json); + } else if (type == "FunctionDeclaration") { + return JsFunctionDeclaration::FromJson(json); + } else if (type == "VariableDeclaration") { + return JsVariableDeclaration::FromJson(json); + } else if (type == "ClassDeclaration") { + return JsClassDeclaration::FromJson(json); + } else if (type == "Declaration") { + return JsDeclaration::FromJson(json); + } + return absl::InvalidArgumentError(absl::StrCat("Invalid type: ", type)); +} + // ============================================================================= // JsBlockStatement // ============================================================================= @@ -7261,6 +7238,30 @@ JsMetaProperty::FromJson(const nlohmann::json& json) { std::move(property)); } +// ============================================================================= +// JsModuleDeclaration +// ============================================================================= + +absl::StatusOr> +JsModuleDeclaration::FromJson(const nlohmann::json& json) { + if (!json.is_object()) { + return absl::InvalidArgumentError("JSON is not an object."); + } + + MALDOCA_ASSIGN_OR_RETURN(std::string type, GetType(json)); + + if (type == "ImportDeclaration") { + return JsImportDeclaration::FromJson(json); + } else if (type == "ExportNamedDeclaration") { + return JsExportNamedDeclaration::FromJson(json); + } else if (type == "ExportDefaultDeclaration") { + return JsExportDefaultDeclaration::FromJson(json); + } else if (type == "ExportAllDeclaration") { + return JsExportAllDeclaration::FromJson(json); + } + return absl::InvalidArgumentError(absl::StrCat("Invalid type: ", type)); +} + // ============================================================================= // JsModuleSpecifier // ============================================================================= diff --git a/maldoca/js/ast/ast_to_json.generated.cc b/maldoca/js/ast/ast_to_json.generated.cc index f32ddfd..b23fc32 100644 --- a/maldoca/js/ast/ast_to_json.generated.cc +++ b/maldoca/js/ast/ast_to_json.generated.cc @@ -95,14 +95,26 @@ void JsSourceLocation::Serialize(std::ostream& os) const { void JsComment::SerializeFields(std::ostream& os, bool &needs_comma) const { MaybeAddComma(os, needs_comma); - os << "\"loc\":"; - loc_->Serialize(os); + if (loc_.has_value()) { + os << "\"loc\":"; + loc_.value()->Serialize(os); + } else { + os << "\"loc\":" << "null"; + } MaybeAddComma(os, needs_comma); os << "\"value\":" << (nlohmann::json(value_)).dump(); MaybeAddComma(os, needs_comma); - os << "\"start\":" << (nlohmann::json(start_)).dump(); + if (start_.has_value()) { + os << "\"start\":" << (nlohmann::json(start_.value())).dump(); + } else { + os << "\"start\":" << "null"; + } MaybeAddComma(os, needs_comma); - os << "\"end\":" << (nlohmann::json(end_)).dump(); + if (end_.has_value()) { + os << "\"end\":" << (nlohmann::json(end_.value())).dump(); + } else { + os << "\"end\":" << "null"; + } } // ============================================================================= @@ -270,17 +282,10 @@ void JsInterpreterDirective::Serialize(std::ostream& os) const { } // ============================================================================= -// JsStatement +// JsProgramBodyElement // ============================================================================= -void JsStatement::SerializeFields(std::ostream& os, bool &needs_comma) const { -} - -// ============================================================================= -// JsModuleDeclaration -// ============================================================================= - -void JsModuleDeclaration::SerializeFields(std::ostream& os, bool &needs_comma) const { +void JsProgramBodyElement::SerializeFields(std::ostream& os, bool &needs_comma) const { } // ============================================================================= @@ -371,18 +376,7 @@ void JsProgram::SerializeFields(std::ostream& os, bool &needs_comma) const { bool needs_comma = false; for (const auto& element : body_) { MaybeAddComma(os, needs_comma); - switch (element.index()) { - case 0: { - std::get<0>(element)->Serialize(os); - break; - } - case 1: { - std::get<1>(element)->Serialize(os); - break; - } - default: - LOG(FATAL) << "Unreachable code."; - } + element->Serialize(os); } } os << "]"; @@ -782,6 +776,13 @@ void JsFunction::SerializeFields(std::ostream& os, bool &needs_comma) const { os << "\"async\":" << (nlohmann::json(async_)).dump(); } +// ============================================================================= +// JsStatement +// ============================================================================= + +void JsStatement::SerializeFields(std::ostream& os, bool &needs_comma) const { +} + // ============================================================================= // JsBlockStatement // ============================================================================= @@ -816,6 +817,7 @@ void JsBlockStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"BlockStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsBlockStatement::SerializeFields(os, needs_comma); } @@ -849,6 +851,7 @@ void JsExpressionStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ExpressionStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsExpressionStatement::SerializeFields(os, needs_comma); } @@ -869,6 +872,7 @@ void JsEmptyStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"EmptyStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsEmptyStatement::SerializeFields(os, needs_comma); } @@ -889,6 +893,7 @@ void JsDebuggerStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"DebuggerStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsDebuggerStatement::SerializeFields(os, needs_comma); } @@ -915,6 +920,7 @@ void JsWithStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"WithStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsWithStatement::SerializeFields(os, needs_comma); } @@ -942,6 +948,7 @@ void JsReturnStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ReturnStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsReturnStatement::SerializeFields(os, needs_comma); } @@ -968,6 +975,7 @@ void JsLabeledStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"LabeledStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsLabeledStatement::SerializeFields(os, needs_comma); } @@ -995,6 +1003,7 @@ void JsBreakStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"BreakStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsBreakStatement::SerializeFields(os, needs_comma); } @@ -1022,6 +1031,7 @@ void JsContinueStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ContinueStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsContinueStatement::SerializeFields(os, needs_comma); } @@ -1055,6 +1065,7 @@ void JsIfStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"IfStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsIfStatement::SerializeFields(os, needs_comma); } @@ -1124,6 +1135,7 @@ void JsSwitchStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"SwitchStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsSwitchStatement::SerializeFields(os, needs_comma); } @@ -1147,6 +1159,7 @@ void JsThrowStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ThrowStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsThrowStatement::SerializeFields(os, needs_comma); } @@ -1213,6 +1226,7 @@ void JsTryStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"TryStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsTryStatement::SerializeFields(os, needs_comma); } @@ -1239,6 +1253,7 @@ void JsWhileStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"WhileStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsWhileStatement::SerializeFields(os, needs_comma); } @@ -1265,6 +1280,7 @@ void JsDoWhileStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"DoWhileStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsDoWhileStatement::SerializeFields(os, needs_comma); } @@ -1333,6 +1349,7 @@ void JsVariableDeclaration::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"VariableDeclaration\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsDeclaration::SerializeFields(os, needs_comma); JsVariableDeclaration::SerializeFields(os, needs_comma); @@ -1390,6 +1407,7 @@ void JsForStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ForStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsForStatement::SerializeFields(os, needs_comma); } @@ -1431,6 +1449,7 @@ void JsForInStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ForInStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsForInStatement::SerializeFields(os, needs_comma); } @@ -1474,6 +1493,7 @@ void JsForOfStatement::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ForOfStatement\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsForOfStatement::SerializeFields(os, needs_comma); } @@ -1496,6 +1516,7 @@ void JsFunctionDeclaration::Serialize(std::ostream& os) const { JsNode::SerializeFields(os, needs_comma); JsFunction::SerializeFields(os, needs_comma); JsBlockStatementFunction::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsDeclaration::SerializeFields(os, needs_comma); JsFunctionDeclaration::SerializeFields(os, needs_comma); @@ -2813,6 +2834,7 @@ void JsClassDeclaration::Serialize(std::ostream& os) const { os << "\"type\":\"ClassDeclaration\""; JsNode::SerializeFields(os, needs_comma); JsClass::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsStatement::SerializeFields(os, needs_comma); JsDeclaration::SerializeFields(os, needs_comma); JsClassDeclaration::SerializeFields(os, needs_comma); @@ -2874,6 +2896,13 @@ void JsMetaProperty::Serialize(std::ostream& os) const { os << "}"; } +// ============================================================================= +// JsModuleDeclaration +// ============================================================================= + +void JsModuleDeclaration::SerializeFields(std::ostream& os, bool &needs_comma) const { +} + // ============================================================================= // JsModuleSpecifier // ============================================================================= @@ -3037,6 +3066,7 @@ void JsImportDeclaration::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ImportDeclaration\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsModuleDeclaration::SerializeFields(os, needs_comma); JsImportDeclaration::SerializeFields(os, needs_comma); } @@ -3145,6 +3175,7 @@ void JsExportNamedDeclaration::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ExportNamedDeclaration\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsModuleDeclaration::SerializeFields(os, needs_comma); JsExportNamedDeclaration::SerializeFields(os, needs_comma); } @@ -3185,6 +3216,7 @@ void JsExportDefaultDeclaration::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ExportDefaultDeclaration\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsModuleDeclaration::SerializeFields(os, needs_comma); JsExportDefaultDeclaration::SerializeFields(os, needs_comma); } @@ -3220,6 +3252,7 @@ void JsExportAllDeclaration::Serialize(std::ostream& os) const { MaybeAddComma(os, needs_comma); os << "\"type\":\"ExportAllDeclaration\""; JsNode::SerializeFields(os, needs_comma); + JsProgramBodyElement::SerializeFields(os, needs_comma); JsModuleDeclaration::SerializeFields(os, needs_comma); JsExportAllDeclaration::SerializeFields(os, needs_comma); } diff --git a/maldoca/js/ast/ast_visitor.h b/maldoca/js/ast/ast_visitor.h index f105e2f..33286b4 100644 --- a/maldoca/js/ast/ast_visitor.h +++ b/maldoca/js/ast/ast_visitor.h @@ -332,6 +332,19 @@ class JsAstVisitor : public virtual JsPatternVisitor, virtual R VisitExportAllDeclaration( const JsExportAllDeclaration &export_all_declaration) = 0; + R VisitProgramBodyElement(const JsProgramBodyElement& program_body_element) { + const JsProgramBodyElement* program_body_element_ptr = + &program_body_element; + if (const JsStatement* statement = + dynamic_cast(program_body_element_ptr)) { + return VisitStatement(*statement); + } else if (const JsModuleDeclaration* declaration = + dynamic_cast( + program_body_element_ptr)) { + return VisitModuleDeclaration(*declaration); + } + } + R VisitDeclaration(const JsDeclaration &declaration) { const JsDeclaration *declaration_ptr = &declaration; if (const JsVariableDeclaration *variable_declaration = @@ -741,6 +754,18 @@ class MutableJsAstVisitor { virtual R VisitExportAllDeclaration( JsExportAllDeclaration &export_all_declaration) = 0; + R VisitProgramBodyElement(JsProgramBodyElement& program_body_element) { + JsProgramBodyElement* program_body_element_ptr = &program_body_element; + if (JsStatement* statement = + dynamic_cast(program_body_element_ptr)) { + return VisitStatement(*statement); + } else if (JsModuleDeclaration* declaration = + dynamic_cast( + program_body_element_ptr)) { + return VisitModuleDeclaration(*declaration); + } + } + R VisitDeclaration(JsDeclaration &declaration) { JsDeclaration *declaration_ptr = &declaration; if (JsVariableDeclaration *variable_declaration = diff --git a/maldoca/js/ast/ast_walker.h b/maldoca/js/ast/ast_walker.h index 0cc9c06..3b1052e 100644 --- a/maldoca/js/ast/ast_walker.h +++ b/maldoca/js/ast/ast_walker.h @@ -72,19 +72,9 @@ class JsAstWalker : public JsAstVisitor { VisitInterpreterDirective(*program.interpreter().value()); } - for (const std::variant, - std::unique_ptr> - &body_element : *program.body()) { - switch (body_element.index()) { - case 0: - VisitStatement(*std::get<0>(body_element)); - break; - case 1: - VisitModuleDeclaration(*std::get<1>(body_element)); - break; - default: - LOG(FATAL) << "Unreachable code."; - } + for (const std::unique_ptr& body_element : + *program.body()) { + VisitProgramBodyElement(*body_element); } for (const std::unique_ptr &directive : @@ -1581,19 +1571,9 @@ class MutableJsAstWalker : public MutableJsAstVisitor { VisitInterpreterDirective(*program.interpreter().value()); } - for (std::variant, - std::unique_ptr> &body_element : + for (std::unique_ptr& body_element : *program.body()) { - switch (body_element.index()) { - case 0: - VisitStatement(*std::get<0>(body_element)); - break; - case 1: - VisitModuleDeclaration(*std::get<1>(body_element)); - break; - default: - LOG(FATAL) << "Unreachable code."; - } + VisitProgramBodyElement(*body_element); } for (std::unique_ptr &directive : *program.directives()) { diff --git a/maldoca/js/ast/transforms/BUILD b/maldoca/js/ast/transforms/BUILD index dc7cbdd..6f05115 100644 --- a/maldoca/js/ast/transforms/BUILD +++ b/maldoca/js/ast/transforms/BUILD @@ -32,6 +32,7 @@ cc_library( "//maldoca/js/ast/transforms/extract_prelude:pass", "//maldoca/js/babel:babel_cc_proto", "//maldoca/js/driver:driver_cc_proto", + "@abseil-cpp//absl/container:flat_hash_set", "@abseil-cpp//absl/status", "@abseil-cpp//absl/strings:string_view", ], diff --git a/maldoca/js/ast/transforms/extract_prelude/BUILD b/maldoca/js/ast/transforms/extract_prelude/BUILD index 8a6f55e..9ea4a65 100644 --- a/maldoca/js/ast/transforms/extract_prelude/BUILD +++ b/maldoca/js/ast/transforms/extract_prelude/BUILD @@ -29,13 +29,19 @@ cc_library( srcs = ["pass.cc"], hdrs = ["pass.h"], deps = [ + "//maldoca/base:status", "//maldoca/js/ast", "//maldoca/js/babel:babel_cc_proto", "//maldoca/js/driver:driver_cc_proto", + "@abseil-cpp//absl/cleanup", + "@abseil-cpp//absl/container:flat_hash_set", + "@abseil-cpp//absl/functional:function_ref", "@abseil-cpp//absl/log", "@abseil-cpp//absl/log:check", + "@abseil-cpp//absl/status", "@abseil-cpp//absl/strings", "@abseil-cpp//absl/strings:string_view", + "@abseil-cpp//absl/types:span", "@abseil-cpp//absl/types:variant", ], ) @@ -50,6 +56,7 @@ cc_test( "//maldoca/js/driver", "//maldoca/js/driver:conversion", "//maldoca/js/quickjs_babel", + "@abseil-cpp//absl/container:flat_hash_set", "@abseil-cpp//absl/time", "@googletest//:gtest_main", ], diff --git a/maldoca/js/ast/transforms/extract_prelude/pass.cc b/maldoca/js/ast/transforms/extract_prelude/pass.cc index aace7c4..75733fe 100644 --- a/maldoca/js/ast/transforms/extract_prelude/pass.cc +++ b/maldoca/js/ast/transforms/extract_prelude/pass.cc @@ -14,63 +14,72 @@ #include "maldoca/js/ast/transforms/extract_prelude/pass.h" +#include #include #include #include #include #include +#include "absl/cleanup/cleanup.h" +#include "absl/container/flat_hash_set.h" +#include "absl/functional/function_ref.h" #include "absl/log/check.h" #include "absl/log/log.h" +#include "absl/status/status.h" #include "absl/strings/ascii.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" #include "absl/types/variant.h" +#include "maldoca/base/status_macros.h" #include "maldoca/js/ast/ast.generated.h" namespace maldoca { +absl::Status ForEachTopLevelNode( + const JsFile& ast, + absl::FunctionRef callback) { + for (const auto& directive : *ast.program()->directives()) { + MALDOCA_RETURN_IF_ERROR(callback(*directive)); + } + for (const auto& body : *ast.program()->body()) { + MALDOCA_RETURN_IF_ERROR(callback(*body)); + } + return absl::OkStatus(); +} + template typename std::vector::size_type erase_if_replacement( - std::vector &c, Pred pred) { + std::vector& c, Pred pred) { auto it = std::remove_if(c.begin(), c.end(), pred); auto num_erased = std::distance(it, c.end()); c.erase(it, c.end()); return num_erased; } -JsirAnalysisConfig::DynamicConstantPropagation ExtractPrelude( - absl::string_view original_source, JsFile &ast) { - std::optional global_scope_uid = ast.program()->scope_uid(); - - std::string prelude; +absl::flat_hash_set GetPreludeIndicesFromAnnotations( + const JsFile& ast) { bool is_extracting = false; + size_t index = 0; + absl::flat_hash_set prelude_indices; + CHECK_OK(ForEachTopLevelNode(ast, [&](const JsNode& node) { + absl::Cleanup increment_index = [&] { index++; }; - erase_if_replacement(*ast.program()->body(), [&](const auto &body) { - JsNode *node = nullptr; - switch (body.index()) { - case 0: { - node = &*absl::get<0>(body); - break; - } - case 1: { - node = &*absl::get<1>(body); - break; - } - default: - LOG(FATAL) << "Unreachable code."; + if (!ast.comments().has_value()) { + return absl::OkStatus(); } + const auto& comments = **ast.comments(); // Match "// exec:begin", start extraction; // Match "// exec:end", pause extraction. - if (ast.comments().has_value() && - node->leading_comment_uids().has_value()) { - const auto &comments = **ast.comments(); - for (int64_t comment_uid : **node->leading_comment_uids()) { + if (node.leading_comment_uids().has_value()) { + const auto& leading_comment_uids = **node.leading_comment_uids(); + + for (int64_t comment_uid : leading_comment_uids) { if (!(comment_uid >= 0 && comment_uid < comments.size())) { continue; } - const auto &comment = comments[comment_uid]; + const auto& comment = comments[comment_uid]; std::string comment_text{comment->value()}; comment_text = absl::StripAsciiWhitespace(comment_text); comment_text = absl::AsciiStrToLower(comment_text); @@ -83,48 +92,87 @@ JsirAnalysisConfig::DynamicConstantPropagation ExtractPrelude( } if (is_extracting) { - if (node->start().has_value() && node->end().has_value()) { - int64_t start = *node->start(); - int64_t end = *node->end(); - absl::StrAppend(&prelude, original_source.substr(start, end - start)); - - // The source range in the AST does not contain '\n'. - // - // For example: - // - // ``` - // let a = 1; <-- There's a '\n' here. - // function foo() { - // console.log("foo"); - // } <-- There's a '\n' here. - // let b = 2; - // function bar() { - // console.log("bar"); - // } - // ``` - // - // In the code above, the source range of the JsFunctionDeclaration node - // for `foo` does not cover either the '\n' before or after the function - // declaration (marked above). - // - // As a result, if we extract the AST nodes for `foo` and `bar` and - // concatenate them, we will get the following code: - // - // ``` - // function foo() { - // console.log("foo"); - // }function bar() { - // console.log("bar"); - // } - // ``` - // - // To prevent this, we need to manually add a '\n' after every extracted - // part. - // - // This doesn't cause the code to be invalid, because we are only - // extracting at the level of **top-level statements**. - absl::StrAppend(&prelude, "\n"); - } + prelude_indices.insert(index); + } + + return absl::OkStatus(); + })); + + return prelude_indices; +} + +// Appends the source code corresponding to `node` to `prelude`. +// +// If `node` does not have a source range, then `prelude` is not modified. +void AppendPrelude(absl::string_view original_source, const JsNode& node, + std::string& prelude) { + if (!node.start().has_value() || !node.end().has_value()) { + return; + } + + // The source range in the AST does not contain '\n'. + // + // For example: + // + // ``` + // let a = 1; <-- There's a '\n' here. + // function foo() { + // console.log("foo"); + // } <-- There's a '\n' here. + // let b = 2; + // function bar() { + // console.log("bar"); + // } + // ``` + // + // In the code above, the source range of the JsFunctionDeclaration node + // for `foo` does not cover either the '\n' before or after the function + // declaration (marked above). + // + // As a result, if we extract the AST nodes for `foo` and `bar` and + // concatenate them, we will get the following code: + // + // ``` + // function foo() { + // console.log("foo"); + // }function bar() { + // console.log("bar"); + // } + // ``` + // + // To prevent this, we need to manually add a '\n' after every extracted + // part. + // + // This doesn't cause the code to be invalid, because we are only + // extracting at the level of **top-level statements**. + int64_t start = *node.start(); + int64_t end = *node.end(); + absl::StrAppend(&prelude, original_source.substr(start, end - start), "\n"); +} + +JsirAnalysisConfig::DynamicConstantPropagation ExtractPreludeByIndices( + absl::string_view original_source, + const absl::flat_hash_set& indices, JsFile& ast) { + std::optional global_scope_uid = ast.program()->scope_uid(); + + std::string prelude; + size_t current_index = 0; + erase_if_replacement( + *ast.program()->directives(), [&](const auto& directive) { + absl::Cleanup increment_index = [&] { current_index++; }; + + if (indices.contains(current_index)) { + AppendPrelude(original_source, *directive, prelude); + return true; + } + + return false; + }); + erase_if_replacement(*ast.program()->body(), [&](const auto& body) { + absl::Cleanup increment_index = [&] { current_index++; }; + + if (indices.contains(current_index)) { + AppendPrelude(original_source, *body, prelude); return true; } @@ -140,4 +188,19 @@ JsirAnalysisConfig::DynamicConstantPropagation ExtractPrelude( return config; } +JsirAnalysisConfig::DynamicConstantPropagation ExtractPreludeByAnnotations( + absl::string_view original_source, JsFile& ast) { + auto prelude_indices = GetPreludeIndicesFromAnnotations(ast); + return ExtractPreludeByIndices(original_source, prelude_indices, ast); +} + +JsirAnalysisConfig::DynamicConstantPropagation +ExtractPreludeByIndicesAndAnnotations( + absl::string_view original_source, + const absl::flat_hash_set& indices, JsFile& ast) { + auto prelude_indices = GetPreludeIndicesFromAnnotations(ast); + prelude_indices.insert(indices.begin(), indices.end()); + return ExtractPreludeByIndices(original_source, prelude_indices, ast); +} + } // namespace maldoca diff --git a/maldoca/js/ast/transforms/extract_prelude/pass.h b/maldoca/js/ast/transforms/extract_prelude/pass.h index df7aba6..65625e2 100644 --- a/maldoca/js/ast/transforms/extract_prelude/pass.h +++ b/maldoca/js/ast/transforms/extract_prelude/pass.h @@ -15,13 +15,39 @@ #ifndef MALDOCA_JS_AST_ANALYSES_EXTRACT_PRELUDE_ANALYSIS_H_ #define MALDOCA_JS_AST_ANALYSES_EXTRACT_PRELUDE_ANALYSIS_H_ -#include +#include + +#include "absl/container/flat_hash_set.h" +#include "absl/functional/function_ref.h" +#include "absl/status/status.h" #include "absl/strings/string_view.h" #include "maldoca/js/ast/ast.generated.h" #include "maldoca/js/driver/driver.pb.h" namespace maldoca { +absl::Status ForEachTopLevelNode( + const JsFile& ast, absl::FunctionRef callback); + +// Removes parts of the code corresponding to the AST nodes at the given +// indices from the AST, and returns those parts as a string. +// +// Parameters: +// - original_source: The original source code that source ranges in the AST +// refer to. +// - indices: The indices of the AST nodes to remove. +// - ast: The AST to transform. Note that `ast` does not need to be equivalent +// to `original_source`. +// +// Returns: +// - The extracted prelude code. +// +// Modifies: +// - ast: The AST will be modified in place. +JsirAnalysisConfig::DynamicConstantPropagation ExtractPreludeByIndices( + absl::string_view original_source, + const absl::flat_hash_set& indices, JsFile& ast); + // Removes parts of the code wrapped with `// exec:begin` and `// exec:end` // comments from the AST, and returns those parts as a string. // @@ -69,8 +95,13 @@ namespace maldoca { // // Modifies: // - ast: The AST will be modified in place. -JsirAnalysisConfig::DynamicConstantPropagation ExtractPrelude( - absl::string_view original_source, JsFile &ast); +JsirAnalysisConfig::DynamicConstantPropagation ExtractPreludeByAnnotations( + absl::string_view original_source, JsFile& ast); + +JsirAnalysisConfig::DynamicConstantPropagation +ExtractPreludeByIndicesAndAnnotations( + absl::string_view original_source, + const absl::flat_hash_set& indices, JsFile& ast); } // namespace maldoca diff --git a/maldoca/js/ast/transforms/extract_prelude/pass_test.cc b/maldoca/js/ast/transforms/extract_prelude/pass_test.cc index 1d0de23..eb89fcb 100644 --- a/maldoca/js/ast/transforms/extract_prelude/pass_test.cc +++ b/maldoca/js/ast/transforms/extract_prelude/pass_test.cc @@ -14,9 +14,11 @@ #include "maldoca/js/ast/transforms/extract_prelude/pass.h" +#include #include #include "gtest/gtest.h" +#include "absl/container/flat_hash_set.h" #include "absl/time/time.h" #include "maldoca/base/testing/status_matchers.h" #include "maldoca/js/babel/babel.pb.h" @@ -28,23 +30,77 @@ namespace maldoca { namespace { static constexpr char kSource[] = R"js( +// 0: // exec:begin function foo() { console.log("foo"); } // exec:end +// 1: let a = 1; +// 2: function bar() { console.log("bar"); } - )js"; +)js"; + +TEST(ExtractPreludePassTest, ExtractPreludeByIndices) { + absl::flat_hash_set indices = {1}; + + static constexpr char kExpectedPrelude[] = R"js(let a = 1; +)js"; + + static constexpr char kExpectedSourceWithoutPrelude[] = R"js(// 0: +// exec:begin +function foo() { + console.log("foo"); +} +// exec:end +// 1: + +// 2: +function bar() { + console.log("bar"); +})js"; + + QuickJsBabel babel; + + BabelParseRequest parse_request; + parse_request.set_compute_scopes(true); -static constexpr char kExpectedPrelude[] = R"js(function foo() { + MALDOCA_ASSERT_OK_AND_ASSIGN( + JsAstRepr repr, ToJsAstRepr::FromJsSourceRepr(kSource, parse_request, + absl::InfiniteDuration(), + std::nullopt, babel)); + + JsirAnalysisConfig::DynamicConstantPropagation prelude = + ExtractPreludeByIndices(kSource, indices, *repr.ast); + + MALDOCA_ASSERT_OK_AND_ASSIGN( + JsSourceRepr source_repr, + ToJsSourceRepr::FromJsAstRepr(*repr.ast, {}, absl::InfiniteDuration(), + babel)); + + EXPECT_EQ(source_repr.source, kExpectedSourceWithoutPrelude); + + EXPECT_EQ(prelude.prelude_source(), kExpectedPrelude); + EXPECT_EQ(prelude.extracted_from_scope_uid(), 0); +} + +TEST(ExtractPreludePassTest, ExtractPreludeByAnnotations) { + static constexpr char kExpectedPrelude[] = R"js(function foo() { console.log("foo"); } )js"; -TEST(ExtractPreludePassTest, ExtractPrelude) { + static constexpr char kExpectedSourceWithoutPrelude[] = R"js(// exec:end +// 1: +let a = 1; +// 2: +function bar() { + console.log("bar"); +})js"; + QuickJsBabel babel; BabelParseRequest parse_request; @@ -56,13 +112,63 @@ TEST(ExtractPreludePassTest, ExtractPrelude) { std::nullopt, babel)); JsirAnalysisConfig::DynamicConstantPropagation prelude = - ExtractPrelude(kSource, *repr.ast); + ExtractPreludeByAnnotations(kSource, *repr.ast); + + MALDOCA_ASSERT_OK_AND_ASSIGN( + JsSourceRepr source_repr, + ToJsSourceRepr::FromJsAstRepr(*repr.ast, {}, absl::InfiniteDuration(), + babel)); + + EXPECT_EQ(source_repr.source, kExpectedSourceWithoutPrelude); + + EXPECT_EQ(prelude.prelude_source(), kExpectedPrelude); + EXPECT_EQ(prelude.extracted_from_scope_uid(), 0); +} + +TEST(ExtractPreludePassTest, ExtractPreludeByIndicesAndAnnotations) { + absl::flat_hash_set indices = {1}; + + static constexpr char kExpectedPrelude[] = R"js(function foo() { + console.log("foo"); +} +let a = 1; +)js"; + + static constexpr char kExpectedSourceWithoutPrelude[] = R"js(// 2: +function bar() { + console.log("bar"); +})js"; + + QuickJsBabel babel; + + BabelParseRequest parse_request; + parse_request.set_compute_scopes(true); + + MALDOCA_ASSERT_OK_AND_ASSIGN( + JsAstRepr repr, ToJsAstRepr::FromJsSourceRepr(kSource, parse_request, + absl::InfiniteDuration(), + std::nullopt, babel)); + + JsirAnalysisConfig::DynamicConstantPropagation prelude = + ExtractPreludeByIndicesAndAnnotations(kSource, indices, *repr.ast); + + MALDOCA_ASSERT_OK_AND_ASSIGN( + JsSourceRepr source_repr, + ToJsSourceRepr::FromJsAstRepr(*repr.ast, {}, absl::InfiniteDuration(), + babel)); + + EXPECT_EQ(source_repr.source, kExpectedSourceWithoutPrelude); EXPECT_EQ(prelude.prelude_source(), kExpectedPrelude); EXPECT_EQ(prelude.extracted_from_scope_uid(), 0); } TEST(ExtractPreludePassTest, ReuseBabel) { + static constexpr char kExpectedPrelude[] = R"js(function foo() { + console.log("foo"); +} +)js"; + QuickJsBabel babel; BabelParseRequest parse_request; @@ -83,7 +189,7 @@ TEST(ExtractPreludePassTest, ReuseBabel) { std::nullopt, babel)); JsirAnalysisConfig::DynamicConstantPropagation prelude = - ExtractPrelude(kSource, *repr.ast); + ExtractPreludeByAnnotations(kSource, *repr.ast); EXPECT_EQ(prelude.prelude_source(), kExpectedPrelude); EXPECT_EQ(prelude.extracted_from_scope_uid(), 3); diff --git a/maldoca/js/ast/transforms/transform.cc b/maldoca/js/ast/transforms/transform.cc index fedc54e..4e0a1fb 100644 --- a/maldoca/js/ast/transforms/transform.cc +++ b/maldoca/js/ast/transforms/transform.cc @@ -14,10 +14,12 @@ #include "maldoca/js/ast/transforms/transform.h" +#include #include #include #include +#include "absl/container/flat_hash_set.h" #include "absl/status/status.h" #include "absl/strings/string_view.h" #include "maldoca/js/ast/ast.generated.h" @@ -48,8 +50,14 @@ absl::Status TransformJsAst( "original_source is required for ExtractPrelude analysis"); } + absl::flat_hash_set prelude_indices; + for (size_t prelude_index : config.extract_prelude().prelude_indices()) { + prelude_indices.insert(prelude_index); + } + JsirAnalysisConfig::DynamicConstantPropagation prelude = - ExtractPrelude(*original_source, ast); + ExtractPreludeByIndicesAndAnnotations(*original_source, + prelude_indices, ast); JsAstAnalysisResult result; *result.mutable_extract_prelude() = std::move(prelude); diff --git a/maldoca/js/driver/BUILD b/maldoca/js/driver/BUILD index e872880..6cc67d5 100644 --- a/maldoca/js/driver/BUILD +++ b/maldoca/js/driver/BUILD @@ -102,7 +102,6 @@ cc_test( data = [ "test_babel_scopes.txtpb", "test_hir.mlir.test", - "test_lir.mlir.test", "test_parsed_ast.json", "test_serialized_ast.json", "test_source.js.test", diff --git a/maldoca/js/driver/conversion.cc b/maldoca/js/driver/conversion.cc index a57b8c5..166b68e 100644 --- a/maldoca/js/driver/conversion.cc +++ b/maldoca/js/driver/conversion.cc @@ -74,15 +74,6 @@ absl::StatusOr ToJsHirRepr::FromJsAstRepr( return JsHirRepr{std::move(op), scopes}; } -// ----------------------------------------------------------------------------- -// HIR -> LIR -// ----------------------------------------------------------------------------- - -JsLirRepr ToJsLirRepr::FromJsHirRepr(const JsHirRepr &hir_repr) { - mlir::OwningOpRef lir_op = JshirFileToJslir(hir_repr.op.get()); - return JsLirRepr{std::move(lir_op), hir_repr.scopes}; -} - // ----------------------------------------------------------------------------- // Source -> AST string -> AST // ----------------------------------------------------------------------------- @@ -112,21 +103,6 @@ absl::StatusOr ToJsHirRepr::FromJsSourceRepr( return ToJsHirRepr::FromJsAstRepr(*ast.ast, ast.scopes, mlir_context); } -// ----------------------------------------------------------------------------- -// Source -> AST string -> AST -> HIR -> LIR -// ----------------------------------------------------------------------------- - -absl::StatusOr ToJsLirRepr::FromJsSourceRepr( - absl::string_view source, BabelParseRequest parse_request, - absl::Duration timeout, std::optional recursion_depth_limit, - Babel &babel, mlir::MLIRContext &mlir_context) { - MALDOCA_ASSIGN_OR_RETURN( - JsHirRepr hir, ToJsHirRepr::FromJsSourceRepr( - source, parse_request, timeout, recursion_depth_limit, - babel, mlir_context)); - return ToJsLirRepr::FromJsHirRepr(hir); -} - // ----------------------------------------------------------------------------- // AST string -> AST -> HIR // ----------------------------------------------------------------------------- @@ -140,44 +116,10 @@ absl::StatusOr ToJsHirRepr::FromJsAstStringRepr( return ToJsHirRepr::FromJsAstRepr(*ast.ast, ast.scopes, mlir_context); } -// ---------------------------------------------------------------------------- -// AST string -> AST -> HIR -> LIR -// ----------------------------------------------------------------------------- - -absl::StatusOr ToJsLirRepr::FromJsAstStringRepr( - const BabelAstString &ast_string, std::optional recursion_depth_limit, - mlir::MLIRContext &mlir_context) { - MALDOCA_ASSIGN_OR_RETURN( - JsHirRepr hir, ToJsHirRepr::FromJsAstStringRepr( - ast_string, recursion_depth_limit, mlir_context)); - return ToJsLirRepr::FromJsHirRepr(hir); -} - -// ---------------------------------------------------------------------------- -// AST -> HIR -> LIR -// ----------------------------------------------------------------------------- - -absl::StatusOr ToJsLirRepr::FromJsAstRepr( - const JsFile &ast, const BabelScopes &scopes, - mlir::MLIRContext &mlir_context) { - MALDOCA_ASSIGN_OR_RETURN( - JsHirRepr hir, ToJsHirRepr::FromJsAstRepr(ast, scopes, mlir_context)); - return ToJsLirRepr::FromJsHirRepr(hir); -} - // ============================================================================= // Lifting conversions // ============================================================================= -// ----------------------------------------------------------------------------- -// LIR -> HIR -// ----------------------------------------------------------------------------- - -JsHirRepr ToJsHirRepr::FromJsLirRepr(const JsLirRepr &lir_repr) { - mlir::OwningOpRef hir_op = JslirFileToJshir(lir_repr.op.get()); - return JsHirRepr{std::move(hir_op), lir_repr.scopes}; -} - // ----------------------------------------------------------------------------- // HIR -> AST // ----------------------------------------------------------------------------- @@ -213,39 +155,6 @@ absl::StatusOr ToJsSourceRepr::FromJsAstStringRepr( return JsSourceRepr{std::move(generate_result.source_code)}; } -// ----------------------------------------------------------------------------- -// LIR -> HIR -> AST -// ----------------------------------------------------------------------------- - -absl::StatusOr ToJsAstRepr::FromJsLirRepr( - const JsLirRepr &lir_repr) { - JsHirRepr hir = ToJsHirRepr::FromJsLirRepr(lir_repr); - return ToJsAstRepr::FromJsHirRepr(hir); -} - -// ----------------------------------------------------------------------------- -// LIR -> HIR -> AST -> AST string -// ----------------------------------------------------------------------------- - -absl::StatusOr ToJsAstStringRepr::FromJsLirRepr( - const JsLirRepr &lir_repr) { - MALDOCA_ASSIGN_OR_RETURN(JsAstRepr ast, ToJsAstRepr::FromJsLirRepr(lir_repr)); - return ToJsAstStringRepr::FromJsAstRepr(*ast.ast, ast.scopes); -} - -// ----------------------------------------------------------------------------- -// LIR -> HIR -> AST -> AST string -> Source -// ----------------------------------------------------------------------------- - -absl::StatusOr ToJsSourceRepr::FromJsLirRepr( - const JsLirRepr &lir_repr, BabelGenerateOptions generate_options, - absl::Duration timeout, Babel &babel) { - MALDOCA_ASSIGN_OR_RETURN(JsAstStringRepr ast_string, - ToJsAstStringRepr::FromJsLirRepr(lir_repr)); - return ToJsSourceRepr::FromJsAstStringRepr(ast_string.ast_string, - generate_options, timeout, babel); -} - // ----------------------------------------------------------------------------- // HIR -> AST -> AST string // ----------------------------------------------------------------------------- diff --git a/maldoca/js/driver/conversion.h b/maldoca/js/driver/conversion.h index df9dac9..2c439f5 100644 --- a/maldoca/js/driver/conversion.h +++ b/maldoca/js/driver/conversion.h @@ -50,10 +50,6 @@ struct ToJsSourceRepr { static absl::StatusOr FromJsHirRepr( const JsHirRepr &hir_repr, BabelGenerateOptions generate_options, absl::Duration timeout, Babel &babel); - - static absl::StatusOr FromJsLirRepr( - const JsLirRepr &lir_repr, BabelGenerateOptions generate_options, - absl::Duration timeout, Babel &babel); }; struct ToJsAstStringRepr { @@ -66,9 +62,6 @@ struct ToJsAstStringRepr { static absl::StatusOr FromJsHirRepr( const JsHirRepr &hir_repr); - - static absl::StatusOr FromJsLirRepr( - const JsLirRepr &lir_repr); }; struct ToJsAstRepr { @@ -82,8 +75,6 @@ struct ToJsAstRepr { std::optional recursion_depth_limit); static absl::StatusOr FromJsHirRepr(const JsHirRepr &hir_repr); - - static absl::StatusOr FromJsLirRepr(const JsLirRepr &lir_repr); }; struct ToJsHirRepr { @@ -100,8 +91,6 @@ struct ToJsHirRepr { static absl::StatusOr FromJsAstRepr( const maldoca::JsFile &ast, const BabelScopes &scopes, mlir::MLIRContext &mlir_context); - - static JsHirRepr FromJsLirRepr(const JsLirRepr &lir_repr); }; struct ToJsLirRepr { @@ -118,8 +107,6 @@ struct ToJsLirRepr { static absl::StatusOr FromJsAstRepr( const JsFile &ast, const BabelScopes &scopes, mlir::MLIRContext &mlir_context); - - static JsLirRepr FromJsHirRepr(const JsHirRepr &hir_repr); }; } // namespace maldoca diff --git a/maldoca/js/driver/conversion_test.cc b/maldoca/js/driver/conversion_test.cc index 4f013b7..f02bbc5 100644 --- a/maldoca/js/driver/conversion_test.cc +++ b/maldoca/js/driver/conversion_test.cc @@ -67,13 +67,6 @@ struct TestCase { JsHirRepr hir_repr; std::string hir_dump; - // Expected LIR - // Note: `lir_repr` is not constructed by parsing the golden file. Instead, it - // is constructed by converting the `hir_op` above. This is because the golden - // file does not contain loc information. - JsLirRepr lir_repr; - std::string lir_dump; - BabelAstString lifted_babel_ast_string; }; @@ -131,9 +124,6 @@ absl::StatusOr GetTestCase() { ToJsHirRepr::FromJsAstRepr(*ast, scopes, *mlir_context)); MALDOCA_ASSIGN_OR_RETURN(auto hir_str, load_content("test_hir.mlir.test")); - JsLirRepr lir_repr = ToJsLirRepr::FromJsHirRepr(hir_repr); - MALDOCA_ASSIGN_OR_RETURN(auto lir_str, load_content("test_lir.mlir.test")); - BabelAstString lifted_babel_ast_string; lifted_babel_ast_string.set_value(CompactJsonString(serialized_ast_json_str)); lifted_babel_ast_string.set_string_literals_base64_encoded(false); @@ -154,9 +144,6 @@ absl::StatusOr GetTestCase() { .hir_repr = std::move(hir_repr), .hir_dump = hir_str, - .lir_repr = std::move(lir_repr), - .lir_dump = lir_str, - .lifted_babel_ast_string = std::move(lifted_babel_ast_string), }; } @@ -205,15 +192,6 @@ TEST(ConversionTest, AstToHir) { EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); } -TEST(ConversionTest, HirToLir) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - JsLirRepr repr = ToJsLirRepr::FromJsHirRepr(test_case.hir_repr); - - EXPECT_EQ(mlir::debugString(*repr.op), test_case.lir_dump); - EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); -} - TEST(ConversionTest, SourceToAst) { MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); QuickJsBabel babel; @@ -250,26 +228,6 @@ TEST(ConversionTest, SourceToHir) { EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); } -TEST(ConversionTest, SourceToLir) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - QuickJsBabel babel; - - BabelParseRequest parse_request; - parse_request.set_compute_scopes(true); - - mlir::MLIRContext mlir_context; - LoadNecessaryDialects(mlir_context); - - MALDOCA_ASSERT_OK_AND_ASSIGN( - JsLirRepr repr, - ToJsLirRepr::FromJsSourceRepr( - test_case.source, parse_request, absl::InfiniteDuration(), - /*recursion_depth_limit=*/std::nullopt, babel, mlir_context)); - - EXPECT_EQ(mlir::debugString(*repr.op), test_case.lir_dump); - EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); -} - TEST(ConversionTest, AstStringToHir) { MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); @@ -286,49 +244,10 @@ TEST(ConversionTest, AstStringToHir) { EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); } -TEST(ConversionTest, AstStringToLir) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - mlir::MLIRContext mlir_context; - LoadNecessaryDialects(mlir_context); - - MALDOCA_ASSERT_OK_AND_ASSIGN( - JsLirRepr repr, - ToJsLirRepr::FromJsAstStringRepr(test_case.parsed_babel_ast_string, - /*recursion_depth_limit=*/std::nullopt, - mlir_context)); - - EXPECT_EQ(mlir::debugString(*repr.op), test_case.lir_dump); - EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); -} - -TEST(ConversionTest, AstToLir) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - mlir::MLIRContext mlir_context; - LoadNecessaryDialects(mlir_context); - - MALDOCA_ASSERT_OK_AND_ASSIGN( - JsLirRepr repr, ToJsLirRepr::FromJsAstRepr( - *test_case.ast, test_case.scopes, mlir_context)); - - EXPECT_EQ(mlir::debugString(*repr.op), test_case.lir_dump); - EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); -} - // ============================================================================= // Lifting conversions // ============================================================================= -TEST(ConversionTest, LirToHir) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - JsHirRepr repr = ToJsHirRepr::FromJsLirRepr(test_case.lir_repr); - - EXPECT_EQ(mlir::debugString(*repr.op), test_case.hir_dump); - EXPECT_THAT(repr.scopes, EqualsProto(test_case.scopes)); -} - TEST(ConversionTest, HirToAst) { MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); @@ -364,38 +283,6 @@ TEST(ConversionTest, AstStringToSource) { EXPECT_EQ(repr.source, test_case.source); } -TEST(ConversionTest, LirToAst) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - MALDOCA_ASSERT_OK_AND_ASSIGN(JsAstRepr repr, - ToJsAstRepr::FromJsLirRepr(test_case.lir_repr)); - - CheckAst(repr, test_case); -} - -TEST(ConversionTest, LirToAstString) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - MALDOCA_ASSERT_OK_AND_ASSIGN( - JsAstStringRepr repr, - ToJsAstStringRepr::FromJsLirRepr(test_case.lir_repr)); - - EXPECT_THAT(repr.ast_string, EqualsProto(test_case.lifted_babel_ast_string)); -} - -TEST(ConversionTest, LirToSource) { - MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); - - QuickJsBabel babel; - - MALDOCA_ASSERT_OK_AND_ASSIGN( - JsSourceRepr repr, - ToJsSourceRepr::FromJsLirRepr(test_case.lir_repr, BabelGenerateOptions(), - absl::InfiniteDuration(), babel)); - - EXPECT_EQ(repr.source, test_case.source); -} - TEST(ConversionTest, HirToAstString) { MALDOCA_ASSERT_OK_AND_ASSIGN(TestCase test_case, GetTestCase()); diff --git a/maldoca/js/driver/driver.h b/maldoca/js/driver/driver.h index 9d1adce..6a88b77 100644 --- a/maldoca/js/driver/driver.h +++ b/maldoca/js/driver/driver.h @@ -61,7 +61,7 @@ enum class JsReprKind { kJslir, }; -std::ostream &operator<<(std::ostream &os, JsReprKind kind); +std::ostream& operator<<(std::ostream& os, JsReprKind kind); struct JsRepr { const JsReprKind kind; @@ -76,10 +76,10 @@ struct JsRepr { } static absl::StatusOr> FromProto( - const JsReprPb &proto); + const JsReprPb& proto); template - static absl::StatusOr Cast(JsRepr *repr) { + static absl::StatusOr Cast(JsRepr* repr) { static_assert(std::is_base_of_v, "ReprT must be a subclass of JsRepr"); if (!llvm::isa(repr)) { @@ -90,7 +90,7 @@ struct JsRepr { } template - static absl::StatusOr Cast(const JsRepr *repr) { + static absl::StatusOr Cast(const JsRepr* repr) { static_assert(std::is_base_of_v, "ReprT must be a subclass of JsRepr"); if (!llvm::isa(repr)) { @@ -122,7 +122,7 @@ struct JsSourceRepr : JsRepr { explicit JsSourceRepr(absl::string_view source) : JsRepr(JsReprKind::kJsSource), source(source) {} - static bool classof(const JsRepr *repr) { + static bool classof(const JsRepr* repr) { return repr->kind == JsReprKind::kJsSource; } @@ -137,7 +137,7 @@ struct JsAstStringRepr : JsRepr { explicit JsAstStringRepr(BabelAstString ast_string) : JsRepr(JsReprKind::kAstString), ast_string(std::move(ast_string)) {} - static bool classof(const JsRepr *repr) { + static bool classof(const JsRepr* repr) { return repr->kind == JsReprKind::kAstString; } @@ -155,7 +155,7 @@ struct JsAstRepr : JsRepr { ast(std::move(ast)), scopes(std::move(scopes)) {} - static bool classof(const JsRepr *repr) { + static bool classof(const JsRepr* repr) { return repr->kind == JsReprKind::kAst; } @@ -172,7 +172,7 @@ struct JsirRepr : JsRepr { mlir::OwningOpRef op; BabelScopes scopes; - static bool classof(const JsRepr *repr) { + static bool classof(const JsRepr* repr) { return repr->kind == JsReprKind::kJshir || repr->kind == JsReprKind::kJslir; } @@ -188,7 +188,7 @@ struct JsHirRepr : JsirRepr { explicit JsHirRepr(mlir::OwningOpRef op, BabelScopes scopes) : JsirRepr(JsReprKind::kJshir, std::move(op), std::move(scopes)) {} - static bool classof(const JsRepr *repr) { + static bool classof(const JsRepr* repr) { return repr->kind == JsReprKind::kJshir; } @@ -199,7 +199,7 @@ struct JsLirRepr : JsirRepr { explicit JsLirRepr(mlir::OwningOpRef op, BabelScopes scopes) : JsirRepr(JsReprKind::kJslir, std::move(op), std::move(scopes)) {} - static bool classof(const JsRepr *repr) { + static bool classof(const JsRepr* repr) { return repr->kind == JsReprKind::kJslir; } @@ -219,27 +219,27 @@ struct JsPassContext { class JsPass { public: virtual ~JsPass() = default; - virtual absl::Status Run(JsPassContext &context) = 0; + virtual absl::Status Run(JsPassContext& context) = 0; virtual std::string name() const = 0; static absl::StatusOr> Create( - const JsPassConfig &config, Babel *absl_nullable babel, - mlir::MLIRContext *absl_nullable mlir_context); + const JsPassConfig& config, Babel* absl_nullable babel, + mlir::MLIRContext* absl_nullable mlir_context); }; // ============================================================================= // RunPasses // ============================================================================= -absl::Status RunPasses(const JsPassConfigs &pass_configs, - JsPassContext &context, Babel *absl_nullable babel, - mlir::MLIRContext *absl_nullable mlir_context); +absl::Status RunPasses(const JsPassConfigs& pass_configs, + JsPassContext& context, Babel* absl_nullable babel, + mlir::MLIRContext* absl_nullable mlir_context); absl::Status RunPasses(absl::Span> passes, - JsPassContext &context); + JsPassContext& context); -bool PassRequiresBabel(const JsPassConfig &pass); +bool PassRequiresBabel(const JsPassConfig& pass); class JsPassRunner { public: @@ -251,21 +251,21 @@ class JsPassRunner { }; virtual absl::StatusOr Run(absl::string_view original_source, - const JsReprPb &input_repr_pb, - const JsPassConfigs &passes) = 0; + const JsReprPb& input_repr_pb, + const JsPassConfigs& passes) = 0; }; class UnsandboxedJsPassRunner : public JsPassRunner { public: - explicit UnsandboxedJsPassRunner(Babel *absl_nullable babel) + explicit UnsandboxedJsPassRunner(Babel* absl_nullable babel) : babel_(babel) {} absl::StatusOr Run(absl::string_view original_source, - const JsReprPb &input_repr_pb, - const JsPassConfigs &passes) override; + const JsReprPb& input_repr_pb, + const JsPassConfigs& passes) override; private: - Babel *absl_nullable babel_; + Babel* absl_nullable babel_; }; // ============================================================================= @@ -282,11 +282,11 @@ class UnsandboxedJsPassRunner : public JsPassRunner { class JsAnalysis : public JsPass { public: virtual absl::Status Analyze(std::optional original_source, - const JsRepr &repr, - JsAnalysisOutputs &output) = 0; + const JsRepr& repr, + JsAnalysisOutputs& output) = 0; protected: - absl::Status Run(JsPassContext &context) override { + absl::Status Run(JsPassContext& context) override { return Analyze(context.original_source, *context.repr, context.outputs); } }; @@ -298,14 +298,14 @@ class JsAnalysisTmpl : public JsAnalysis { public: virtual absl::Status Analyze(std::optional original_source, - const ReprT &repr, - JsAnalysisOutputs &outputs) = 0; + const ReprT& repr, + JsAnalysisOutputs& outputs) = 0; protected: absl::Status Analyze(std::optional original_source, - const JsRepr &repr, - JsAnalysisOutputs &outputs) override { - MALDOCA_ASSIGN_OR_RETURN(const ReprT *repr_cast, + const JsRepr& repr, + JsAnalysisOutputs& outputs) override { + MALDOCA_ASSIGN_OR_RETURN(const ReprT* repr_cast, JsRepr::Cast(&repr)); return Analyze(original_source, *repr_cast, outputs); } @@ -313,7 +313,7 @@ class JsAnalysisTmpl : public JsAnalysis { class JsirAnalysis : public JsAnalysisTmpl { public: - explicit JsirAnalysis(JsirAnalysisConfig config, Babel *absl_nullable babel) + explicit JsirAnalysis(JsirAnalysisConfig config, Babel* absl_nullable babel) : config_(std::move(config)), babel_(babel) {} std::string name() const override { @@ -321,18 +321,18 @@ class JsirAnalysis : public JsAnalysisTmpl { } absl::Status Analyze(std::optional original_source, - const JsirRepr &repr, - JsAnalysisOutputs &outputs) override { - MALDOCA_ASSIGN_OR_RETURN( - JsirAnalysisResult result, - RunJsirAnalysis(*repr.op, repr.scopes, config_, babel_)); + const JsirRepr& repr, + JsAnalysisOutputs& outputs) override { + MALDOCA_ASSIGN_OR_RETURN(JsirAnalysisResult result, + RunJsirAnalysis(*repr.op, original_source, + repr.scopes, config_, babel_)); *outputs.add_outputs()->mutable_jsir_analysis() = std::move(result); return absl::OkStatus(); } private: JsirAnalysisConfig config_; - Babel *absl_nullable babel_; + Babel* absl_nullable babel_; }; // ============================================================================= @@ -342,11 +342,11 @@ class JsirAnalysis : public JsAnalysisTmpl { class JsTransform : public JsPass { public: virtual absl::Status Transform( - std::optional original_source, JsRepr &repr, - JsAnalysisOutputs &outputs) = 0; + std::optional original_source, JsRepr& repr, + JsAnalysisOutputs& outputs) = 0; protected: - absl::Status Run(JsPassContext &context) override { + absl::Status Run(JsPassContext& context) override { return Transform(context.original_source, *context.repr, context.outputs); } }; @@ -358,12 +358,12 @@ class JsTransformTmpl : public JsTransform { public: virtual absl::Status Transform( - std::optional original_source, ReprT &repr, - JsAnalysisOutputs &outputs) = 0; + std::optional original_source, ReprT& repr, + JsAnalysisOutputs& outputs) = 0; protected: absl::Status Transform(std::optional original_source, - JsRepr &repr, JsAnalysisOutputs &outputs) override { + JsRepr& repr, JsAnalysisOutputs& outputs) override { MALDOCA_ASSIGN_OR_RETURN(ReprT * repr_cast, JsRepr::Cast(&repr)); return Transform(original_source, *repr_cast, outputs); } @@ -379,7 +379,7 @@ class JsAstTransform : public JsTransformTmpl { } absl::Status Transform(std::optional original_source, - JsAstRepr &repr, JsAnalysisOutputs &outputs) override { + JsAstRepr& repr, JsAnalysisOutputs& outputs) override { std::optional optional_analysis_result; MALDOCA_RETURN_IF_ERROR(TransformJsAst(original_source, repr.scopes, config_, *repr.ast, @@ -396,7 +396,7 @@ class JsAstTransform : public JsTransformTmpl { class JsirTransform : public JsTransformTmpl { public: - explicit JsirTransform(JsirTransformConfig config, Babel *absl_nullable babel) + explicit JsirTransform(JsirTransformConfig config, Babel* absl_nullable babel) : config_(std::move(config)), babel_(babel) {} std::string name() const override { @@ -405,12 +405,12 @@ class JsirTransform : public JsTransformTmpl { private: absl::Status Transform(std::optional original_source, - JsirRepr &repr, JsAnalysisOutputs &outputs) override { + JsirRepr& repr, JsAnalysisOutputs& outputs) override { return TransformJsir(*repr.op, repr.scopes, config_, babel_, &outputs); } JsirTransformConfig config_; - Babel *absl_nullable babel_; + Babel* absl_nullable babel_; }; } // namespace maldoca diff --git a/maldoca/js/driver/driver.proto b/maldoca/js/driver/driver.proto index 072c2f4..0e8e061 100644 --- a/maldoca/js/driver/driver.proto +++ b/maldoca/js/driver/driver.proto @@ -34,27 +34,6 @@ message JsReprPb { } } -// ============================================================================= -// JsPassConfig -// ============================================================================= - -message JsPassConfig { - oneof kind { - JsConversionConfig conversion = 1; - - // Analysis - JsirAnalysisConfig jsir_analysis = 3; - - // Transform - JsAstTransformConfig ast_transform = 4; - JsirTransformConfig jsir_transform = 5; - } -} - -message JsPassConfigs { - repeated JsPassConfig passes = 1; -} - // ============================================================================= // JsConversionConfig // ============================================================================= @@ -72,10 +51,6 @@ message JsConversionConfig { // ast <=> hir JsAstToHirConfig js_ast_to_hir = 5; JsHirToAstConfig js_hir_to_ast = 6; - - // hir <=> lir - JsHirToLirConfig js_hir_to_lir = 7; - JsLirToHirConfig js_lir_to_hir = 8; } } @@ -107,14 +82,6 @@ message JsLirToHirConfig {} // Analysis // ============================================================================= -message JsAstAnalysisResult { - - oneof kind { - // Added by JsAstTransformConfig.ExtractPrelude - JsirAnalysisConfig.DynamicConstantPropagation extract_prelude = 2; - } -} - message JsirAnalysisConfig { reserved 3, 4; @@ -160,9 +127,21 @@ message JsirAnalysisConfig { } } +message JsAstAnalysisResult { + + oneof kind { + // Added by JsAstTransformConfig.ExtractPrelude + JsirAnalysisConfig.DynamicConstantPropagation extract_prelude = 2; + } +} + message JsirAnalysisResult { reserved 3, 4; + message DataFlow { + optional string output = 1; + } + oneof kind { DataFlow constant_propagation = 5; @@ -186,10 +165,6 @@ message JsirAnalysisResult { } repeated ComputedConstant computed_constants = 3; } - - message DataFlow { - optional string output = 1; - } } message JsAnalysisOutput { @@ -214,7 +189,11 @@ message JsAstTransformConfig { } message EraseComments {} - message ExtractPrelude {} + + message ExtractPrelude { + // The indices of the top-level statements to extract. + repeated int64 prelude_indices = 1; + } } message JsirTransformConfig { @@ -244,3 +223,24 @@ message JsirTransformConfig { message SplitDeclarationStatements {} } + +// ============================================================================= +// JsPassConfig +// ============================================================================= + +message JsPassConfig { + oneof kind { + JsConversionConfig conversion = 1; + + // Analysis + JsirAnalysisConfig jsir_analysis = 3; + + // Transform + JsAstTransformConfig ast_transform = 4; + JsirTransformConfig jsir_transform = 5; + } +} + +message JsPassConfigs { + repeated JsPassConfig passes = 1; +} diff --git a/maldoca/js/driver/internal/conversions.cc b/maldoca/js/driver/internal/conversions.cc index f04750d..b47998b 100644 --- a/maldoca/js/driver/internal/conversions.cc +++ b/maldoca/js/driver/internal/conversions.cc @@ -80,14 +80,6 @@ absl::StatusOr> JsConversion::Create( case JsConversionConfig::KindCase::kJsHirToAst: { return std::make_unique(); } - - case JsConversionConfig::KindCase::kJsHirToLir: { - return std::make_unique(); - } - - case JsConversionConfig::KindCase::kJsLirToHir: { - return std::make_unique(); - } } } @@ -187,24 +179,4 @@ absl::StatusOr> JsHirToAst::Convert( return std::make_unique(std::move(ast), from.scopes); } -// ============================================================================= -// JsHirToLir -// ============================================================================= - -absl::StatusOr> JsHirToLir::Convert( - const JsHirRepr &from) { - auto op = JshirFileToJslir(*from.op); - return std::make_unique(std::move(op), from.scopes); -} - -// ============================================================================= -// JsLirToHir -// ============================================================================= - -absl::StatusOr> JsLirToHir::Convert( - const JsLirRepr &from) { - auto op = JslirFileToJshir(*from.op); - return std::make_unique(std::move(op), from.scopes); -} - } // namespace maldoca diff --git a/maldoca/js/driver/internal/conversions.h b/maldoca/js/driver/internal/conversions.h index f4be64a..08da29a 100644 --- a/maldoca/js/driver/internal/conversions.h +++ b/maldoca/js/driver/internal/conversions.h @@ -208,42 +208,6 @@ class JsHirToAst final : public JsConversionTmpl { const JsHirRepr &from) override; }; -// +------+-------------------------------+-------------------------------+ -// | | Type | Representation | -// +------+-------------------------------+-------------------------------+ -// | From | mlir::OwningOpRef | JavaScript high-level IR | -// +------+-------------------------------+-------------------------------+ -// | To | mlir::OwningOpRef | JavaScript low-level IR | -// +------+-------------------------------+-------------------------------+ -class JsHirToLir final : public JsConversionTmpl { - public: - explicit JsHirToLir() = default; - - std::string name() const override { return "JsHirToLir"; } - - private: - absl::StatusOr> Convert( - const JsHirRepr &from) override; -}; - -// +------+-------------------------------+-------------------------------+ -// | | Type | Representation | -// +------+-------------------------------+-------------------------------+ -// | From | mlir::OwningOpRef | JavaScript low-level IR | -// +------+-------------------------------+-------------------------------+ -// | To | mlir::OwningOpRef | JavaScript high-level IR | -// +------+-------------------------------+-------------------------------+ -class JsLirToHir final : public JsConversionTmpl { - public: - explicit JsLirToHir() = default; - - std::string name() const override { return "JsLirToHir"; } - - private: - absl::StatusOr> Convert( - const JsLirRepr &from) override; -}; - } // namespace maldoca #endif // MALDOCA_JS_DRIVER_INTERNAL_CONVERSIONS_H_ diff --git a/maldoca/js/driver/test_lir.mlir.test b/maldoca/js/driver/test_lir.mlir.test deleted file mode 100644 index 21c4dba..0000000 --- a/maldoca/js/driver/test_lir.mlir.test +++ /dev/null @@ -1,12 +0,0 @@ -"jsir.file"() <{comments = []}> ({ - "jsir.program"() <{source_type = "script"}> ({ - "jsir.variable_declaration"() <{kind = "var"}> ({ - %0 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any - %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any - %2 = "jsir.variable_declarator"(%0, %1) : (!jsir.any, !jsir.any) -> !jsir.any - "jsir.exprs_region_end"(%2) : (!jsir.any) -> () - }) : () -> () - }, { - ^bb0: - }) : () -> () -}) : () -> () \ No newline at end of file diff --git a/maldoca/js/ir/BUILD b/maldoca/js/ir/BUILD index dbc2321..850a402 100644 --- a/maldoca/js/ir/BUILD +++ b/maldoca/js/ir/BUILD @@ -100,20 +100,6 @@ gentbl_cc_library( ], "jshir_dialect.cc.inc", ), - ( - [ - "-gen-dialect-decls", - "-dialect=jslir", - ], - "jslir_dialect.h.inc", - ), - ( - [ - "-gen-dialect-defs", - "-dialect=jslir", - ], - "jslir_dialect.cc.inc", - ), ], tblgen = "@llvm-project//mlir:mlir-tblgen", td_file = "jsir_attrs.td", @@ -246,20 +232,6 @@ gentbl_cc_library( ], "jshir_ops.cc.inc", ), - ( - [ - "-gen-op-decls", - "-op-include-regex=jslir", - ], - "jslir_ops.h.inc", - ), - ( - [ - "-gen-op-defs", - "-op-include-regex=jslir", - ], - "jslir_ops.cc.inc", - ), ], tblgen = "@llvm-project//mlir:mlir-tblgen", td_file = "jsir_ops.td", @@ -274,7 +246,6 @@ cc_library( "ir.cc", "jshir_ops.cc", "jsir_ops.cc", - "jslir_ops.cc", ], hdrs = ["ir.h"], deps = [ @@ -343,16 +314,6 @@ cc_library( ], ) -cc_library( - name = "jslir_visitor", - hdrs = ["jslir_visitor.h"], - deps = [ - ":ir", - "@llvm-project//llvm:Support", - "@llvm-project//mlir:IR", - ], -) - cc_library( name = "jsir_gen_lib", srcs = ["jsir_gen_lib.cc"], diff --git a/maldoca/js/ir/analyses/BUILD b/maldoca/js/ir/analyses/BUILD index d49decc..9ec95c9 100644 --- a/maldoca/js/ir/analyses/BUILD +++ b/maldoca/js/ir/analyses/BUILD @@ -42,6 +42,7 @@ cc_library( "@abseil-cpp//absl/container:flat_hash_map", "@abseil-cpp//absl/status", "@abseil-cpp//absl/status:statusor", + "@abseil-cpp//absl/strings:string_view", "@llvm-project//llvm:Support", "@llvm-project//mlir:Analysis", "@llvm-project//mlir:IR", diff --git a/maldoca/js/ir/analyses/analysis.cc b/maldoca/js/ir/analyses/analysis.cc index bb8596d..5c2eabd 100644 --- a/maldoca/js/ir/analyses/analysis.cc +++ b/maldoca/js/ir/analyses/analysis.cc @@ -14,6 +14,7 @@ #include "maldoca/js/ir/analyses/analysis.h" +#include #include #include #include @@ -29,6 +30,7 @@ #include "absl/container/flat_hash_map.h" #include "absl/status/status.h" #include "absl/status/statusor.h" +#include "absl/strings/string_view.h" #include "maldoca/base/ret_check.h" #include "maldoca/base/status_macros.h" #include "maldoca/js/ast/ast.generated.h" @@ -42,13 +44,13 @@ namespace maldoca { template static absl::StatusOr RunJsirDataFlowAnalysis( - mlir::Operation *op, Args &&...args) { + mlir::Operation* op, Args&&... args) { static_assert(std::is_base_of_v, "The analysis must inherit JsirDataFlowAnalysisPrinter."); mlir::DataFlowSolver solver; - JsirDataFlowAnalysisPrinter *analysis = + JsirDataFlowAnalysisPrinter* analysis = solver.load(std::forward(args)...); mlir::LogicalResult mlir_result = solver.initializeAndRun(op); @@ -60,8 +62,9 @@ static absl::StatusOr RunJsirDataFlowAnalysis( } absl::StatusOr RunJsirAnalysis( - JsirFileOp op, const BabelScopes &scopes, const JsirAnalysisConfig &config, - Babel *absl_nullable babel) { + JsirFileOp op, std::optional source_code, + const BabelScopes& scopes, const JsirAnalysisConfig& config, + Babel* absl_nullable babel) { switch (config.kind_case()) { case JsirAnalysisConfig::KIND_NOT_SET: { return absl::InvalidArgumentError("JsAnalysisConfig kind not set"); diff --git a/maldoca/js/ir/analyses/analysis.h b/maldoca/js/ir/analyses/analysis.h index bde540b..3456867 100644 --- a/maldoca/js/ir/analyses/analysis.h +++ b/maldoca/js/ir/analyses/analysis.h @@ -25,8 +25,9 @@ namespace maldoca { absl::StatusOr RunJsirAnalysis( - JsirFileOp op, const BabelScopes &scopes, const JsirAnalysisConfig &config, - Babel *absl_nullable babel); + JsirFileOp op, std::optional source_code, + const BabelScopes& scopes, const JsirAnalysisConfig& config, + Babel* absl_nullable babel); } // namespace maldoca diff --git a/maldoca/js/ir/analyses/constant_propagation/BUILD b/maldoca/js/ir/analyses/constant_propagation/BUILD index 00edcfc..c7c4880 100644 --- a/maldoca/js/ir/analyses/constant_propagation/BUILD +++ b/maldoca/js/ir/analyses/constant_propagation/BUILD @@ -1,4 +1,4 @@ -# Copyright 2024 Google LLC +# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -37,10 +37,12 @@ cc_library( "//maldoca/js/ir/analyses:per_var_state", "//maldoca/js/ir/analyses:scope", "//maldoca/js/ir/analyses:state", + "//maldoca/js/quickjs", "@llvm-project//llvm:Support", "@llvm-project//mlir:Analysis", "@llvm-project//mlir:IR", "@llvm-project//mlir:Support", + "@quickjs//:libquickjs", ], ) diff --git a/maldoca/js/ir/analyses/constant_propagation/analysis.cc b/maldoca/js/ir/analyses/constant_propagation/analysis.cc index 948891d..586ab3b 100644 --- a/maldoca/js/ir/analyses/constant_propagation/analysis.cc +++ b/maldoca/js/ir/analyses/constant_propagation/analysis.cc @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,9 @@ #include "maldoca/js/ir/analyses/constant_propagation/analysis.h" #include +#include #include +#include #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" @@ -36,6 +38,8 @@ #include "maldoca/js/ir/analyses/dataflow_analysis.h" #include "maldoca/js/ir/analyses/scope.h" #include "maldoca/js/ir/ir.h" +#include "maldoca/js/quickjs/quickjs.h" +#include "quickjs/quickjs.h" namespace maldoca { @@ -270,32 +274,68 @@ bool JsirConstantPropagationAnalysis::IsCfgEdgeExecutable( return true; } - auto [lhs_value, rhs, liveness_kind] = edge->getLivenessInfo().value(); - auto lhs_state_ref = GetStateAt(lhs_value); - if (lhs_state_ref.value().IsUninitialized()) { - return false; - } else if (lhs_state_ref.value().IsUnknown()) { - return true; - } + auto [liveness_kind, liveness_values] = edge->getLivenessInfo().value(); + + std::unique_ptr qjs_runtime{JS_NewRuntime()}; + std::unique_ptr qjs_context{ + JS_NewContext(qjs_runtime.get())}; + + std::vector> qjs_values; + for (auto arg : liveness_values) { + std::optional opt_attr; + if (arg.isNull()) { + // Do nothing. + } else if (auto attr = llvm::dyn_cast(arg)) { + opt_attr = attr; + } else if (auto value = llvm::dyn_cast(arg)) { + JsirConstantPropagationValue const_prop_value = GetStateAt(value).value(); + if (const_prop_value.IsUninitialized()) { + return false; + } else if (const_prop_value.IsUnknown()) { + return true; + } + opt_attr = *const_prop_value; + } - if (auto rhs_attr = llvm::dyn_cast(rhs); - rhs_attr != nullptr) { - switch (liveness_kind) { - case LivenessKind::kLiveIfEqualOrUnknown: - return *lhs_state_ref.value() == rhs_attr; - case LivenessKind::kLiveIfNotEqualOrUnknown: - return *lhs_state_ref.value() != rhs_attr; + std::optional qjs_value; + if (opt_attr.has_value()) { + qjs_value = + MlirAttributeToQuickJsValue(qjs_context.get(), opt_attr.value()); } + qjs_values.push_back(qjs_value); } - auto rhs_value = llvm::dyn_cast(rhs); - auto rhs_state_ref = GetStateAt(rhs_value); - std::optional rhs_attr = *rhs_state_ref.value(); switch (liveness_kind) { - case LivenessKind::kLiveIfEqualOrUnknown: - return *lhs_state_ref.value() == rhs_attr; - case LivenessKind::kLiveIfNotEqualOrUnknown: - return *lhs_state_ref.value() != rhs_attr; + case LivenessKind::kLiveIfTruthyOrUnknown: { + if (qjs_values.size() != 1 || !qjs_values[0].has_value()) { + return true; + } + return JS_ToBool(qjs_context.get(), qjs_values[0].value().get()); + } + case LivenessKind::kLiveIfFalsyOrUnknown: { + if (qjs_values.size() != 1 || !qjs_values[0].has_value()) { + return true; + } + return !JS_ToBool(qjs_context.get(), qjs_values[0].value().get()); + } + case LivenessKind::kLiveIfEqualOrUnknown: { + if (qjs_values.size() != 2 || !qjs_values[0].has_value() || + !qjs_values[1].has_value()) { + return true; + } + auto result = EmulateBinOp(qjs_context.get(), "==", qjs_values[0].value(), + qjs_values[1].value()); + return JS_ToBool(qjs_context.get(), result.get()); + } + case LivenessKind::kLiveIfNotEqualOrUnknown: { + if (qjs_values.size() != 2 || !qjs_values[0].has_value() || + !qjs_values[1].has_value()) { + return true; + } + auto result = EmulateBinOp(qjs_context.get(), "!=", qjs_values[0].value(), + qjs_values[1].value()); + return JS_ToBool(qjs_context.get(), result.get()); + } } } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/and/README.generated.md index 2751fc5..58220b3 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/and/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/and/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/and/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/and/output.generated.txt index 2e0ae85..8dda793 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/and/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/and/output.generated.txt @@ -1,318 +1,254 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %37 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %38 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %39 = "jslir.logical_expression_start"(%38) <{operator_ = "&&"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %40 = "builtin.unrealized_conversion_cast"(%38) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%40, %38)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%39) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %41 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%41)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%42: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%39) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %43 = "jsir.variable_declarator"(%37, %42) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%43) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %30 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %31 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %32 = "jslir.logical_expression_start"(%31) <{operator_ = "&&"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %33 = "builtin.unrealized_conversion_cast"(%31) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%33, %31)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%32) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %34 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%34)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%35: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%32) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %36 = "jsir.variable_declarator"(%30, %35) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%36) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %23 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %24 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %25 = "jslir.logical_expression_start"(%24) <{operator_ = "&&"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %26 = "builtin.unrealized_conversion_cast"(%24) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%26, %24)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%25) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %27 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%27)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%28: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%25) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %29 = "jsir.variable_declarator"(%23, %28) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%29) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jslir.logical_expression_start"(%17) <{operator_ = "&&"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %19 = "builtin.unrealized_conversion_cast"(%17) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%19, %17)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%18) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%20)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%21: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%18) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %22 = "jsir.variable_declarator"(%16, %21) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%22) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 93, 96, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 109, 112, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 125, 128, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 141, 144, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %37 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %37 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %38 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %38 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %39 = jslir.logical_expression_start (%38) {"&&"} -// JSLIR-NEXT: // %39 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %40 = builtin.unrealized_conversion_cast (%38) -// JSLIR-NEXT: // %40 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%40, %38) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%39) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %41 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %41 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%41) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%39) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %43 = jsir.variable_declarator (%37, %42) -// JSLIR-NEXT: // %43 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%43) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %30 = jsir.identifier_ref {"b"} -// JSLIR-NEXT: // %30 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %31 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %31 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %32 = jslir.logical_expression_start (%31) {"&&"} -// JSLIR-NEXT: // %32 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %33 = builtin.unrealized_conversion_cast (%31) -// JSLIR-NEXT: // %33 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%33, %31) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%32) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %34 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %34 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%34) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%32) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %36 = jsir.variable_declarator (%30, %35) -// JSLIR-NEXT: // %36 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%36) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %23 = jsir.identifier_ref {"c"} -// JSLIR-NEXT: // %23 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.identifier {"x"} -// JSLIR-NEXT: // %24 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jslir.logical_expression_start (%24) {"&&"} -// JSLIR-NEXT: // %25 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %26 = builtin.unrealized_conversion_cast (%24) -// JSLIR-NEXT: // %26 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%26, %24) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%25) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %27 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%27) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%25) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %29 = jsir.variable_declarator (%23, %28) -// JSLIR-NEXT: // %29 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%29) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.identifier_ref {"d"} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier {"x"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jslir.logical_expression_start (%17) {"&&"} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = builtin.unrealized_conversion_cast (%17) -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%19, %17) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%18) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %20 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%20) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%18) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.variable_declarator (%16, %21) -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%22) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"console"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 93, 96, 0, "log">} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier {"a"} -// JSLIR-NEXT: // %2 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier {"console"} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 109, 112, 0, "log">} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier {"b"} -// JSLIR-NEXT: // %6 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"console"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 125, 128, 0, "log">} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier {"c"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.identifier {"console"} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 141, 144, 0, "log">} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.identifier {"d"} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.call_expression (%13, %14) -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%15) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 93, 96, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 109, 112, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 125, 128, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () +// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 141, 144, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %17 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %20 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"b"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %17 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %20 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"c"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.identifier {"x"} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %20 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"d"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.identifier {"x"} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %20 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 93, 96, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"a"} +// JSHIR-NEXT: // %2 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"console"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 109, 112, 0, "log">} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"b"} +// JSHIR-NEXT: // %6 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"console"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 125, 128, 0, "log">} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier {"c"} +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%11) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier {"console"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 141, 144, 0, "log">} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.identifier {"d"} +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.call_expression (%13, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/and/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/and/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/and/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/input.js deleted file mode 100644 index 73cdb43..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/input.js +++ /dev/null @@ -1,8 +0,0 @@ -var a = false && true; -var b = true && false; -var c = x && true; -var d = x && false; -console.log(a); -console.log(b); -console.log(c); -console.log(d); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/output.generated.txt deleted file mode 100644 index 8dda793..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/output.generated.txt +++ /dev/null @@ -1,254 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "&&"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 93, 96, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 109, 112, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 125, 128, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 141, 144, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %17 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %20 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"b"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %17 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %20 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"c"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.identifier {"x"} -// JSHIR-NEXT: // %17 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %20 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"d"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.identifier {"x"} -// JSHIR-NEXT: // %17 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"&&"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %20 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 93, 96, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"a"} -// JSHIR-NEXT: // %2 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"console"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 109, 112, 0, "log">} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"b"} -// JSHIR-NEXT: // %6 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"console"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 125, 128, 0, "log">} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.identifier {"c"} -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%11) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier {"console"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 141, 144, 0, "log">} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jsir.identifier {"d"} -// JSHIR-NEXT: // %14 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.call_expression (%13, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/break/README.generated.md index 6ed3641..5e7bd68 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/break/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/break/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/break/output.generated.txt index 0c9433f..611b049 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/break/output.generated.txt @@ -1,144 +1,116 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %11 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.variable_declarator"(%11, %12) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%13) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // 2 preds: ^bb0, ^bb3 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "builtin.unrealized_conversion_cast"(%1) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%2)[^bb2, ^bb4] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %3 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%3) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%3) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.break_statement"() : () -> () -// JSLIR-NEXT: "cf.br"()[^bb4] : () -> () -// JSLIR-NEXT: ^bb3: // no predecessors -// JSLIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%3) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb4: // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %7 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.member_expression"(%7) <{literal_property = #jsir, , "log", 54, 57, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.call_expression"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%10) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSLIR-NEXT: // %12 = 3.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.variable_declarator (%11, %12) -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%13) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %1 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = builtin.unrealized_conversion_cast (%1) -// JSLIR-NEXT: // %2 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%2) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%3) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%3) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.break_statement -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%6) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%3) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb4: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.identifier {"console"} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.member_expression (%7) {#jsir, , "log", 54, 57, 0, "log">} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier {"x"} -// JSLIR-NEXT: // %9 = 3.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.call_expression (%8, %9) -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%10) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.while_statement"() ({ +// JSHIR-NEXT: %4 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: "jshir.break_statement"() : () -> () +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 54, 57, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.while_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %4 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.break_statement +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 54, 57, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"x"} +// JSHIR-NEXT: // %2 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/break/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/break/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/README.generated.md deleted file mode 100644 index 2f79ff0..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/input.js deleted file mode 100644 index b481272..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/input.js +++ /dev/null @@ -1,6 +0,0 @@ -var x = 3; -while (true) { - break; - x = 2; -} -console.log(x); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/output.generated.txt deleted file mode 100644 index 611b049..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/output.generated.txt +++ /dev/null @@ -1,116 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.while_statement"() ({ -// JSHIR-NEXT: %4 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: "jshir.break_statement"() : () -> () -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 54, 57, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 3.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.while_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %4 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.break_statement -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 54, 57, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"x"} -// JSHIR-NEXT: // %2 = 3.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/break_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/conditional/README.generated.md index 2585dc9..c0701db 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/conditional/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/conditional/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/conditional/output.generated.txt index 613f9e4..f96d1a0 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/conditional/output.generated.txt @@ -1,286 +1,232 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %28 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %29 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %30 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: %31 = "builtin.unrealized_conversion_cast"(%29) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%31)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%30) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %32 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%32)[^bb3] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%30) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %33 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%33)[^bb3] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb3(%34: !jsir.any): // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%30) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %35 = "jsir.variable_declarator"(%28, %34) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%35) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %20 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %21 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %22 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: %23 = "builtin.unrealized_conversion_cast"(%21) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%23)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%22) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %24 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%24)[^bb3] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%22) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %25 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%25)[^bb3] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb3(%26: !jsir.any): // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%22) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %27 = "jsir.variable_declarator"(%20, %26) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%27) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %14 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "builtin.unrealized_conversion_cast"(%13) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%15)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%14) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 6.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%16)[^bb3] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%14) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %17 = "jsir.numeric_literal"() <{extra = #jsir, value = 5.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%17)[^bb3] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb3(%18: !jsir.any): // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%14) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %19 = "jsir.variable_declarator"(%12, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 72, 75, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 88, 91, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 104, 107, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %28 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %28 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %29 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %29 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %30 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %30 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %31 = builtin.unrealized_conversion_cast (%29) -// JSLIR-NEXT: // %31 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%31) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%30) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %32 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %32 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%32) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%30) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %33 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %33 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%33) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%30) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %35 = jsir.variable_declarator (%28, %34) -// JSLIR-NEXT: // %35 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%35) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.identifier_ref {"b"} -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %21 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %23 = builtin.unrealized_conversion_cast (%21) -// JSLIR-NEXT: // %23 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%23) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%22) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSLIR-NEXT: // %24 = 4.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%24) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%22) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSLIR-NEXT: // %25 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%25) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%22) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jsir.variable_declarator (%20, %26) -// JSLIR-NEXT: // %27 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%27) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.identifier_ref {"c"} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.identifier {"x"} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = builtin.unrealized_conversion_cast (%13) -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%15) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%14) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.numeric_literal {#jsir, 6.000000e+00 : f64} -// JSLIR-NEXT: // %16 = 6.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%16) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%14) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.numeric_literal {#jsir, 5.000000e+00 : f64} -// JSLIR-NEXT: // %17 = 5.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%17) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%14) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.variable_declarator (%12, %18) -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%19) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"console"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 72, 75, 0, "log">} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier {"a"} -// JSLIR-NEXT: // %2 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier {"console"} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 88, 91, 0, "log">} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier {"b"} -// JSLIR-NEXT: // %6 = 4.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"console"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 104, 107, 0, "log">} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier {"c"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: %14 = "jshir.conditional_expression"(%13) ({ +// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%12, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %14 = "jshir.conditional_expression"(%13) ({ +// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%12, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %14 = "jshir.conditional_expression"(%13) ({ +// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 6.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 5.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%12, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 72, 75, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 88, 91, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 104, 107, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %13 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jshir.conditional_expression (%13) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%16) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %16 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%16) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %14 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.variable_declarator (%12, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier_ref {"b"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %13 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jshir.conditional_expression (%13) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} +// JSHIR-NEXT: // %16 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%16) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%16) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %14 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.variable_declarator (%12, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier_ref {"c"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.identifier {"x"} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jshir.conditional_expression (%13) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 6.000000e+00 : f64} +// JSHIR-NEXT: // %16 = 6.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%16) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 5.000000e+00 : f64} +// JSHIR-NEXT: // %16 = 5.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%16) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.variable_declarator (%12, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 72, 75, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"a"} +// JSHIR-NEXT: // %2 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"console"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 88, 91, 0, "log">} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"b"} +// JSHIR-NEXT: // %6 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"console"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 104, 107, 0, "log">} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier {"c"} +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%11) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/conditional/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/conditional/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/README.generated.md deleted file mode 100644 index 90c0fc1..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/input.js deleted file mode 100644 index d6c9d58..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/input.js +++ /dev/null @@ -1,6 +0,0 @@ -var a = true ? 1 : 2; -var b = false ? 3 : 4; -var c = x ? 5 : 6; -console.log(a); -console.log(b); -console.log(c); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/output.generated.txt deleted file mode 100644 index f96d1a0..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/output.generated.txt +++ /dev/null @@ -1,232 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: %14 = "jshir.conditional_expression"(%13) ({ -// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%12, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: %14 = "jshir.conditional_expression"(%13) ({ -// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%12, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %14 = "jshir.conditional_expression"(%13) ({ -// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 6.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 5.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%16) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%12, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 72, 75, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 88, 91, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 104, 107, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %13 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jshir.conditional_expression (%13) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%16) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %16 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%16) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %14 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.variable_declarator (%12, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier_ref {"b"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %13 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jshir.conditional_expression (%13) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSHIR-NEXT: // %16 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%16) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%16) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %14 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.variable_declarator (%12, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier_ref {"c"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.identifier {"x"} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jshir.conditional_expression (%13) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 6.000000e+00 : f64} -// JSHIR-NEXT: // %16 = 6.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%16) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.numeric_literal {#jsir, 5.000000e+00 : f64} -// JSHIR-NEXT: // %16 = 5.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%16) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %14 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.variable_declarator (%12, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 72, 75, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"a"} -// JSHIR-NEXT: // %2 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"console"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 88, 91, 0, "log">} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"b"} -// JSHIR-NEXT: // %6 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"console"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 104, 107, 0, "log">} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.identifier {"c"} -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%11) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/conditional_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/continue/README.generated.md index 5292136..1e7c306 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/continue/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/continue/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/continue/output.generated.txt index cff91da..9690c73 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/continue/output.generated.txt @@ -1,206 +1,168 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %18 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.variable_declarator"(%18, %19) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%20) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %15 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.variable_declarator"(%15, %16) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%17) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "cf.br"()[^bb2] : () -> () -// JSLIR-NEXT: ^bb2: // 2 preds: ^bb1, ^bb5 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+01 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.binary_expression"(%1, %2) <{operator_ = "<"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %4 = "builtin.unrealized_conversion_cast"(%3) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%4)[^bb3, ^bb6] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb3: // pred: ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.continue_statement"() : () -> () -// JSLIR-NEXT: "cf.br"()[^bb5] : () -> () -// JSLIR-NEXT: ^bb4: // no predecessors -// JSLIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.assignment_expression"(%6, %7) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%8) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb5] : () -> () -// JSLIR-NEXT: ^bb5: // 2 preds: ^bb3, ^bb4 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.update_expression"(%9) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expr_region_end"(%10) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb2] : () -> () -// JSLIR-NEXT: ^bb6: // pred: ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %11 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.member_expression"(%11) <{literal_property = #jsir, , "log", 73, 76, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.call_expression"(%12, %13) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%14) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSLIR-NEXT: // %19 = 3.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.variable_declarator (%18, %19) -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%20) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.identifier_ref {"i"} -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %16 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.variable_declarator (%15, %16) -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%17) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.identifier {"i"} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.numeric_literal {#jsir, 1.000000e+01 : f64} -// JSLIR-NEXT: // %2 = 1.000000e+01 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.binary_expression (%1, %2) {"<"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = builtin.unrealized_conversion_cast (%3) -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%4) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.continue_statement -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb4: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.assignment_expression (%6, %7) {"="} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%8) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb5: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier_ref {"i"} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.update_expression (%9) {"++", false} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expr_region_end (%10) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb6: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier {"console"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.member_expression (%11) {#jsir, , "log", 73, 76, 0, "log">} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.identifier {"x"} -// JSLIR-NEXT: // %13 = 3.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.call_expression (%12, %13) -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%14) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.for_statement"() ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+01 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.binary_expression"(%4, %5) <{operator_ = "<"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.update_expression"(%4) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: "jshir.continue_statement"() : () -> () +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 73, 76, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.for_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"i"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"i"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+01 : f64} +// JSHIR-NEXT: // %5 = 1.000000e+01 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.binary_expression (%4, %5) {"<"} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"i"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.update_expression (%4) {"++", false} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.continue_statement +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 73, 76, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"x"} +// JSHIR-NEXT: // %2 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/continue/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/continue/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/README.generated.md deleted file mode 100644 index 0bff3f0..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/input.js deleted file mode 100644 index 9e6cbf9..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/input.js +++ /dev/null @@ -1,6 +0,0 @@ -var x = 3; -for (var i = 0; i < 10; i++) { - continue; - x = 4; -} -console.log(x); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/output.generated.txt deleted file mode 100644 index 9690c73..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/output.generated.txt +++ /dev/null @@ -1,168 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.for_statement"() ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+01 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.binary_expression"(%4, %5) <{operator_ = "<"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.update_expression"(%4) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: "jshir.continue_statement"() : () -> () -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 73, 76, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 3.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.for_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"i"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 0.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"i"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+01 : f64} -// JSHIR-NEXT: // %5 = 1.000000e+01 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.binary_expression (%4, %5) {"<"} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"i"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.update_expression (%4) {"++", false} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.continue_statement -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 73, 76, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"x"} -// JSHIR-NEXT: // %2 = 3.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/continue_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/do_while/README.generated.md index 10ded02..b5f63ba 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/do_while/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/do_while/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/do_while/output.generated.txt index ec32a3f..76c1161 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/do_while/output.generated.txt @@ -1,184 +1,163 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %20 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %21 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %22 = "jsir.variable_declarator"(%20, %21) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%22) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %17 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.variable_declarator"(%17, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // 2 preds: ^bb0, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.binary_expression"(%3, %4) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.assignment_expression"(%2, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb2] : () -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %7 = "jsir.identifier"() <{name = "z"}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "builtin.unrealized_conversion_cast"(%7) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%8)[^bb1, ^bb3] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb3: // pred: ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.member_expression"(%9) <{literal_property = #jsir, , "log", 61, 64, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.call_expression"(%10, %11) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%12) : (!jsir.any) -> () -// JSLIR-NEXT: %13 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.member_expression"(%13) <{literal_property = #jsir, , "log", 77, 80, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.call_expression"(%14, %15) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%16) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %21 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.variable_declarator (%20, %21) -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%22) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier_ref {"y"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %18 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.variable_declarator (%17, %18) -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%19) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier {"x"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %4 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.binary_expression (%3, %4) {"+"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.assignment_expression (%2, %5) {"="} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%6) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.identifier {"z"} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = builtin.unrealized_conversion_cast (%7) -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%8) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier {"console"} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.member_expression (%9) {#jsir, , "log", 61, 64, 0, "log">} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier {"x"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.call_expression (%10, %11) -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%12) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.identifier {"console"} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.member_expression (%13) {#jsir, , "log", 77, 80, 0, "log">} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.identifier {"y"} -// JSLIR-NEXT: // %15 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.call_expression (%14, %15) -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%16) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.variable_declarator"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%10) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.variable_declarator"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%10) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.do_while_statement"() ({ +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.binary_expression"(%9, %10) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %12 = "jsir.assignment_expression"(%8, %11) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%12) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "z"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%8) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 61, 64, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 77, 80, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.variable_declarator (%8, %9) +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%10) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier_ref {"y"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.variable_declarator (%8, %9) +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%10) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.do_while_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.identifier {"x"} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %10 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.binary_expression (%9, %10) {"+"} +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.assignment_expression (%8, %11) {"="} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%12) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"z"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%8) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 61, 64, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"x"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"console"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 77, 80, 0, "log">} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"y"} +// JSHIR-NEXT: // %6 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/do_while/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/do_while/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/README.generated.md deleted file mode 100644 index 9732ab0..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/input.js deleted file mode 100644 index 0e0ded4..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/input.js +++ /dev/null @@ -1,7 +0,0 @@ -var x = 1; -var y = 1; -do { - x = x + 2; -} while (z); -console.log(x); -console.log(y); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/output.generated.txt deleted file mode 100644 index 76c1161..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/output.generated.txt +++ /dev/null @@ -1,163 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.variable_declarator"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%10) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.variable_declarator"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%10) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.do_while_statement"() ({ -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.binary_expression"(%9, %10) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: %12 = "jsir.assignment_expression"(%8, %11) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%12) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "z"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%8) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 61, 64, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 77, 80, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.variable_declarator (%8, %9) -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%10) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier_ref {"y"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.variable_declarator (%8, %9) -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%10) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.do_while_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.identifier {"x"} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %10 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.binary_expression (%9, %10) {"+"} -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.assignment_expression (%8, %11) {"="} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%12) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"z"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%8) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 61, 64, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"x"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"console"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 77, 80, 0, "log">} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"y"} -// JSHIR-NEXT: // %6 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/do_while_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/for/README.generated.md index 8569cd0..3311917 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/for/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/for/output.generated.txt index b5ceef2..3969dc6 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for/output.generated.txt @@ -1,145 +1,113 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %11 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.variable_declarator"(%11, %12) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%13) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "cf.br"()[^bb2] : () -> () -// JSLIR-NEXT: ^bb2: // 2 preds: ^bb1, ^bb4 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+01 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.binary_expression"(%1, %2) <{operator_ = "<"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %4 = "builtin.unrealized_conversion_cast"(%3) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%4)[^bb3, ^bb5] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb3: // pred: ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.member_expression"(%5) <{literal_property = #jsir, , "log", 39, 42, 1, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.call_expression"(%6, %7) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%8) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb4] : () -> () -// JSLIR-NEXT: ^bb4: // pred: ^bb3 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.update_expression"(%9) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expr_region_end"(%10) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb2] : () -> () -// JSLIR-NEXT: ^bb5: // pred: ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier_ref {"i"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %12 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.variable_declarator (%11, %12) -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%13) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.identifier {"i"} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.numeric_literal {#jsir, 1.000000e+01 : f64} -// JSLIR-NEXT: // %2 = 1.000000e+01 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.binary_expression (%1, %2) {"<"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = builtin.unrealized_conversion_cast (%3) -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%4) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.identifier {"console"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.member_expression (%5) {#jsir, , "log", 39, 42, 1, "log">} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.identifier {"i"} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.call_expression (%6, %7) -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%8) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb4: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier_ref {"i"} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.update_expression (%9) {"++", false} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expr_region_end (%10) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb5: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jshir.for_statement"() ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.variable_declarator"(%0, %1) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+01 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "<"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.update_expression"(%0) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%1) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 39, 42, 1, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.for_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"i"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.variable_declarator (%0, %1) +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"i"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+01 : f64} +// JSHIR-NEXT: // %1 = 1.000000e+01 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"<"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"i"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.update_expression (%0) {"++", false} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%1) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 39, 42, 1, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"i"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/for/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/for_in/README.generated.md index d310de0..4008045 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for_in/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/for_in/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/for_in/output.generated.txt index 75d3af3..04dfebf 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for_in/output.generated.txt @@ -1,193 +1,163 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %25 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %26 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %27 = "jsir.variable_declarator"(%25, %26) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%27) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "key"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.identifier"() <{name = "object"}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jslir.for_in_statement_start"(%0, %1) <{left_declaration = #jsir, , 16, 23, 1, , , 20, 23, 1, "key", 0, "var">}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // 2 preds: ^bb0, ^bb2 -// JSLIR-NEXT: %3 = "jslir.for_in_of_statement_has_next"(%2) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %4 = "builtin.unrealized_conversion_cast"(%3) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%4)[^bb2, ^bb3] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.for_in_of_statement_get_next"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %6 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.member_expression"(%6) <{literal_property = #jsir, , "log", 47, 50, 2, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "key"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.call_expression"(%7, %8) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSLIR-NEXT: %10 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.member_expression"(%10) <{literal_property = #jsir, , "log", 67, 70, 2, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.identifier"() <{name = "object"}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.identifier"() <{name = "key"}> : () -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.member_expression"(%12, %13) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.call_expression"(%11, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSLIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.binary_expression"(%17, %18) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.assignment_expression"(%16, %19) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%20) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb3: // pred: ^bb1 -// JSLIR-NEXT: "jslir.for_in_of_statement_end"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: %21 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %22 = "jsir.member_expression"(%21) <{literal_property = #jsir, , "log", 108, 111, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %23 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %24 = "jsir.call_expression"(%22, %23) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%24) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jsir.identifier_ref {"y"} -// JSLIR-NEXT: // %25 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %26 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %26 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jsir.variable_declarator (%25, %26) -// JSLIR-NEXT: // %27 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%27) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier_ref {"key"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.identifier {"object"} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jslir.for_in_statement_start (%0, %1) {#jsir, , 16, 23, 1, , , 20, 23, 1, "key", 0, "var">} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jslir.for_in_of_statement_has_next (%2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = builtin.unrealized_conversion_cast (%3) -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%4) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.for_in_of_statement_get_next (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier {"console"} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.member_expression (%6) {#jsir, , "log", 47, 50, 2, "log">} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"key"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.call_expression (%7, %8) -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%9) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier {"console"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.member_expression (%10) {#jsir, , "log", 67, 70, 2, "log">} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.identifier {"object"} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.identifier {"key"} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.member_expression (%12, %13) -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.call_expression (%11, %14) -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%15) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.identifier_ref {"y"} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier {"y"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %18 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.binary_expression (%17, %18) {"+"} -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.assignment_expression (%16, %19) {"="} -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%20) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.for_in_of_statement_end (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.identifier {"console"} -// JSLIR-NEXT: // %21 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.member_expression (%21) {#jsir, , "log", 108, 111, 0, "log">} -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %23 = jsir.identifier {"y"} -// JSLIR-NEXT: // %23 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.call_expression (%22, %23) -// JSLIR-NEXT: // %24 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%24) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %8 = "jsir.variable_declarator"(%6, %7) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%8) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "key"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "object"}> : () -> !jsir.any +// JSHIR-NEXT: "jshir.for_in_statement"(%0, %1) <{left_declaration = #jsir, , 16, 23, 1, , , 20, 23, 1, "key", 0, "var">}> ({ +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.member_expression"(%6) <{literal_property = #jsir, , "log", 47, 50, 2, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "key"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.call_expression"(%7, %8) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () +// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.member_expression"(%10) <{literal_property = #jsir, , "log", 67, 70, 2, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "object"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.identifier"() <{name = "key"}> : () -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.member_expression"(%12, %13) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.call_expression"(%11, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.binary_expression"(%17, %18) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %20 = "jsir.assignment_expression"(%16, %19) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : (!jsir.any, !jsir.any) -> () +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.member_expression"(%2) <{literal_property = #jsir, , "log", 108, 111, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.call_expression"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier_ref {"y"} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %7 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.variable_declarator (%6, %7) +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%8) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"key"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier {"object"} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.for_in_statement (%0, %1) {#jsir, , 16, 23, 1, , , 20, 23, 1, "key", 0, "var">} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"console"} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.member_expression (%6) {#jsir, , "log", 47, 50, 2, "log">} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"key"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.call_expression (%7, %8) +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%9) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier {"console"} +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.member_expression (%10) {#jsir, , "log", 67, 70, 2, "log">} +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier {"object"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.identifier {"key"} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.member_expression (%12, %13) +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.call_expression (%11, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"y"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.identifier {"y"} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %18 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.binary_expression (%17, %18) {"+"} +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.assignment_expression (%16, %19) {"="} +// JSHIR-NEXT: // %20 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"console"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.member_expression (%2) {#jsir, , "log", 108, 111, 0, "log">} +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"y"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.call_expression (%3, %4) +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/for_in/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for_in/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/README.generated.md deleted file mode 100644 index 08ed246..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/input.js deleted file mode 100644 index e8eaca4..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/input.js +++ /dev/null @@ -1,7 +0,0 @@ -var y = 0; -for (var key in object) { - console.log(key); - console.log(object[key]); - y = y + 1; -} -console.log(y); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/output.generated.txt deleted file mode 100644 index 04dfebf..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/output.generated.txt +++ /dev/null @@ -1,163 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %8 = "jsir.variable_declarator"(%6, %7) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%8) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "key"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "object"}> : () -> !jsir.any -// JSHIR-NEXT: "jshir.for_in_statement"(%0, %1) <{left_declaration = #jsir, , 16, 23, 1, , , 20, 23, 1, "key", 0, "var">}> ({ -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.member_expression"(%6) <{literal_property = #jsir, , "log", 47, 50, 2, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "key"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.call_expression"(%7, %8) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.member_expression"(%10) <{literal_property = #jsir, , "log", 67, 70, 2, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "object"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.identifier"() <{name = "key"}> : () -> !jsir.any -// JSHIR-NEXT: %14 = "jsir.member_expression"(%12, %13) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.call_expression"(%11, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.binary_expression"(%17, %18) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: %20 = "jsir.assignment_expression"(%16, %19) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : (!jsir.any, !jsir.any) -> () -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.member_expression"(%2) <{literal_property = #jsir, , "log", 108, 111, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.call_expression"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier_ref {"y"} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSHIR-NEXT: // %7 = 0.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.variable_declarator (%6, %7) -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%8) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier_ref {"key"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.identifier {"object"} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.for_in_statement (%0, %1) {#jsir, , 16, 23, 1, , , 20, 23, 1, "key", 0, "var">} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"console"} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.member_expression (%6) {#jsir, , "log", 47, 50, 2, "log">} -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"key"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.call_expression (%7, %8) -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%9) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.identifier {"console"} -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.member_expression (%10) {#jsir, , "log", 67, 70, 2, "log">} -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier {"object"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.identifier {"key"} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jsir.member_expression (%12, %13) -// JSHIR-NEXT: // %14 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.call_expression (%11, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"y"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.identifier {"y"} -// JSHIR-NEXT: // %17 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %18 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.binary_expression (%17, %18) {"+"} -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.assignment_expression (%16, %19) {"="} -// JSHIR-NEXT: // %20 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"console"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.member_expression (%2) {#jsir, , "log", 108, 111, 0, "log">} -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"y"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.call_expression (%3, %4) -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_in_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/README.generated.md deleted file mode 100644 index b1a86a2..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/input.js deleted file mode 100644 index e8ba737..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/input.js +++ /dev/null @@ -1,2 +0,0 @@ -for (var i = 0; i < 10; i++) - console.log(i); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/output.generated.txt deleted file mode 100644 index 3969dc6..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/output.generated.txt +++ /dev/null @@ -1,113 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jshir.for_statement"() ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.variable_declarator"(%0, %1) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%2) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+01 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "<"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%2) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.update_expression"(%0) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%1) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 39, 42, 1, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "i"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.for_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier_ref {"i"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSHIR-NEXT: // %1 = 0.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.variable_declarator (%0, %1) -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%2) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"i"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+01 : f64} -// JSHIR-NEXT: // %1 = 1.000000e+01 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"<"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%2) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier_ref {"i"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.update_expression (%0) {"++", false} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%1) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 39, 42, 1, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"i"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/for_of/README.generated.md index d60de90..a6e296b 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for_of/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/for_of/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/for_of/output.generated.txt index f5b2638..a73716d 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for_of/output.generated.txt @@ -1,166 +1,136 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %19 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %21 = "jsir.variable_declarator"(%19, %20) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%21) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.identifier"() <{name = "array"}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jslir.for_of_statement_start"(%0, %1) <{await = false, left_declaration = #jsir, , 16, 21, 1, , , 20, 21, 1, "x", 0, "var">}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // 2 preds: ^bb0, ^bb2 -// JSLIR-NEXT: %3 = "jslir.for_in_of_statement_has_next"(%2) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %4 = "builtin.unrealized_conversion_cast"(%3) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%4)[^bb2, ^bb3] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.for_in_of_statement_get_next"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %6 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.member_expression"(%6) <{literal_property = #jsir, , "log", 44, 47, 2, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.call_expression"(%7, %8) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSLIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.binary_expression"(%11, %12) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.assignment_expression"(%10, %13) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%14) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb3: // pred: ^bb1 -// JSLIR-NEXT: "jslir.for_in_of_statement_end"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: %15 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.member_expression"(%15) <{literal_property = #jsir, , "log", 75, 78, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.call_expression"(%16, %17) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%18) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.identifier_ref {"y"} -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %20 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.variable_declarator (%19, %20) -// JSLIR-NEXT: // %21 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%21) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.identifier {"array"} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jslir.for_of_statement_start (%0, %1) {false, #jsir, , 16, 21, 1, , , 20, 21, 1, "x", 0, "var">} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jslir.for_in_of_statement_has_next (%2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = builtin.unrealized_conversion_cast (%3) -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%4) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.for_in_of_statement_get_next (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier {"console"} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.member_expression (%6) {#jsir, , "log", 44, 47, 2, "log">} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"x"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.call_expression (%7, %8) -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%9) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier_ref {"y"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier {"y"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %12 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.binary_expression (%11, %12) {"+"} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.assignment_expression (%10, %13) {"="} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%14) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.for_in_of_statement_end (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.identifier {"console"} -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.member_expression (%15) {#jsir, , "log", 75, 78, 0, "log">} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier {"y"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.call_expression (%16, %17) -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%18) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %8 = "jsir.variable_declarator"(%6, %7) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%8) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "array"}> : () -> !jsir.any +// JSHIR-NEXT: "jshir.for_of_statement"(%0, %1) <{await = false, left_declaration = #jsir, , 16, 21, 1, , , 20, 21, 1, "x", 0, "var">}> ({ +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.member_expression"(%6) <{literal_property = #jsir, , "log", 44, 47, 2, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.call_expression"(%7, %8) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () +// JSHIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %12 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.binary_expression"(%11, %12) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.assignment_expression"(%10, %13) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%14) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : (!jsir.any, !jsir.any) -> () +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.member_expression"(%2) <{literal_property = #jsir, , "log", 75, 78, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.call_expression"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier_ref {"y"} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %7 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.variable_declarator (%6, %7) +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%8) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier {"array"} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.for_of_statement (%0, %1) {false, #jsir, , 16, 21, 1, , , 20, 21, 1, "x", 0, "var">} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"console"} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.member_expression (%6) {#jsir, , "log", 44, 47, 2, "log">} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"x"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.call_expression (%7, %8) +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%9) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier_ref {"y"} +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.identifier {"y"} +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %12 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.binary_expression (%11, %12) {"+"} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.assignment_expression (%10, %13) {"="} +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%14) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"console"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.member_expression (%2) {#jsir, , "log", 75, 78, 0, "log">} +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"y"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.call_expression (%3, %4) +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/for_of/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/for_of/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/README.generated.md deleted file mode 100644 index 2a16461..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/input.js deleted file mode 100644 index 7cc07ed..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/input.js +++ /dev/null @@ -1,6 +0,0 @@ -var y = 0; -for (var x of array) { - console.log(x); - y = y + 1; -} -console.log(y); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/output.generated.txt deleted file mode 100644 index a73716d..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/output.generated.txt +++ /dev/null @@ -1,136 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %8 = "jsir.variable_declarator"(%6, %7) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%8) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "array"}> : () -> !jsir.any -// JSHIR-NEXT: "jshir.for_of_statement"(%0, %1) <{await = false, left_declaration = #jsir, , 16, 21, 1, , , 20, 21, 1, "x", 0, "var">}> ({ -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.member_expression"(%6) <{literal_property = #jsir, , "log", 44, 47, 2, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.call_expression"(%7, %8) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSHIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %12 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.binary_expression"(%11, %12) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: %14 = "jsir.assignment_expression"(%10, %13) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%14) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : (!jsir.any, !jsir.any) -> () -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.member_expression"(%2) <{literal_property = #jsir, , "log", 75, 78, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "y"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.call_expression"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier_ref {"y"} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSHIR-NEXT: // %7 = 0.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.variable_declarator (%6, %7) -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%8) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.identifier {"array"} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.for_of_statement (%0, %1) {false, #jsir, , 16, 21, 1, , , 20, 21, 1, "x", 0, "var">} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"console"} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.member_expression (%6) {#jsir, , "log", 44, 47, 2, "log">} -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"x"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.call_expression (%7, %8) -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%9) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.identifier_ref {"y"} -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.identifier {"y"} -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %12 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.binary_expression (%11, %12) {"+"} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jsir.assignment_expression (%10, %13) {"="} -// JSHIR-NEXT: // %14 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%14) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"console"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.member_expression (%2) {#jsir, , "log", 75, 78, 0, "log">} -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"y"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.call_expression (%3, %4) -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/for_of_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/function/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/function/README.generated.md index f26cec1..6bbfd17 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/function/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/function/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/function/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/function/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/function/output.generated.txt index 5e7d9a4..1caf95c 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/function/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/function/output.generated.txt @@ -1,116 +1,117 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.function_declaration"() <{async = false, generator = false, id = #jsir, , "foo", 9, 12, 1, "foo">}> ({ -// JSLIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "arg"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%0) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "is_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.variable_declarator"(%2, %3) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%4) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.identifier"() <{name = "arg"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.binary_expression"(%3, %4) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.variable_declarator"(%2, %5) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %1 = "jsir.identifier"() <{name = "is_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.return_statement"(%1) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.function_declaration {false, false, #jsir, , "foo", 9, 12, 1, "foo">} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier_ref {"arg"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%0) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier_ref {"is_a_const"} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %3 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.variable_declarator (%2, %3) -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%4) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier_ref {"not_a_const"} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier {"arg"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %4 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.binary_expression (%3, %4) {"+"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.variable_declarator (%2, %5) -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%6) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.identifier {"is_a_const"} -// JSLIR-NEXT: // %1 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.return_statement (%1) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.function_declaration"() <{async = false, generator = false, id = #jsir, , "foo", 9, 12, 1, "foo">}> ({ +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "arg"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%0) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %1 = "jsir.identifier_ref"() <{name = "is_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.variable_declarator"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %1 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "arg"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.binary_expression"(%2, %3) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.variable_declarator"(%1, %4) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "is_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.return_statement"(%0) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.function_declaration {false, false, #jsir, , "foo", 9, 12, 1, "foo">} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"arg"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%0) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier_ref {"is_a_const"} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %2 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.variable_declarator (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier_ref {"not_a_const"} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"arg"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %3 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.binary_expression (%2, %3) {"+"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.variable_declarator (%1, %4) +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"is_a_const"} +// JSHIR-NEXT: // %0 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.return_statement (%0) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/function/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/function/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/function/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/function/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/if/README.generated.md index f560293..2a27cef 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/if/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/if/output.generated.txt index 1143227..e6b1a3c 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if/output.generated.txt @@ -1,94 +1,69 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.binary_expression"(%2, %3) <{operator_ = "=="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %5 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "builtin.unrealized_conversion_cast"(%4) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%6)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %7 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%8) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb3: // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%5) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %0 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %1 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} -// JSLIR-NEXT: // %2 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %3 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.binary_expression (%2, %3) {"=="} -// JSLIR-NEXT: // %4 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = builtin.unrealized_conversion_cast (%4) -// JSLIR-NEXT: // %6 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%6) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.identifier {"a"} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"b"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%8) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%5) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: %0 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.binary_expression"(%2, %3) <{operator_ = "=="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jshir.if_statement"(%4) ({ +// JSHIR-NEXT: %5 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %5 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %0 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} +// JSHIR-NEXT: // %2 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %3 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.binary_expression (%2, %3) {"=="} +// JSHIR-NEXT: // %4 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.if_statement (%4) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier {"a"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier {"b"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/if/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/README.generated.md index b215d2a..4bbfce8 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/output.generated.txt index 841bce8..d73c8b9 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/output.generated.txt @@ -1,120 +1,95 @@ -// JSLIR: "jsir.file"() <{comments = [#jsir, , 44, 58, " Should be 1">]}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.variable_declarator"(%10) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "builtin.unrealized_conversion_cast"(%0) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%2)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.assignment_expression"(%3, %4) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.assignment_expression"(%6, %7) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%8) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb3: // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[#jsir, , 44, 58, " Should be 1">]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.variable_declarator (%10) -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %0 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = builtin.unrealized_conversion_cast (%0) -// JSLIR-NEXT: // %2 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%2) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %4 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.assignment_expression (%3, %4) {"="} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%5) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.assignment_expression (%6, %7) {"="} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%8) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier {"a"} -// JSLIR-NEXT: // %9 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%9) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = [#jsir, , 44, 58, " Should be 1">]}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.variable_declarator"(%2) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jshir.if_statement"(%0) ({ +// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> () +// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%1) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[#jsir, , 44, 58, " Should be 1">]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.variable_declarator (%2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %0 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.if_statement (%0) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %3 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier {"a"} +// JSHIR-NEXT: // %1 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%1) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/README.generated.md deleted file mode 100644 index 483dd7a..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/input.js deleted file mode 100644 index 18ffce9..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/input.js +++ /dev/null @@ -1,6 +0,0 @@ -var a; -if (true) - a = 1; -else - a = 2; -a; // Should be 1 diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/output.generated.txt deleted file mode 100644 index d73c8b9..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/output.generated.txt +++ /dev/null @@ -1,95 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = [#jsir, , 44, 58, " Should be 1">]}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.variable_declarator"(%2) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jshir.if_statement"(%0) ({ -// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> () -// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%1) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[#jsir, , 44, 58, " Should be 1">]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.variable_declarator (%2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %0 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.if_statement (%0) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %3 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.identifier {"a"} -// JSHIR-NEXT: // %1 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%1) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_dead_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/README.generated.md index 15b92d4..353ccd6 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/output.generated.txt index 9a21fed..ea6835b 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/output.generated.txt @@ -1,120 +1,95 @@ -// JSLIR: "jsir.file"() <{comments = [#jsir, , 41, 62, " Should be unknown.">]}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.variable_declarator"(%10) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "builtin.unrealized_conversion_cast"(%0) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%2)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.assignment_expression"(%3, %4) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %6 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.assignment_expression"(%6, %7) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%8) : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb3: // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[#jsir, , 41, 62, " Should be unknown.">]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.variable_declarator (%10) -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"x"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = builtin.unrealized_conversion_cast (%0) -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%2) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %4 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.assignment_expression (%3, %4) {"="} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%5) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %7 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.assignment_expression (%6, %7) {"="} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%8) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier {"a"} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%9) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = [#jsir, , 41, 62, " Should be unknown.">]}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.variable_declarator"(%2) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: "jshir.if_statement"(%0) ({ +// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> () +// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%1) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[#jsir, , 41, 62, " Should be unknown.">]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.variable_declarator (%2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"x"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.if_statement (%0) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %3 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %3 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier {"a"} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%1) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/README.generated.md deleted file mode 100644 index 863a16c..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/input.js deleted file mode 100644 index 7b3bff3..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/input.js +++ /dev/null @@ -1,6 +0,0 @@ -var a; -if (x) - a = 1; -else - a = 2; -a; // Should be unknown. diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/output.generated.txt deleted file mode 100644 index ea6835b..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/output.generated.txt +++ /dev/null @@ -1,95 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = [#jsir, , 41, 62, " Should be unknown.">]}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.variable_declarator"(%2) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: "jshir.if_statement"(%0) ({ -// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> () -// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%1) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[#jsir, , 41, 62, " Should be unknown.">]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.variable_declarator (%2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"x"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.if_statement (%0) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %3 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %3 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.identifier {"a"} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%1) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/if_var_unknown_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/label/README.generated.md index efb6d50..e74696a 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/label/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/label/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/label/output.generated.txt index 6dcdc75..80184a4 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/label/output.generated.txt @@ -1,221 +1,173 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %19 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %21 = "jsir.variable_declarator"(%19, %20) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%21) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jslir.labeled_statement_start"() <{label = #jsir, , "my_label", 11, 19, 0, "my_label">}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // 2 preds: ^bb0, ^bb6 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %2 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "builtin.unrealized_conversion_cast"(%2) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%3)[^bb2, ^bb7] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%4) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%4) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb3: // 2 preds: ^bb2, ^bb5 -// JSLIR-NEXT: "jslir.control_flow_marker"(%8) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %10 = "builtin.unrealized_conversion_cast"(%9) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%10)[^bb4, ^bb6] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb4: // pred: ^bb3 -// JSLIR-NEXT: "jslir.control_flow_marker"(%8) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %11 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%11) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%11) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.break_statement"() <{label = #jsir, , "my_label", 72, 80, 4, "my_label">}> : () -> () -// JSLIR-NEXT: "cf.br"()[^bb7] : () -> () -// JSLIR-NEXT: ^bb5: // no predecessors -// JSLIR-NEXT: "jslir.control_flow_marker"(%11) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb6: // pred: ^bb3 -// JSLIR-NEXT: "jslir.control_flow_marker"(%8) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %12 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.assignment_expression"(%12, %13) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%14) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%4) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb7: // 2 preds: ^bb1, ^bb4 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %15 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.member_expression"(%15) <{literal_property = #jsir, , "log", 105, 108, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.call_expression"(%16, %17) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%18) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %20 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.variable_declarator (%19, %20) -// JSLIR-NEXT: // %21 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%21) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.labeled_statement_start {#jsir, , "my_label", 11, 19, 0, "my_label">} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %2 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = builtin.unrealized_conversion_cast (%2) -// JSLIR-NEXT: // %3 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%3) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%4) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%4) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %6 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%8) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %9 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = builtin.unrealized_conversion_cast (%9) -// JSLIR-NEXT: // %10 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%10) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb4: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%8) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%11) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%11) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.break_statement {#jsir, , "my_label", 72, 80, 4, "my_label">} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb5: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%11) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb6: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%8) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.assignment_expression (%12, %13) {"="} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%14) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%4) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb7: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.identifier {"console"} -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.member_expression (%15) {#jsir, , "log", 105, 108, 0, "log">} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier {"x"} -// JSLIR-NEXT: // %17 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.call_expression (%16, %17) -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%18) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.labeled_statement"() <{label = #jsir, , "my_label", 11, 19, 0, "my_label">}> ({ +// JSHIR-NEXT: "jshir.while_statement"() ({ +// JSHIR-NEXT: %4 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: "jshir.while_statement"() ({ +// JSHIR-NEXT: %10 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%10) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: "jshir.break_statement"() <{label = #jsir, , "my_label", 72, 80, 4, "my_label">}> : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %7 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %8 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.assignment_expression"(%7, %8) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 105, 108, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.labeled_statement {#jsir, , "my_label", 11, 19, 0, "my_label">} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.while_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %4 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.while_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %10 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%10) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.break_statement {#jsir, , "my_label", 72, 80, 4, "my_label">} +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} +// JSHIR-NEXT: // %8 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.assignment_expression (%7, %8) {"="} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%9) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 105, 108, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"x"} +// JSHIR-NEXT: // %2 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/label/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/label/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/README.generated.md deleted file mode 100644 index e8ded2d..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/input.js deleted file mode 100644 index 566a003..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/input.js +++ /dev/null @@ -1,9 +0,0 @@ -var x = 1; -my_label: while (true) { - x = 2; - while (true) { - break my_label; - } - x = 3; -} -console.log(x); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/output.generated.txt deleted file mode 100644 index 80184a4..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/output.generated.txt +++ /dev/null @@ -1,173 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.labeled_statement"() <{label = #jsir, , "my_label", 11, 19, 0, "my_label">}> ({ -// JSHIR-NEXT: "jshir.while_statement"() ({ -// JSHIR-NEXT: %4 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: "jshir.while_statement"() ({ -// JSHIR-NEXT: %10 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%10) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: "jshir.break_statement"() <{label = #jsir, , "my_label", 72, 80, 4, "my_label">}> : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %7 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %8 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.assignment_expression"(%7, %8) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 105, 108, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.labeled_statement {#jsir, , "my_label", 11, 19, 0, "my_label">} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.while_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %4 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.while_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %10 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%10) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.break_statement {#jsir, , "my_label", 72, 80, 4, "my_label">} -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSHIR-NEXT: // %8 = 3.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.assignment_expression (%7, %8) {"="} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%9) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 105, 108, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"x"} -// JSHIR-NEXT: // %2 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/label_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/literal/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/literal/README.generated.md index c04fe85..1e7542e 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/literal/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/literal/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/literal/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/literal/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/literal/output.generated.txt index afd3aa2..cd520ab 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/literal/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/literal/output.generated.txt @@ -1,64 +1,64 @@ -// JSLIR: "jsir.file"() <{comments = [#jsir, , 0, 21, " regular expression">, #jsir, , 28, 35, " null">, #jsir, , 42, 51, " string">, #jsir, , 58, 68, " boolean">, #jsir, , 76, 85, " number">, #jsir, , 90, 100, " big int">]}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jsir.reg_exp_literal"() <{extra = #jsir, flags = "", pattern = "1"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%0) : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jsir.null_literal"() : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%1) : (!jsir.any) -> () -// JSLIR-NEXT: %2 = "jsir.string_literal"() <{extra = #jsir, value = "a"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: %3 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jsir.big_int_literal"() <{extra = #jsir, value = "1"}> : () -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[#jsir, , 0, 21, " regular expression">, #jsir, , 28, 35, " null">, #jsir, , 42, 51, " string">, #jsir, , 58, 68, " boolean">, #jsir, , 76, 85, " number">, #jsir, , 90, 100, " big int">]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.reg_exp_literal {#jsir, "", "1"} -// JSLIR-NEXT: // %0 = #jsir -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%0) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.null_literal -// JSLIR-NEXT: // %1 = #jsir.null_literal -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%1) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.string_literal {#jsir, "a"} -// JSLIR-NEXT: // %2 = "a" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %3 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %4 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%4) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.big_int_literal {#jsir, "1"} -// JSLIR-NEXT: // %5 = #jsir -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%5) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = [#jsir, , 0, 21, " regular expression">, #jsir, , 28, 35, " null">, #jsir, , 42, 51, " string">, #jsir, , 58, 68, " boolean">, #jsir, , 76, 85, " number">, #jsir, , 90, 100, " big int">]}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: %0 = "jsir.reg_exp_literal"() <{extra = #jsir, flags = "", pattern = "1"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%0) : (!jsir.any) -> () +// JSHIR-NEXT: %1 = "jsir.null_literal"() : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%1) : (!jsir.any) -> () +// JSHIR-NEXT: %2 = "jsir.string_literal"() <{extra = #jsir, value = "a"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: %3 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: %5 = "jsir.big_int_literal"() <{extra = #jsir, value = "1"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[#jsir, , 0, 21, " regular expression">, #jsir, , 28, 35, " null">, #jsir, , 42, 51, " string">, #jsir, , 58, 68, " boolean">, #jsir, , 76, 85, " number">, #jsir, , 90, 100, " big int">]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.reg_exp_literal {#jsir, "", "1"} +// JSHIR-NEXT: // %0 = #jsir +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%0) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.null_literal +// JSHIR-NEXT: // %1 = #jsir.null_literal +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%1) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.string_literal {#jsir, "a"} +// JSHIR-NEXT: // %2 = "a" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %3 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %4 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.big_int_literal {#jsir, "1"} +// JSHIR-NEXT: // %5 = #jsir +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/literal/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/literal/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/literal/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/literal/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/README.generated.md index a1f5a0b..ed47f8f 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/output.generated.txt index 79a80be..b8d60e6 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/output.generated.txt @@ -1,350 +1,254 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %43 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %44 = "jsir.null_literal"() : () -> !jsir.any -// JSLIR-NEXT: %45 = "jslir.logical_expression_start"(%44) <{operator_ = "??"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %46 = "jsir.null_literal"() : () -> !jsir.any -// JSLIR-NEXT: %47 = "jsir.binary_expression"(%44, %46) <{operator_ = "=="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %48 = "builtin.unrealized_conversion_cast"(%47) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%48, %44)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%45) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %49 = "jsir.string_literal"() <{extra = #jsir, value = "default for a"}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%49)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%50: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%45) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %51 = "jsir.variable_declarator"(%43, %50) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%51) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %34 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %35 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any -// JSLIR-NEXT: %36 = "jslir.logical_expression_start"(%35) <{operator_ = "??"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %37 = "jsir.null_literal"() : () -> !jsir.any -// JSLIR-NEXT: %38 = "jsir.binary_expression"(%35, %37) <{operator_ = "=="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %39 = "builtin.unrealized_conversion_cast"(%38) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%39, %35)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%36) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %40 = "jsir.string_literal"() <{extra = #jsir, value = "default for b"}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%40)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%41: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%36) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %42 = "jsir.variable_declarator"(%34, %41) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%42) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %25 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %26 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.200000e+01 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %27 = "jslir.logical_expression_start"(%26) <{operator_ = "??"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %28 = "jsir.null_literal"() : () -> !jsir.any -// JSLIR-NEXT: %29 = "jsir.binary_expression"(%26, %28) <{operator_ = "=="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %30 = "builtin.unrealized_conversion_cast"(%29) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%30, %26)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%27) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %31 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%31)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%32: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%27) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %33 = "jsir.variable_declarator"(%25, %32) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%33) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jslir.logical_expression_start"(%17) <{operator_ = "??"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.null_literal"() : () -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.binary_expression"(%17, %19) <{operator_ = "=="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %21 = "builtin.unrealized_conversion_cast"(%20) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%21, %17)[^bb1, ^bb2] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%18) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %22 = "jsir.string_literal"() <{extra = #jsir, value = "default for d"}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%22)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%23: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%18) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %24 = "jsir.variable_declarator"(%16, %23) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%24) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 119, 122, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 135, 138, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 151, 154, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 167, 170, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %43 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %43 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %44 = jsir.null_literal -// JSLIR-NEXT: // %44 = #jsir.null_literal -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %45 = jslir.logical_expression_start (%44) {"??"} -// JSLIR-NEXT: // %45 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %46 = jsir.null_literal -// JSLIR-NEXT: // %46 = #jsir.null_literal -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %47 = jsir.binary_expression (%44, %46) {"=="} -// JSLIR-NEXT: // %47 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %48 = builtin.unrealized_conversion_cast (%47) -// JSLIR-NEXT: // %48 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%48, %44) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%45) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %49 = jsir.string_literal {#jsir, "default for a"} -// JSLIR-NEXT: // %49 = "default for a" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%49) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%45) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %51 = jsir.variable_declarator (%43, %50) -// JSLIR-NEXT: // %51 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%51) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %34 = jsir.identifier_ref {"b"} -// JSLIR-NEXT: // %34 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %35 = jsir.string_literal {#jsir, ""} -// JSLIR-NEXT: // %35 = "" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %36 = jslir.logical_expression_start (%35) {"??"} -// JSLIR-NEXT: // %36 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %37 = jsir.null_literal -// JSLIR-NEXT: // %37 = #jsir.null_literal -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %38 = jsir.binary_expression (%35, %37) {"=="} -// JSLIR-NEXT: // %38 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %39 = builtin.unrealized_conversion_cast (%38) -// JSLIR-NEXT: // %39 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%39, %35) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%36) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %40 = jsir.string_literal {#jsir, "default for b"} -// JSLIR-NEXT: // %40 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%40) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%36) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %42 = jsir.variable_declarator (%34, %41) -// JSLIR-NEXT: // %42 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%42) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jsir.identifier_ref {"c"} -// JSLIR-NEXT: // %25 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %26 = jsir.numeric_literal {#jsir, 4.200000e+01 : f64} -// JSLIR-NEXT: // %26 = 4.200000e+01 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jslir.logical_expression_start (%26) {"??"} -// JSLIR-NEXT: // %27 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %28 = jsir.null_literal -// JSLIR-NEXT: // %28 = #jsir.null_literal -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %29 = jsir.binary_expression (%26, %28) {"=="} -// JSLIR-NEXT: // %29 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %30 = builtin.unrealized_conversion_cast (%29) -// JSLIR-NEXT: // %30 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%30, %26) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%27) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %31 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %31 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%31) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%27) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %33 = jsir.variable_declarator (%25, %32) -// JSLIR-NEXT: // %33 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%33) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.identifier_ref {"d"} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier {"x"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jslir.logical_expression_start (%17) {"??"} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.null_literal -// JSLIR-NEXT: // %19 = #jsir.null_literal -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.binary_expression (%17, %19) {"=="} -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = builtin.unrealized_conversion_cast (%20) -// JSLIR-NEXT: // %21 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%21, %17) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%18) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.string_literal {#jsir, "default for d"} -// JSLIR-NEXT: // %22 = "default for d" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%22) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%18) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.variable_declarator (%16, %23) -// JSLIR-NEXT: // %24 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%24) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"console"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 119, 122, 0, "log">} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier {"a"} -// JSLIR-NEXT: // %2 = "default for a" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier {"console"} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 135, 138, 0, "log">} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier {"b"} -// JSLIR-NEXT: // %6 = "" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"console"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 151, 154, 0, "log">} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier {"c"} -// JSLIR-NEXT: // %10 = 4.200000e+01 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.identifier {"console"} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 167, 170, 0, "log">} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.identifier {"d"} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.call_expression (%13, %14) -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%15) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.null_literal"() : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ +// JSHIR-NEXT: %20 = "jsir.string_literal"() <{extra = #jsir, value = "default for a"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ +// JSHIR-NEXT: %20 = "jsir.string_literal"() <{extra = #jsir, value = "default for b"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.200000e+01 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ +// JSHIR-NEXT: %20 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ +// JSHIR-NEXT: %20 = "jsir.string_literal"() <{extra = #jsir, value = "default for d"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 119, 122, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 135, 138, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 151, 154, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () +// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 167, 170, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.null_literal +// JSHIR-NEXT: // %17 = #jsir.null_literal +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.string_literal {#jsir, "default for a"} +// JSHIR-NEXT: // %20 = "default for a" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = "default for a" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"b"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.string_literal {#jsir, ""} +// JSHIR-NEXT: // %17 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.string_literal {#jsir, "default for b"} +// JSHIR-NEXT: // %20 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"c"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.numeric_literal {#jsir, 4.200000e+01 : f64} +// JSHIR-NEXT: // %17 = 4.200000e+01 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %20 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = 4.200000e+01 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"d"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.identifier {"x"} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.string_literal {#jsir, "default for d"} +// JSHIR-NEXT: // %20 = "default for d" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 119, 122, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"a"} +// JSHIR-NEXT: // %2 = "default for a" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"console"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 135, 138, 0, "log">} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"b"} +// JSHIR-NEXT: // %6 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"console"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 151, 154, 0, "log">} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier {"c"} +// JSHIR-NEXT: // %10 = 4.200000e+01 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%11) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier {"console"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 167, 170, 0, "log">} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.identifier {"d"} +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.call_expression (%13, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/README.generated.md deleted file mode 100644 index 754bf4b..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/input.js deleted file mode 100644 index 26ced28..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/input.js +++ /dev/null @@ -1,8 +0,0 @@ -var a = null ?? "default for a"; -var b = "" ?? "default for b"; -var c = 42 ?? 0; -var d = x ?? "default for d"; -console.log(a); -console.log(b); -console.log(c); -console.log(d); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/output.generated.txt deleted file mode 100644 index b8d60e6..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/output.generated.txt +++ /dev/null @@ -1,254 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.null_literal"() : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ -// JSHIR-NEXT: %20 = "jsir.string_literal"() <{extra = #jsir, value = "default for a"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ -// JSHIR-NEXT: %20 = "jsir.string_literal"() <{extra = #jsir, value = "default for b"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.200000e+01 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ -// JSHIR-NEXT: %20 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "??"}> ({ -// JSHIR-NEXT: %20 = "jsir.string_literal"() <{extra = #jsir, value = "default for d"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 119, 122, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 135, 138, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 151, 154, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 167, 170, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.null_literal -// JSHIR-NEXT: // %17 = #jsir.null_literal -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.string_literal {#jsir, "default for a"} -// JSHIR-NEXT: // %20 = "default for a" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = "default for a" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"b"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.string_literal {#jsir, ""} -// JSHIR-NEXT: // %17 = "" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.string_literal {#jsir, "default for b"} -// JSHIR-NEXT: // %20 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = "" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"c"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.numeric_literal {#jsir, 4.200000e+01 : f64} -// JSHIR-NEXT: // %17 = 4.200000e+01 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSHIR-NEXT: // %20 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = 4.200000e+01 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"d"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.identifier {"x"} -// JSHIR-NEXT: // %17 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"??"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.string_literal {#jsir, "default for d"} -// JSHIR-NEXT: // %20 = "default for d" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 119, 122, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"a"} -// JSHIR-NEXT: // %2 = "default for a" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"console"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 135, 138, 0, "log">} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"b"} -// JSHIR-NEXT: // %6 = "" -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"console"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 151, 154, 0, "log">} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.identifier {"c"} -// JSHIR-NEXT: // %10 = 4.200000e+01 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%11) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier {"console"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 167, 170, 0, "log">} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jsir.identifier {"d"} -// JSHIR-NEXT: // %14 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.call_expression (%13, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/nullish_coalesce_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/README.generated.md index 1216f28..fbd781f 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/output.generated.txt index c16fa06..7ca274f 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/output.generated.txt @@ -1,221 +1,221 @@ -// JSLIR: "jsir.file"() <{comments = [#jsir, , 27, 31, " s">, #jsir, , 62, 66, " e">, #jsir, , 87, 91, " l">, #jsir, , 112, 116, " l">]}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.parenthesized_expression"(%2) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.binary_expression"(%4, %5) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.binary_expression"(%6, %7) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.member_expression"(%3, %8) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.string_literal"() <{extra = #jsir, value = "h"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.binary_expression"(%9, %10) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.unary_expression"(%12) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.binary_expression"(%13, %14) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.parenthesized_expression"(%15) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.unary_expression"(%17) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.unary_expression"(%19) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %21 = "jsir.binary_expression"(%18, %20) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %22 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %23 = "jsir.unary_expression"(%22) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %24 = "jsir.binary_expression"(%21, %23) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %25 = "jsir.member_expression"(%16, %24) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %26 = "jsir.binary_expression"(%11, %25) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %27 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %28 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any -// JSLIR-NEXT: %29 = "jsir.binary_expression"(%27, %28) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %30 = "jsir.parenthesized_expression"(%29) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %31 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %32 = "jsir.unary_expression"(%31) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %33 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %34 = "jsir.unary_expression"(%33) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %35 = "jsir.binary_expression"(%32, %34) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %36 = "jsir.member_expression"(%30, %35) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %37 = "jsir.binary_expression"(%26, %36) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %38 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %39 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any -// JSLIR-NEXT: %40 = "jsir.binary_expression"(%38, %39) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %41 = "jsir.parenthesized_expression"(%40) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %42 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %43 = "jsir.unary_expression"(%42) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %44 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %45 = "jsir.unary_expression"(%44) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %46 = "jsir.binary_expression"(%43, %45) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %47 = "jsir.member_expression"(%41, %46) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %48 = "jsir.binary_expression"(%37, %47) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%48) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[#jsir, , 27, 31, " s">, #jsir, , 62, 66, " e">, #jsir, , 87, 91, " l">, #jsir, , 112, 116, " l">]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %0 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.string_literal {#jsir, ""} -// JSLIR-NEXT: // %1 = "" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} -// JSLIR-NEXT: // %2 = "false" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.parenthesized_expression (%2) -// JSLIR-NEXT: // %3 = "false" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %4 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %5 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.binary_expression (%4, %5) {"+"} -// JSLIR-NEXT: // %6 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %7 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.binary_expression (%6, %7) {"+"} -// JSLIR-NEXT: // %8 = 3.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.member_expression (%3, %8) -// JSLIR-NEXT: // %9 = "s" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.string_literal {#jsir, "h"} -// JSLIR-NEXT: // %10 = "h" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.binary_expression (%9, %10) {"+"} -// JSLIR-NEXT: // %11 = "sh" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %12 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.unary_expression (%12) {"!", true} -// JSLIR-NEXT: // %13 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.string_literal {#jsir, ""} -// JSLIR-NEXT: // %14 = "" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.binary_expression (%13, %14) {"+"} -// JSLIR-NEXT: // %15 = "true" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.parenthesized_expression (%15) -// JSLIR-NEXT: // %16 = "true" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %17 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.unary_expression (%17) {"!", true} -// JSLIR-NEXT: // %18 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %19 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.unary_expression (%19) {"!", true} -// JSLIR-NEXT: // %20 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.binary_expression (%18, %20) {"+"} -// JSLIR-NEXT: // %21 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %22 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %23 = jsir.unary_expression (%22) {"!", true} -// JSLIR-NEXT: // %23 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.binary_expression (%21, %23) {"+"} -// JSLIR-NEXT: // %24 = 3.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jsir.member_expression (%16, %24) -// JSLIR-NEXT: // %25 = "e" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %26 = jsir.binary_expression (%11, %25) {"+"} -// JSLIR-NEXT: // %26 = "she" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %27 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %28 = jsir.string_literal {#jsir, ""} -// JSLIR-NEXT: // %28 = "" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %29 = jsir.binary_expression (%27, %28) {"+"} -// JSLIR-NEXT: // %29 = "false" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %30 = jsir.parenthesized_expression (%29) -// JSLIR-NEXT: // %30 = "false" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %31 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %31 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %32 = jsir.unary_expression (%31) {"!", true} -// JSLIR-NEXT: // %32 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %33 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %33 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %34 = jsir.unary_expression (%33) {"!", true} -// JSLIR-NEXT: // %34 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %35 = jsir.binary_expression (%32, %34) {"+"} -// JSLIR-NEXT: // %35 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %36 = jsir.member_expression (%30, %35) -// JSLIR-NEXT: // %36 = "l" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %37 = jsir.binary_expression (%26, %36) {"+"} -// JSLIR-NEXT: // %37 = "shel" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %38 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %38 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %39 = jsir.string_literal {#jsir, ""} -// JSLIR-NEXT: // %39 = "" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %40 = jsir.binary_expression (%38, %39) {"+"} -// JSLIR-NEXT: // %40 = "false" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %41 = jsir.parenthesized_expression (%40) -// JSLIR-NEXT: // %41 = "false" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %42 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %42 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %43 = jsir.unary_expression (%42) {"!", true} -// JSLIR-NEXT: // %43 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %44 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %44 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %45 = jsir.unary_expression (%44) {"!", true} -// JSLIR-NEXT: // %45 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %46 = jsir.binary_expression (%43, %45) {"+"} -// JSLIR-NEXT: // %46 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %47 = jsir.member_expression (%41, %46) -// JSLIR-NEXT: // %47 = "l" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %48 = jsir.binary_expression (%37, %47) {"+"} -// JSLIR-NEXT: // %48 = "shell" -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%48) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = [#jsir, , 27, 31, " s">, #jsir, , 62, 66, " e">, #jsir, , 87, 91, " l">, #jsir, , 112, 116, " l">]}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: %0 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.parenthesized_expression"(%2) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.binary_expression"(%4, %5) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: %8 = "jsir.binary_expression"(%6, %7) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.member_expression"(%3, %8) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.string_literal"() <{extra = #jsir, value = "h"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.binary_expression"(%9, %10) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %12 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.unary_expression"(%12) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.binary_expression"(%13, %14) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %16 = "jsir.parenthesized_expression"(%15) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jsir.unary_expression"(%17) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %20 = "jsir.unary_expression"(%19) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %21 = "jsir.binary_expression"(%18, %20) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %22 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %23 = "jsir.unary_expression"(%22) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %24 = "jsir.binary_expression"(%21, %23) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %25 = "jsir.member_expression"(%16, %24) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %26 = "jsir.binary_expression"(%11, %25) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %27 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %28 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any +// JSHIR-NEXT: %29 = "jsir.binary_expression"(%27, %28) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %30 = "jsir.parenthesized_expression"(%29) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %31 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %32 = "jsir.unary_expression"(%31) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %33 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %34 = "jsir.unary_expression"(%33) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %35 = "jsir.binary_expression"(%32, %34) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %36 = "jsir.member_expression"(%30, %35) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %37 = "jsir.binary_expression"(%26, %36) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %38 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %39 = "jsir.string_literal"() <{extra = #jsir, value = ""}> : () -> !jsir.any +// JSHIR-NEXT: %40 = "jsir.binary_expression"(%38, %39) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %41 = "jsir.parenthesized_expression"(%40) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %42 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %43 = "jsir.unary_expression"(%42) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %44 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %45 = "jsir.unary_expression"(%44) <{operator_ = "!", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %46 = "jsir.binary_expression"(%43, %45) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %47 = "jsir.member_expression"(%41, %46) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %48 = "jsir.binary_expression"(%37, %47) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%48) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[#jsir, , 27, 31, " s">, #jsir, , 62, 66, " e">, #jsir, , 87, 91, " l">, #jsir, , 112, 116, " l">]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %0 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.string_literal {#jsir, ""} +// JSHIR-NEXT: // %1 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} +// JSHIR-NEXT: // %2 = "false" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.parenthesized_expression (%2) +// JSHIR-NEXT: // %3 = "false" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %4 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %5 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.binary_expression (%4, %5) {"+"} +// JSHIR-NEXT: // %6 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %7 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.binary_expression (%6, %7) {"+"} +// JSHIR-NEXT: // %8 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.member_expression (%3, %8) +// JSHIR-NEXT: // %9 = "s" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.string_literal {#jsir, "h"} +// JSHIR-NEXT: // %10 = "h" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.binary_expression (%9, %10) {"+"} +// JSHIR-NEXT: // %11 = "sh" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %12 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.unary_expression (%12) {"!", true} +// JSHIR-NEXT: // %13 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.string_literal {#jsir, ""} +// JSHIR-NEXT: // %14 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.binary_expression (%13, %14) {"+"} +// JSHIR-NEXT: // %15 = "true" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.parenthesized_expression (%15) +// JSHIR-NEXT: // %16 = "true" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %17 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jsir.unary_expression (%17) {"!", true} +// JSHIR-NEXT: // %18 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %19 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.unary_expression (%19) {"!", true} +// JSHIR-NEXT: // %20 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %21 = jsir.binary_expression (%18, %20) {"+"} +// JSHIR-NEXT: // %21 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %22 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %22 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %23 = jsir.unary_expression (%22) {"!", true} +// JSHIR-NEXT: // %23 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %24 = jsir.binary_expression (%21, %23) {"+"} +// JSHIR-NEXT: // %24 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %25 = jsir.member_expression (%16, %24) +// JSHIR-NEXT: // %25 = "e" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %26 = jsir.binary_expression (%11, %25) {"+"} +// JSHIR-NEXT: // %26 = "she" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %27 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %27 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %28 = jsir.string_literal {#jsir, ""} +// JSHIR-NEXT: // %28 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %29 = jsir.binary_expression (%27, %28) {"+"} +// JSHIR-NEXT: // %29 = "false" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %30 = jsir.parenthesized_expression (%29) +// JSHIR-NEXT: // %30 = "false" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %31 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %31 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %32 = jsir.unary_expression (%31) {"!", true} +// JSHIR-NEXT: // %32 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %33 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %33 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %34 = jsir.unary_expression (%33) {"!", true} +// JSHIR-NEXT: // %34 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %35 = jsir.binary_expression (%32, %34) {"+"} +// JSHIR-NEXT: // %35 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %36 = jsir.member_expression (%30, %35) +// JSHIR-NEXT: // %36 = "l" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %37 = jsir.binary_expression (%26, %36) {"+"} +// JSHIR-NEXT: // %37 = "shel" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %38 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %38 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %39 = jsir.string_literal {#jsir, ""} +// JSHIR-NEXT: // %39 = "" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %40 = jsir.binary_expression (%38, %39) {"+"} +// JSHIR-NEXT: // %40 = "false" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %41 = jsir.parenthesized_expression (%40) +// JSHIR-NEXT: // %41 = "false" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %42 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %42 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %43 = jsir.unary_expression (%42) {"!", true} +// JSHIR-NEXT: // %43 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %44 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %44 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %45 = jsir.unary_expression (%44) {"!", true} +// JSHIR-NEXT: // %45 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %46 = jsir.binary_expression (%43, %45) {"+"} +// JSHIR-NEXT: // %46 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %47 = jsir.member_expression (%41, %46) +// JSHIR-NEXT: // %47 = "l" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %48 = jsir.binary_expression (%37, %47) {"+"} +// JSHIR-NEXT: // %48 = "shell" +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%48) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/obfuscated/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/or/README.generated.md index 3293e86..cb8336a 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/or/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/or/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/or/output.generated.txt index 197e1aa..894e0b7 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/or/output.generated.txt @@ -1,318 +1,254 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %37 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %38 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: %39 = "jslir.logical_expression_start"(%38) <{operator_ = "||"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %40 = "builtin.unrealized_conversion_cast"(%38) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%40, %38)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%39) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %41 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%41)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%42: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%39) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %43 = "jsir.variable_declarator"(%37, %42) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%43) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %30 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %31 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: %32 = "jslir.logical_expression_start"(%31) <{operator_ = "||"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %33 = "builtin.unrealized_conversion_cast"(%31) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%33, %31)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%32) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %34 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%34)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%35: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%32) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %36 = "jsir.variable_declarator"(%30, %35) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%36) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %23 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %24 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %25 = "jslir.logical_expression_start"(%24) <{operator_ = "||"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %26 = "builtin.unrealized_conversion_cast"(%24) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%26, %24)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%25) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %27 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%27)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%28: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%25) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %29 = "jsir.variable_declarator"(%23, %28) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%29) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jslir.logical_expression_start"(%17) <{operator_ = "||"}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %19 = "builtin.unrealized_conversion_cast"(%17) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%19, %17)[^bb2, ^bb1] <{operandSegmentSizes = array}> : (i1, !jsir.any) -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%18) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"(%20)[^bb2] : (!jsir.any) -> () -// JSLIR-NEXT: ^bb2(%21: !jsir.any): // 2 preds: ^bb0, ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%18) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %22 = "jsir.variable_declarator"(%16, %21) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%22) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 93, 96, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 109, 112, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 125, 128, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 141, 144, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %37 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %37 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %38 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %38 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %39 = jslir.logical_expression_start (%38) {"||"} -// JSLIR-NEXT: // %39 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %40 = builtin.unrealized_conversion_cast (%38) -// JSLIR-NEXT: // %40 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%40, %38) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%39) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %41 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %41 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%41) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%39) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %43 = jsir.variable_declarator (%37, %42) -// JSLIR-NEXT: // %43 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%43) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %30 = jsir.identifier_ref {"b"} -// JSLIR-NEXT: // %30 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %31 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %31 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %32 = jslir.logical_expression_start (%31) {"||"} -// JSLIR-NEXT: // %32 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %33 = builtin.unrealized_conversion_cast (%31) -// JSLIR-NEXT: // %33 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%33, %31) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%32) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %34 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %34 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%34) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%32) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %36 = jsir.variable_declarator (%30, %35) -// JSLIR-NEXT: // %36 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%36) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %23 = jsir.identifier_ref {"c"} -// JSLIR-NEXT: // %23 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.identifier {"x"} -// JSLIR-NEXT: // %24 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jslir.logical_expression_start (%24) {"||"} -// JSLIR-NEXT: // %25 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %26 = builtin.unrealized_conversion_cast (%24) -// JSLIR-NEXT: // %26 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%26, %24) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%25) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jsir.boolean_literal {true} -// JSLIR-NEXT: // %27 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%27) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%25) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %29 = jsir.variable_declarator (%23, %28) -// JSLIR-NEXT: // %29 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%29) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.identifier_ref {"d"} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier {"x"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jslir.logical_expression_start (%17) {"||"} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = builtin.unrealized_conversion_cast (%17) -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%19, %17) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%18) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.boolean_literal {false} -// JSLIR-NEXT: // %20 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br (%20) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%18) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.variable_declarator (%16, %21) -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%22) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"console"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 93, 96, 0, "log">} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier {"a"} -// JSLIR-NEXT: // %2 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier {"console"} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 109, 112, 0, "log">} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.identifier {"b"} -// JSLIR-NEXT: // %6 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier {"console"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 125, 128, 0, "log">} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier {"c"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.identifier {"console"} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 141, 144, 0, "log">} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.identifier {"d"} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.call_expression (%13, %14) -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%15) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ +// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () +// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 93, 96, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 109, 112, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 125, 128, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () +// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 141, 144, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %17 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %20 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"b"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %17 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %20 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"c"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.identifier {"x"} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {true} +// JSHIR-NEXT: // %20 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.identifier_ref {"d"} +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.identifier {"x"} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %20 = jsir.boolean_literal {false} +// JSHIR-NEXT: // %20 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%20) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // %18 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 93, 96, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"a"} +// JSHIR-NEXT: // %2 = true +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"console"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 109, 112, 0, "log">} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"b"} +// JSHIR-NEXT: // %6 = false +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"console"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 125, 128, 0, "log">} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier {"c"} +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%11) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.identifier {"console"} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 141, 144, 0, "log">} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.identifier {"d"} +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.call_expression (%13, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/or/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/or/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/README.generated.md deleted file mode 100644 index b6ee8cd..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/input.js deleted file mode 100644 index a7b6767..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/input.js +++ /dev/null @@ -1,8 +0,0 @@ -var a = true || true; -var b = false || false; -var c = x || true; -var d = x || false; -console.log(a); -console.log(b); -console.log(c); -console.log(d); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/output.generated.txt deleted file mode 100644 index 894e0b7..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/output.generated.txt +++ /dev/null @@ -1,254 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = true}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %16 = "jsir.identifier_ref"() <{name = "d"}> : () -> !jsir.any -// JSHIR-NEXT: %17 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %18 = "jshir.logical_expression"(%17) <{operator_ = "||"}> ({ -// JSHIR-NEXT: %20 = "jsir.boolean_literal"() <{value = false}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%20) : (!jsir.any) -> () -// JSHIR-NEXT: }) : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %19 = "jsir.variable_declarator"(%16, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 93, 96, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 109, 112, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "b"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.member_expression"(%8) <{literal_property = #jsir, , "log", 125, 128, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.identifier"() <{name = "c"}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.call_expression"(%9, %10) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%11) : (!jsir.any) -> () -// JSHIR-NEXT: %12 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %13 = "jsir.member_expression"(%12) <{literal_property = #jsir, , "log", 141, 144, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %14 = "jsir.identifier"() <{name = "d"}> : () -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.call_expression"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"a"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %17 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %20 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"b"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %17 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %20 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"c"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.identifier {"x"} -// JSHIR-NEXT: // %17 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {true} -// JSHIR-NEXT: // %20 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %16 = jsir.identifier_ref {"d"} -// JSHIR-NEXT: // %16 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %17 = jsir.identifier {"x"} -// JSHIR-NEXT: // %17 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %18 = jshir.logical_expression (%17) {"||"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %20 = jsir.boolean_literal {false} -// JSHIR-NEXT: // %20 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%20) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // %18 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %19 = jsir.variable_declarator (%16, %18) -// JSHIR-NEXT: // %19 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%19) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 93, 96, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"a"} -// JSHIR-NEXT: // %2 = true -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"console"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 109, 112, 0, "log">} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"b"} -// JSHIR-NEXT: // %6 = false -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"console"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.member_expression (%8) {#jsir, , "log", 125, 128, 0, "log">} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.identifier {"c"} -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.call_expression (%9, %10) -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%11) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.identifier {"console"} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.member_expression (%12) {#jsir, , "log", 141, 144, 0, "log">} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jsir.identifier {"d"} -// JSHIR-NEXT: // %14 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.call_expression (%13, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/or_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/simple/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/simple/README.generated.md index 8060c20..7fec99b 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/simple/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/simple/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/simple/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/simple/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/simple/output.generated.txt index 066ce05..89cd31c 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/simple/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/simple/output.generated.txt @@ -1,37 +1,37 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %0 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %1 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} -// JSLIR-NEXT: // %2 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: %0 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %0 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} +// JSHIR-NEXT: // %2 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/simple/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/simple/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/simple/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/simple/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/README.generated.md index 058ba02..7af6eb5 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/output.generated.txt index 2382c5a..3022e99 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/output.generated.txt @@ -1,60 +1,60 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.variable_declarator"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%5) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %4 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.variable_declarator (%3, %4) -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%5) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"a"} -// JSLIR-NEXT: // %0 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %1 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} -// JSLIR-NEXT: // %2 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.variable_declarator"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.binary_expression"(%0, %1) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %4 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.variable_declarator (%3, %4) +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"a"} +// JSHIR-NEXT: // %0 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.binary_expression (%0, %1) {"+"} +// JSHIR-NEXT: // %2 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/simple_symbol/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/switch/README.generated.md index c17983e..9ec393f 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/switch/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/switch/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/switch/output.generated.txt index f622274..b277b03 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/switch/output.generated.txt @@ -1,289 +1,199 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %28 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %29 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %30 = "jsir.variable_declarator"(%28, %29) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%30) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jslir.switch_statement_start"(%0) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: %2 = "jslir.switch_statement_case_start"(%1) <{case_idx = 0 : ui32}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.switch_statement_case_test"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.binary_expression"(%0, %3) <{operator_ = "==="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %5 = "builtin.unrealized_conversion_cast"(%4) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%5)[^bb2, ^bb4] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%2) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.break_statement"() : () -> () -// JSLIR-NEXT: "cf.br"()[^bb12] : () -> () -// JSLIR-NEXT: ^bb3: // no predecessors -// JSLIR-NEXT: "cf.br"()[^bb5] : () -> () -// JSLIR-NEXT: ^bb4: // pred: ^bb1 -// JSLIR-NEXT: %6 = "jslir.switch_statement_case_start"(%1) <{case_idx = 1 : ui32}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.switch_statement_case_test"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.binary_expression"(%0, %7) <{operator_ = "==="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %9 = "builtin.unrealized_conversion_cast"(%8) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%9)[^bb5, ^bb6] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb5: // 2 preds: ^bb3, ^bb4 -// JSLIR-NEXT: "jslir.control_flow_marker"(%6) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb7] : () -> () -// JSLIR-NEXT: ^bb6: // pred: ^bb4 -// JSLIR-NEXT: %10 = "jslir.switch_statement_case_start"(%1) <{case_idx = 2 : ui32}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.switch_statement_case_test"(%11) : (!jsir.any) -> () -// JSLIR-NEXT: %12 = "jsir.binary_expression"(%0, %11) <{operator_ = "==="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %13 = "builtin.unrealized_conversion_cast"(%12) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%13)[^bb7, ^bb9] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb7: // 2 preds: ^bb5, ^bb6 -// JSLIR-NEXT: "jslir.control_flow_marker"(%10) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %14 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.assignment_expression"(%14, %15) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%16) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.break_statement"() : () -> () -// JSLIR-NEXT: "cf.br"()[^bb12] : () -> () -// JSLIR-NEXT: ^bb8: // no predecessors -// JSLIR-NEXT: "cf.br"()[^bb10] : () -> () -// JSLIR-NEXT: ^bb9: // pred: ^bb6 -// JSLIR-NEXT: %17 = "jslir.switch_statement_case_start"(%1) <{case_idx = 3 : ui32}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.switch_statement_case_test"(%18) : (!jsir.any) -> () -// JSLIR-NEXT: %19 = "jsir.binary_expression"(%0, %18) <{operator_ = "==="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %20 = "builtin.unrealized_conversion_cast"(%19) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%20)[^bb10, ^bb12] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb10: // 2 preds: ^bb8, ^bb9 -// JSLIR-NEXT: "jslir.control_flow_marker"(%17) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %21 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %22 = "jsir.numeric_literal"() <{extra = #jsir, value = 5.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %23 = "jsir.assignment_expression"(%21, %22) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%23) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.break_statement"() : () -> () -// JSLIR-NEXT: "cf.br"()[^bb12] : () -> () -// JSLIR-NEXT: ^bb11: // no predecessors -// JSLIR-NEXT: "cf.br"()[^bb12] : () -> () -// JSLIR-NEXT: ^bb12: // 5 preds: ^bb2, ^bb7, ^bb9, ^bb10, ^bb11 -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jsir.empty_statement"() : () -> () -// JSLIR-NEXT: %24 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %25 = "jsir.member_expression"(%24) <{literal_property = #jsir, , "log", 130, 133, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %26 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %27 = "jsir.call_expression"(%25, %26) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%27) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %28 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %28 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %29 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %29 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %30 = jsir.variable_declarator (%28, %29) -// JSLIR-NEXT: // %30 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%30) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier {"x"} -// JSLIR-NEXT: // %0 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jslir.switch_statement_start (%0) -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jslir.switch_statement_case_start (%1) {0 : ui32} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %3 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.switch_statement_case_test (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.binary_expression (%0, %3) {"==="} -// JSLIR-NEXT: // %4 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = builtin.unrealized_conversion_cast (%4) -// JSLIR-NEXT: // %5 = false -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%5) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%2) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.break_statement -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb4: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jslir.switch_statement_case_start (%1) {1 : ui32} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %7 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.switch_statement_case_test (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.binary_expression (%0, %7) {"==="} -// JSLIR-NEXT: // %8 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = builtin.unrealized_conversion_cast (%8) -// JSLIR-NEXT: // %9 = true -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%9) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb5: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%6) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb6: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jslir.switch_statement_case_start (%1) {2 : ui32} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.switch_statement_case_test (%11) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.binary_expression (%0, %11) {"==="} -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = builtin.unrealized_conversion_cast (%12) -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%13) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb7: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%10) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSLIR-NEXT: // %15 = 4.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.assignment_expression (%14, %15) {"="} -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%16) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.break_statement -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb8: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb9: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jslir.switch_statement_case_start (%1) {3 : ui32} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.switch_statement_case_test (%18) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.binary_expression (%0, %18) {"==="} -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = builtin.unrealized_conversion_cast (%19) -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%20) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb10: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%17) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %21 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.numeric_literal {#jsir, 5.000000e+00 : f64} -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %23 = jsir.assignment_expression (%21, %22) {"="} -// JSLIR-NEXT: // %23 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%23) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.break_statement -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb11: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb12: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.empty_statement -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %24 = jsir.identifier {"console"} -// JSLIR-NEXT: // %24 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %25 = jsir.member_expression (%24) {#jsir, , "log", 130, 133, 0, "log">} -// JSLIR-NEXT: // %25 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %26 = jsir.identifier {"x"} -// JSLIR-NEXT: // %26 = 4.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %27 = jsir.call_expression (%25, %26) -// JSLIR-NEXT: // %27 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%27) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.variable_declarator"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: "jshir.switch_statement"(%0) ({ +// JSHIR-NEXT: "jshir.switch_case"() ({ +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.break_statement"() : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.switch_case"() ({ +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.switch_case"() ({ +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: "jshir.break_statement"() : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.switch_case"() ({ +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 5.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: "jshir.break_statement"() : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : (!jsir.any) -> () +// JSHIR-NEXT: "jsir.empty_statement"() : () -> () +// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.member_expression"(%1) <{literal_property = #jsir, , "log", 130, 133, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.call_expression"(%2, %3) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %6 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.variable_declarator (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"x"} +// JSHIR-NEXT: // %0 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.switch_statement (%0) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.switch_case ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.break_statement +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.switch_case ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.switch_case ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 3.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} +// JSHIR-NEXT: // %6 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.break_statement +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.switch_case ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 5.000000e+00 : f64} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.break_statement +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.empty_statement +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.identifier {"console"} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.member_expression (%1) {#jsir, , "log", 130, 133, 0, "log">} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.identifier {"x"} +// JSHIR-NEXT: // %3 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.call_expression (%2, %3) +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/switch/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/switch/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/README.generated.md deleted file mode 100644 index b455aed..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/input.js deleted file mode 100644 index 356a349..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/input.js +++ /dev/null @@ -1,13 +0,0 @@ -var x = 2; -switch (x) { - case 1: - break; - case 2: - case 3: - x = 4; - break; - case 4: - x = 5; - break; -}; -console.log(x); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/output.generated.txt deleted file mode 100644 index b277b03..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/output.generated.txt +++ /dev/null @@ -1,199 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.variable_declarator"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: "jshir.switch_statement"(%0) ({ -// JSHIR-NEXT: "jshir.switch_case"() ({ -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.break_statement"() : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.switch_case"() ({ -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.switch_case"() ({ -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: "jshir.break_statement"() : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.switch_case"() ({ -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%5) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 5.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: "jshir.break_statement"() : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : (!jsir.any) -> () -// JSHIR-NEXT: "jsir.empty_statement"() : () -> () -// JSHIR-NEXT: %1 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.member_expression"(%1) <{literal_property = #jsir, , "log", 130, 133, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %4 = "jsir.call_expression"(%2, %3) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %6 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.variable_declarator (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"x"} -// JSHIR-NEXT: // %0 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.switch_statement (%0) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.switch_case ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.break_statement -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.switch_case ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.switch_case ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 3.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSHIR-NEXT: // %6 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.break_statement -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.switch_case ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%5) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 5.000000e+00 : f64} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.break_statement -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.empty_statement -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.identifier {"console"} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.member_expression (%1) {#jsir, , "log", 130, 133, 0, "log">} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.identifier {"x"} -// JSHIR-NEXT: // %3 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.call_expression (%2, %3) -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%4) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/switch_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/README.generated.md index 83b76cd..d85f0d9 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/output.generated.txt index 115e7e9..e7e1c7c 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/output.generated.txt @@ -1,199 +1,181 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %18 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %20 = "jsir.variable_declarator"(%18, %19) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%20) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // pred: ^bb0 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %2 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.assignment_expression"(%2, %3) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%1) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb2: // no predecessors -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "e"}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.catch_clause_start"(%5) : (!jsir.any) -> () -// JSLIR-NEXT: %6 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%6) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%6) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %7 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.assignment_expression"(%7, %8) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%6) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb3] : () -> () -// JSLIR-NEXT: ^bb3: // 2 preds: ^bb1, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %10 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%10) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%10) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %11 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.assignment_expression"(%11, %12) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%13) : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%10) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb4] : () -> () -// JSLIR-NEXT: ^bb4: // pred: ^bb3 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %14 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.member_expression"(%14) <{literal_property = #jsir, , "log", 80, 83, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.call_expression"(%15, %16) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%17) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %19 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.variable_declarator (%18, %19) -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%20) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSLIR-NEXT: // %3 = 2.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.assignment_expression (%2, %3) {"="} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%4) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%1) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.identifier_ref {"e"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.catch_clause_start (%5) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %6 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%6) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%6) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.assignment_expression (%7, %8) {"="} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%9) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%6) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%10) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%10) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier_ref {"x"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSLIR-NEXT: // %12 = 4.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.assignment_expression (%11, %12) {"="} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%13) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%10) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb4: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.identifier {"console"} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.member_expression (%14) {#jsir, , "log", 80, 83, 0, "log">} -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.identifier {"x"} -// JSLIR-NEXT: // %16 = 4.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.call_expression (%15, %16) -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%17) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.try_statement"() ({ +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "e"}> : () -> !jsir.any +// JSHIR-NEXT: "jshir.catch_clause"(%4) ({ +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 80, 83, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.try_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"e"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.catch_clause (%4) ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} +// JSHIR-NEXT: // %5 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%6) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 80, 83, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"x"} +// JSHIR-NEXT: // %2 = 4.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/README.generated.md deleted file mode 100644 index b99ab27..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/input.js deleted file mode 100644 index 4124ed8..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/input.js +++ /dev/null @@ -1,9 +0,0 @@ -var x = 1; -try { - x = 2; -} catch (e) { - x = 3; -} finally { - x = 4; -} -console.log(x); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/output.generated.txt deleted file mode 100644 index e7e1c7c..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/output.generated.txt +++ /dev/null @@ -1,181 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = []}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.variable_declarator"(%4, %5) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.try_statement"() ({ -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 2.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "e"}> : () -> !jsir.any -// JSHIR-NEXT: "jshir.catch_clause"(%4) ({ -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 3.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.numeric_literal"() <{extra = #jsir, value = 4.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.assignment_expression"(%4, %5) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%6) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 80, 83, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.variable_declarator (%4, %5) -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.try_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 2.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 2.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"e"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.catch_clause (%4) ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 3.000000e+00 : f64} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier_ref {"x"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.numeric_literal {#jsir, 4.000000e+00 : f64} -// JSHIR-NEXT: // %5 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.assignment_expression (%4, %5) {"="} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%6) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 80, 83, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"x"} -// JSHIR-NEXT: // %2 = 4.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/try_catch_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/README.generated.md index 5795312..c4ab2b4 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/output.generated.txt index e3f94fb..9a2fc7a 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/output.generated.txt @@ -1,60 +1,60 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.assignment_expression"(%0, %1) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.variable_declarator"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%5) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %1 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.assignment_expression (%0, %1) {"="} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier_ref {"c"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier {"a"} -// JSLIR-NEXT: // %4 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.variable_declarator (%3, %4) -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%5) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.assignment_expression"(%0, %1) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "c"}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.variable_declarator"(%3, %4) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%5) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.assignment_expression (%0, %1) {"="} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.identifier_ref {"c"} +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"a"} +// JSHIR-NEXT: // %4 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.variable_declarator (%3, %4) +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%5) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/undeclared_var/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/README.generated.md index b8d70bf..d3013bb 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/output.generated.txt index b2d1239..5865606 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/output.generated.txt @@ -1,123 +1,123 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.assignment_expression"(%0, %1) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () -// JSLIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %4 = "jsir.update_expression"(%3) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () -// JSLIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSLIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any -// JSLIR-NEXT: %9 = "jsir.update_expression"(%8) <{operator_ = "++", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () -// JSLIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "should_be_0"}> : () -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.update_expression"(%11) <{operator_ = "--", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %13 = "jsir.assignment_expression"(%10, %12) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%13) : (!jsir.any) -> () -// JSLIR-NEXT: %14 = "jsir.identifier_ref"() <{name = "unknown"}> : () -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.identifier"() <{name = "getUnknown"}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.call_expression"(%15) : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %17 = "jsir.assignment_expression"(%14, %16) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%17) : (!jsir.any) -> () -// JSLIR-NEXT: %18 = "jsir.identifier_ref"() <{name = "unknown"}> : () -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.update_expression"(%18) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%19) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %1 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.assignment_expression (%0, %1) {"="} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%2) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.update_expression (%3) {"++", false} -// JSLIR-NEXT: // %4 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%4) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.identifier_ref {"b"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %6 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%7) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.identifier_ref {"b"} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.update_expression (%8) {"++", true} -// JSLIR-NEXT: // %9 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%9) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.identifier_ref {"should_be_0"} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.update_expression (%11) {"--", true} -// JSLIR-NEXT: // %12 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.assignment_expression (%10, %12) {"="} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%13) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.identifier_ref {"unknown"} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.identifier {"getUnknown"} -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.call_expression (%15) -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.assignment_expression (%14, %16) {"="} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%17) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.identifier_ref {"unknown"} -// JSLIR-NEXT: // %18 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.update_expression (%18) {"++", false} -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%19) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.assignment_expression"(%0, %1) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%2) : (!jsir.any) -> () +// JSHIR-NEXT: %3 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %4 = "jsir.update_expression"(%3) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%4) : (!jsir.any) -> () +// JSHIR-NEXT: %5 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.assignment_expression"(%5, %6) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "b"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.update_expression"(%8) <{operator_ = "++", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%9) : (!jsir.any) -> () +// JSHIR-NEXT: %10 = "jsir.identifier_ref"() <{name = "should_be_0"}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %12 = "jsir.update_expression"(%11) <{operator_ = "--", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %13 = "jsir.assignment_expression"(%10, %12) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%13) : (!jsir.any) -> () +// JSHIR-NEXT: %14 = "jsir.identifier_ref"() <{name = "unknown"}> : () -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.identifier"() <{name = "getUnknown"}> : () -> !jsir.any +// JSHIR-NEXT: %16 = "jsir.call_expression"(%15) : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %17 = "jsir.assignment_expression"(%14, %16) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%17) : (!jsir.any) -> () +// JSHIR-NEXT: %18 = "jsir.identifier_ref"() <{name = "unknown"}> : () -> !jsir.any +// JSHIR-NEXT: %19 = "jsir.update_expression"(%18) <{operator_ = "++", prefix = false}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%19) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.assignment_expression (%0, %1) {"="} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%2) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.update_expression (%3) {"++", false} +// JSHIR-NEXT: // %4 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%4) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.identifier_ref {"b"} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %6 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.assignment_expression (%5, %6) {"="} +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier_ref {"b"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.update_expression (%8) {"++", true} +// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%9) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.identifier_ref {"should_be_0"} +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.update_expression (%11) {"--", true} +// JSHIR-NEXT: // %12 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.assignment_expression (%10, %12) {"="} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%13) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.identifier_ref {"unknown"} +// JSHIR-NEXT: // %14 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.identifier {"getUnknown"} +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %16 = jsir.call_expression (%15) +// JSHIR-NEXT: // %16 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %17 = jsir.assignment_expression (%14, %16) {"="} +// JSHIR-NEXT: // %17 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%17) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %18 = jsir.identifier_ref {"unknown"} +// JSHIR-NEXT: // %18 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %19 = jsir.update_expression (%18) {"++", false} +// JSHIR-NEXT: // %19 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%19) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/update_expression/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/void_0/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/void_0/README.generated.md index 87a047d..276cc6a 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/void_0/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/void_0/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/void_0/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/void_0/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/void_0/output.generated.txt index 077f45e..0c2cf4b 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/void_0/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/void_0/output.generated.txt @@ -1,49 +1,49 @@ -// JSLIR: "jsir.file"() <{comments = []}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any -// JSLIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "jsir.unary_expression"(%1) <{operator_ = "void", prefix = true}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %3 = "jsir.variable_declarator"(%0, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jsir.identifier_ref {"a"} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} -// JSLIR-NEXT: // %1 = 0.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = jsir.unary_expression (%1) {"void", true} -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jsir.variable_declarator (%0, %2) -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%3) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = []}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %0 = "jsir.identifier_ref"() <{name = "a"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.numeric_literal"() <{extra = #jsir, value = 0.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.unary_expression"(%1) <{operator_ = "void", prefix = true}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.variable_declarator"(%0, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier_ref {"a"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.numeric_literal {#jsir, 0.000000e+00 : f64} +// JSHIR-NEXT: // %1 = 0.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.unary_expression (%1) {"void", true} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.variable_declarator (%0, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/void_0/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/void_0/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/void_0/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/void_0/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/while/README.generated.md index 9dd2653..5ac421b 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/while/README.generated.md @@ -3,6 +3,6 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/while/input.js \ - --passes "source2ast,ast2hir,hir2lir" \ + --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/while/output.generated.txt index 2f18192..cb38535 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while/output.generated.txt +++ b/maldoca/js/ir/analyses/constant_propagation/tests/while/output.generated.txt @@ -1,184 +1,163 @@ -// JSLIR: "jsir.file"() <{comments = [#jsir, , 0, 53, " TODO(b/217662731): `is_a_const` should be a const.">]}> ({ -// JSLIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %20 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %21 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %22 = "jsir.variable_declarator"(%20, %21) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%22) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: %0 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb1: // 2 preds: ^bb0, ^bb2 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %1 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSLIR-NEXT: %2 = "builtin.unrealized_conversion_cast"(%1) : (!jsir.any) -> i1 -// JSLIR-NEXT: "cf.cond_br"(%2)[^bb2, ^bb3] <{operandSegmentSizes = array}> : (i1) -> () -// JSLIR-NEXT: ^bb2: // pred: ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %3 = "jslir.control_flow_starter"() <{kind = #jsir}> : () -> !jsir.any -// JSLIR-NEXT: "jslir.control_flow_marker"(%3) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%3) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %4 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %5 = "jsir.identifier"() <{name = "not_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %6 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %7 = "jsir.binary_expression"(%5, %6) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: %8 = "jsir.assignment_expression"(%4, %7) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%8) : (!jsir.any) -> () -// JSLIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSLIR-NEXT: %17 = "jsir.identifier_ref"() <{name = "is_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %18 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSLIR-NEXT: %19 = "jsir.variable_declarator"(%17, %18) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.exprs_region_end"(%19) : (!jsir.any) -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: "jslir.control_flow_marker"(%3) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: "cf.br"()[^bb1] : () -> () -// JSLIR-NEXT: ^bb3: // pred: ^bb1 -// JSLIR-NEXT: "jslir.control_flow_marker"(%0) <{kind = #jsir}> : (!jsir.any) -> () -// JSLIR-NEXT: %9 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %10 = "jsir.member_expression"(%9) <{literal_property = #jsir, , "log", 153, 156, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %11 = "jsir.identifier"() <{name = "not_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %12 = "jsir.call_expression"(%10, %11) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%12) : (!jsir.any) -> () -// JSLIR-NEXT: %13 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSLIR-NEXT: %14 = "jsir.member_expression"(%13) <{literal_property = #jsir, , "log", 179, 182, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSLIR-NEXT: %15 = "jsir.identifier"() <{name = "is_a_const"}> : () -> !jsir.any -// JSLIR-NEXT: %16 = "jsir.call_expression"(%14, %15) : (!jsir.any, !jsir.any) -> !jsir.any -// JSLIR-NEXT: "jsir.expression_statement"(%16) : (!jsir.any) -> () -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: }) : () -> () -// JSLIR-NEXT: jsir.file {[#jsir, , 0, 53, " TODO(b/217662731): `is_a_const` should be a const.">]} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.program {"script"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %20 = jsir.identifier_ref {"not_a_const"} -// JSLIR-NEXT: // %20 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %21 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %21 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %22 = jsir.variable_declarator (%20, %21) -// JSLIR-NEXT: // %22 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%22) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %0 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %0 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb1: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %1 = jsir.identifier {"x"} -// JSLIR-NEXT: // %1 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %2 = builtin.unrealized_conversion_cast (%1) -// JSLIR-NEXT: // %2 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.cond_br (%2) {array} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb2: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %3 = jslir.control_flow_starter {#jsir} -// JSLIR-NEXT: // %3 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%3) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%3) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %4 = jsir.identifier_ref {"not_a_const"} -// JSLIR-NEXT: // %4 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %5 = jsir.identifier {"not_a_const"} -// JSLIR-NEXT: // %5 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %6 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %6 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %7 = jsir.binary_expression (%5, %6) {"+"} -// JSLIR-NEXT: // %7 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %8 = jsir.assignment_expression (%4, %7) {"="} -// JSLIR-NEXT: // %8 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%8) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %17 = jsir.identifier_ref {"is_a_const"} -// JSLIR-NEXT: // %17 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %18 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSLIR-NEXT: // %18 = 1.000000e+00 : f64 -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %19 = jsir.variable_declarator (%17, %18) -// JSLIR-NEXT: // %19 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.exprs_region_end (%19) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%3) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: cf.br -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: ^bb3: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jslir.control_flow_marker (%0) {#jsir} -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %9 = jsir.identifier {"console"} -// JSLIR-NEXT: // %9 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %10 = jsir.member_expression (%9) {#jsir, , "log", 153, 156, 0, "log">} -// JSLIR-NEXT: // %10 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %11 = jsir.identifier {"not_a_const"} -// JSLIR-NEXT: // %11 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %12 = jsir.call_expression (%10, %11) -// JSLIR-NEXT: // %12 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%12) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %13 = jsir.identifier {"console"} -// JSLIR-NEXT: // %13 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %14 = jsir.member_expression (%13) {#jsir, , "log", 179, 182, 0, "log">} -// JSLIR-NEXT: // %14 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %15 = jsir.identifier {"is_a_const"} -// JSLIR-NEXT: // %15 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: %16 = jsir.call_expression (%14, %15) -// JSLIR-NEXT: // %16 = -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: jsir.expression_statement (%16) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }, { -// JSLIR-NEXT: ^bb0: -// JSLIR-NEXT: // -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } -// JSLIR-NEXT: }) -// JSLIR-NEXT: // State [default = ] { } +// JSHIR: "jsir.file"() <{comments = [#jsir, , 0, 53, " TODO(b/217662731): `is_a_const` should be a const.">]}> ({ +// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.variable_declarator"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%10) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: "jshir.while_statement"() ({ +// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any +// JSHIR-NEXT: "jsir.expr_region_end"(%8) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: "jshir.block_statement"() ({ +// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %9 = "jsir.identifier"() <{name = "not_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %10 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %11 = "jsir.binary_expression"(%9, %10) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: %12 = "jsir.assignment_expression"(%8, %11) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%12) : (!jsir.any) -> () +// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ +// JSHIR-NEXT: %13 = "jsir.identifier_ref"() <{name = "is_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %14 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any +// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 153, 156, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "not_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () +// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any +// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 179, 182, 0, "log">}> : (!jsir.any) -> !jsir.any +// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "is_a_const"}> : () -> !jsir.any +// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any +// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: }) : () -> () +// JSHIR-NEXT: jsir.file {[#jsir, , 0, 53, " TODO(b/217662731): `is_a_const` should be a const.">]} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.program {"script"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier_ref {"not_a_const"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.variable_declarator (%8, %9) +// JSHIR-NEXT: // %10 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%10) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.while_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier {"x"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expr_region_end (%8) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jshir.block_statement ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %8 = jsir.identifier_ref {"not_a_const"} +// JSHIR-NEXT: // %8 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %9 = jsir.identifier {"not_a_const"} +// JSHIR-NEXT: // %9 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %10 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %10 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %11 = jsir.binary_expression (%9, %10) {"+"} +// JSHIR-NEXT: // %11 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %12 = jsir.assignment_expression (%8, %11) {"="} +// JSHIR-NEXT: // %12 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%12) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %13 = jsir.identifier_ref {"is_a_const"} +// JSHIR-NEXT: // %13 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %14 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} +// JSHIR-NEXT: // %14 = 1.000000e+00 : f64 +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %15 = jsir.variable_declarator (%13, %14) +// JSHIR-NEXT: // %15 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.exprs_region_end (%15) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %0 = jsir.identifier {"console"} +// JSHIR-NEXT: // %0 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 153, 156, 0, "log">} +// JSHIR-NEXT: // %1 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %2 = jsir.identifier {"not_a_const"} +// JSHIR-NEXT: // %2 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) +// JSHIR-NEXT: // %3 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%3) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %4 = jsir.identifier {"console"} +// JSHIR-NEXT: // %4 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 179, 182, 0, "log">} +// JSHIR-NEXT: // %5 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %6 = jsir.identifier {"is_a_const"} +// JSHIR-NEXT: // %6 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) +// JSHIR-NEXT: // %7 = +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: jsir.expression_statement (%7) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }, { +// JSHIR-NEXT: ^bb0: +// JSHIR-NEXT: // +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } +// JSHIR-NEXT: }) +// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/while/run.generated.lit index fa9a70a..f120aee 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while/run.generated.lit +++ b/maldoca/js/ir/analyses/constant_propagation/tests/while/run.generated.lit @@ -1,5 +1,5 @@ // RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ // RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir,hir2lir" \ +// RUN: --passes "source2ast,ast2hir" \ // RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSLIR "$(dirname %s)"/output.generated.txt +// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/BUILD similarity index 100% rename from maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/BUILD rename to maldoca/js/ir/analyses/constant_propagation/tests/while_dead/BUILD diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/README.generated.md similarity index 87% rename from maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/README.generated.md rename to maldoca/js/ir/analyses/constant_propagation/tests/while_dead/README.generated.md index 0608814..74e197c 100644 --- a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/README.generated.md +++ b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/README.generated.md @@ -2,7 +2,7 @@ To run manually: ```shell bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/input.js \ + --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/input.js \ --passes "source2ast,ast2hir" \ --jsir_analysis constant_propagation ``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/input.js similarity index 100% rename from maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/input.js rename to maldoca/js/ir/analyses/constant_propagation/tests/while_dead/input.js diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/output.generated.txt similarity index 100% rename from maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/output.generated.txt rename to maldoca/js/ir/analyses/constant_propagation/tests/while_dead/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead/run.generated.lit similarity index 100% rename from maldoca/js/ir/analyses/constant_propagation/tests/and_jshir/run.generated.lit rename to maldoca/js/ir/analyses/constant_propagation/tests/while_dead/run.generated.lit diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/README.generated.md deleted file mode 100644 index c083f2f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_dead_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/BUILD b/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/BUILD deleted file mode 100644 index 9944d5f..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -load("//bazel:lit.bzl", "glob_lit_tests") - -package(default_applicable_licenses = ["//:license"]) - -licenses(["notice"]) - -glob_lit_tests( - name = "all_tests", - data = [ - "README.generated.md", - "input.js", - "output.generated.txt", - "//maldoca/js/ir:lit_test_files", - ], - test_file_exts = [ - "lit", - ], -) diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/README.generated.md b/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/README.generated.md deleted file mode 100644 index ce21d9d..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/README.generated.md +++ /dev/null @@ -1,8 +0,0 @@ -To run manually: - -```shell -bazel run //maldoca/js/ir:jsir_gen -- \ - --input_file $(pwd)/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/input.js \ - --passes "source2ast,ast2hir" \ - --jsir_analysis constant_propagation -``` diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/input.js b/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/input.js deleted file mode 100644 index 3a8a967..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/input.js +++ /dev/null @@ -1,9 +0,0 @@ -// TODO(b/217662731): `is_a_const` should be a const. - -var not_a_const = 1; -while (x) { - not_a_const = not_a_const + 1; - var is_a_const = 1; -} -console.log(not_a_const); -console.log(is_a_const); diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/output.generated.txt b/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/output.generated.txt deleted file mode 100644 index cb38535..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/output.generated.txt +++ /dev/null @@ -1,163 +0,0 @@ -// JSHIR: "jsir.file"() <{comments = [#jsir, , 0, 53, " TODO(b/217662731): `is_a_const` should be a const.">]}> ({ -// JSHIR-NEXT: "jsir.program"() <{source_type = "script"}> ({ -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.variable_declarator"(%8, %9) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%10) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: "jshir.while_statement"() ({ -// JSHIR-NEXT: %8 = "jsir.identifier"() <{name = "x"}> : () -> !jsir.any -// JSHIR-NEXT: "jsir.expr_region_end"(%8) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: "jshir.block_statement"() ({ -// JSHIR-NEXT: %8 = "jsir.identifier_ref"() <{name = "not_a_const"}> : () -> !jsir.any -// JSHIR-NEXT: %9 = "jsir.identifier"() <{name = "not_a_const"}> : () -> !jsir.any -// JSHIR-NEXT: %10 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %11 = "jsir.binary_expression"(%9, %10) <{operator_ = "+"}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: %12 = "jsir.assignment_expression"(%8, %11) <{operator_ = "="}> : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%12) : (!jsir.any) -> () -// JSHIR-NEXT: "jsir.variable_declaration"() <{kind = "var"}> ({ -// JSHIR-NEXT: %13 = "jsir.identifier_ref"() <{name = "is_a_const"}> : () -> !jsir.any -// JSHIR-NEXT: %14 = "jsir.numeric_literal"() <{extra = #jsir, value = 1.000000e+00 : f64}> : () -> !jsir.any -// JSHIR-NEXT: %15 = "jsir.variable_declarator"(%13, %14) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.exprs_region_end"(%15) : (!jsir.any) -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: %0 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %1 = "jsir.member_expression"(%0) <{literal_property = #jsir, , "log", 153, 156, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %2 = "jsir.identifier"() <{name = "not_a_const"}> : () -> !jsir.any -// JSHIR-NEXT: %3 = "jsir.call_expression"(%1, %2) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%3) : (!jsir.any) -> () -// JSHIR-NEXT: %4 = "jsir.identifier"() <{name = "console"}> : () -> !jsir.any -// JSHIR-NEXT: %5 = "jsir.member_expression"(%4) <{literal_property = #jsir, , "log", 179, 182, 0, "log">}> : (!jsir.any) -> !jsir.any -// JSHIR-NEXT: %6 = "jsir.identifier"() <{name = "is_a_const"}> : () -> !jsir.any -// JSHIR-NEXT: %7 = "jsir.call_expression"(%5, %6) : (!jsir.any, !jsir.any) -> !jsir.any -// JSHIR-NEXT: "jsir.expression_statement"(%7) : (!jsir.any) -> () -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: }) : () -> () -// JSHIR-NEXT: jsir.file {[#jsir, , 0, 53, " TODO(b/217662731): `is_a_const` should be a const.">]} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.program {"script"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier_ref {"not_a_const"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %9 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.variable_declarator (%8, %9) -// JSHIR-NEXT: // %10 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%10) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.while_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier {"x"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expr_region_end (%8) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jshir.block_statement ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %8 = jsir.identifier_ref {"not_a_const"} -// JSHIR-NEXT: // %8 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %9 = jsir.identifier {"not_a_const"} -// JSHIR-NEXT: // %9 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %10 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %10 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %11 = jsir.binary_expression (%9, %10) {"+"} -// JSHIR-NEXT: // %11 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %12 = jsir.assignment_expression (%8, %11) {"="} -// JSHIR-NEXT: // %12 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%12) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.variable_declaration {"var"} ({ -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %13 = jsir.identifier_ref {"is_a_const"} -// JSHIR-NEXT: // %13 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %14 = jsir.numeric_literal {#jsir, 1.000000e+00 : f64} -// JSHIR-NEXT: // %14 = 1.000000e+00 : f64 -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %15 = jsir.variable_declarator (%13, %14) -// JSHIR-NEXT: // %15 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.exprs_region_end (%15) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %0 = jsir.identifier {"console"} -// JSHIR-NEXT: // %0 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %1 = jsir.member_expression (%0) {#jsir, , "log", 153, 156, 0, "log">} -// JSHIR-NEXT: // %1 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %2 = jsir.identifier {"not_a_const"} -// JSHIR-NEXT: // %2 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %3 = jsir.call_expression (%1, %2) -// JSHIR-NEXT: // %3 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%3) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %4 = jsir.identifier {"console"} -// JSHIR-NEXT: // %4 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %5 = jsir.member_expression (%4) {#jsir, , "log", 179, 182, 0, "log">} -// JSHIR-NEXT: // %5 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %6 = jsir.identifier {"is_a_const"} -// JSHIR-NEXT: // %6 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: %7 = jsir.call_expression (%5, %6) -// JSHIR-NEXT: // %7 = -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: jsir.expression_statement (%7) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }, { -// JSHIR-NEXT: ^bb0: -// JSHIR-NEXT: // -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } -// JSHIR-NEXT: }) -// JSHIR-NEXT: // State [default = ] { } diff --git a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/run.generated.lit b/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/run.generated.lit deleted file mode 100644 index f120aee..0000000 --- a/maldoca/js/ir/analyses/constant_propagation/tests/while_jshir/run.generated.lit +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: CURRENT_FILE_BASENAME=$(basename %s .lit) && \ -// RUN: jsir_gen --input_file "$(dirname %s)"/input.js \ -// RUN: --passes "source2ast,ast2hir" \ -// RUN: --jsir_analysis constant_propagation \ -// RUN: | FileCheck --check-prefix JSHIR "$(dirname %s)"/output.generated.txt diff --git a/maldoca/js/ir/analyses/dataflow_analysis.h b/maldoca/js/ir/analyses/dataflow_analysis.h index d5b5d71..bff8a3c 100644 --- a/maldoca/js/ir/analyses/dataflow_analysis.h +++ b/maldoca/js/ir/analyses/dataflow_analysis.h @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,10 +19,14 @@ #include #include #include +#include #include #include #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/DenseMapInfo.h" +#include "llvm/ADT/Hashing.h" +#include "llvm/ADT/PointerUnion.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/Casting.h" #include "llvm/Support/SaveAndRestore.h" @@ -76,9 +80,9 @@ class JsirStateElement : public mlir::AnalysisState { : AnalysisState(anchor) {} // Read-only. Please use JsirStateRef to modify the value. - const T &value() const { return value_; } + const T& value() const { return value_; } - void print(llvm::raw_ostream &os) const override { value_.print(os); } + void print(llvm::raw_ostream& os) const override { value_.print(os); } private: friend class JsirStateRef; @@ -87,31 +91,83 @@ class JsirStateElement : public mlir::AnalysisState { } // namespace detail -enum class LivenessKind { kLiveIfEqualOrUnknown, kLiveIfNotEqualOrUnknown }; +enum class LivenessKind { + kLiveIfTruthyOrUnknown, + kLiveIfFalsyOrUnknown, + kLiveIfEqualOrUnknown, + kLiveIfNotEqualOrUnknown +}; + +// TODO Can we extend an std::tuple instead of defining the DenseMapInfo below? +struct LivenessInfo { + LivenessKind kind; + llvm::SmallVector> values; + + bool operator==(const LivenessInfo& other) const { + return kind == other.kind && values == other.values; + } +}; + +} // namespace maldoca + +namespace llvm { + +template <> +struct DenseMapInfo { + using TupleInfo = llvm::DenseMapInfo>>>; + using KindInfo = llvm::DenseMapInfo; + using ValueInfo = + llvm::DenseMapInfo>; + + static maldoca::LivenessInfo getEmptyKey() { + auto [kind, values] = TupleInfo::getEmptyKey(); + return maldoca::LivenessInfo{.kind = kind, .values = std::move(values)}; + } + + static maldoca::LivenessInfo getTombstoneKey() { + auto [kind, values] = TupleInfo::getTombstoneKey(); + return maldoca::LivenessInfo{.kind = kind, .values = std::move(values)}; + } + + static llvm::hash_code getHashValue(maldoca::LivenessInfo info) { + auto kind_hash = KindInfo::getHashValue(info.kind); + for (auto value : info.values) { + kind_hash = hash_combine(kind_hash, ValueInfo::getHashValue(value)); + } + return kind_hash; + } -using LivenessInfo = - std::tuple, - LivenessKind>; + static bool isEqual(const maldoca::LivenessInfo& a, + const maldoca::LivenessInfo& b) { + return TupleInfo::isEqual({a.kind, a.values}, {b.kind, b.values}); + } +}; + +} // namespace llvm + +namespace maldoca { class JsirGeneralCfgEdge : public mlir::GenericLatticeAnchorBase< JsirGeneralCfgEdge, - std::tuple, mlir::SmallVector, std::optional>> { public: using Base::Base; - mlir::ProgramPoint *getPred() const { return std::get<0>(getValue()); } + mlir::ProgramPoint* getPred() const { return std::get<0>(getValue()); } - mlir::ProgramPoint *getSucc() const { return std::get<1>(getValue()); } + mlir::ProgramPoint* getSucc() const { return std::get<1>(getValue()); } - const mlir::SmallVector &getPredValues() const { + const mlir::SmallVector& getPredValues() const { return std::get<2>(getValue()); } - const mlir::SmallVector &getSuccValues() const { + const mlir::SmallVector& getSuccValues() const { return std::get<3>(getValue()); } @@ -119,7 +175,7 @@ class JsirGeneralCfgEdge return std::get<4>(getValue()); } - void print(llvm::raw_ostream &os) const override { + void print(llvm::raw_ostream& os) const override { os << "JsirGeneralCfgEdge"; os << "\n pred: "; getPred()->print(os); @@ -131,7 +187,13 @@ class JsirGeneralCfgEdge os << getSuccValues().size(); if (getLivenessInfo().has_value()) { os << "\n liveness kind: "; - switch (std::get<2>(getLivenessInfo().value())) { + switch (getLivenessInfo().value().kind) { + case LivenessKind::kLiveIfTruthyOrUnknown: + os << "LiveIfTruthyOrUnknown"; + break; + case LivenessKind::kLiveIfFalsyOrUnknown: + os << "LiveIfFalsyOrUnknown"; + break; case LivenessKind::kLiveIfEqualOrUnknown: os << "LiveIfEqualOrUnknown"; break; @@ -159,45 +221,45 @@ class JsirStateRef { explicit JsirStateRef() : element_(nullptr), solver_(nullptr), analysis_(nullptr) {} - explicit JsirStateRef(detail::JsirStateElement *element, - mlir::DataFlowSolver *solver, - mlir::DataFlowAnalysis *analysis) + explicit JsirStateRef(detail::JsirStateElement* element, + mlir::DataFlowSolver* solver, + mlir::DataFlowAnalysis* analysis) : element_(element), solver_(solver), analysis_(analysis) {} bool operator==(std::nullptr_t) const { return element_ == nullptr; } bool operator!=(std::nullptr_t) const { return element_ != nullptr; } - detail::JsirStateElement *element() { return element_; } + detail::JsirStateElement* element() { return element_; } - const T &value() const { return element_->value(); } + const T& value() const { return element_->value(); } // Marks a program point as depending on this state. // This means that whenever this state is updated, we trigger a visit() of // that program point. - void AddDependent(mlir::ProgramPoint *point); + void AddDependent(mlir::ProgramPoint* point); // Writes the state and triggers visit()s of its dependents. - void Write(absl::FunctionRef write_fn); + void Write(absl::FunctionRef write_fn); // Writes the state and triggers visit()s of its dependents. - void Write(T &&lattice); - void Write(const T &lattice); + void Write(T&& lattice); + void Write(const T& lattice); // Joins the state and triggers visit()s of its dependents. - void Join(const T &lattice); + void Join(const T& lattice); private: // Points to the actual data attached to the program point. - detail::JsirStateElement *element_; + detail::JsirStateElement* element_; // The solver that drives the worklist algorithm. // We need this to access the solver APIs to propagate changes. - mlir::DataFlowSolver *solver_; + mlir::DataFlowSolver* solver_; // The analysis that this state belongs to. // When we schedule a new program point to be visited, we need to specify the // analysis, hence the need of this field. - mlir::DataFlowAnalysis *analysis_; + mlir::DataFlowAnalysis* analysis_; }; // A lattice that represents if a piece of code is executable. @@ -206,19 +268,19 @@ class JsirExecutable : public JsirState { public: explicit JsirExecutable(bool executable = false) : executable_(executable) {} - mlir::ChangeResult Join(const JsirExecutable &other) override; + mlir::ChangeResult Join(const JsirExecutable& other) override; - const bool &operator*() const { return executable_; } + const bool& operator*() const { return executable_; } - bool operator==(const JsirExecutable &rhs) const override { + bool operator==(const JsirExecutable& rhs) const override { return executable_ == rhs.executable_; } - bool operator!=(const JsirExecutable &rhs) const override { + bool operator!=(const JsirExecutable& rhs) const override { return !(operator==(rhs)); } - void print(llvm::raw_ostream &os) const override; + void print(llvm::raw_ostream& os) const override; private: bool executable_ = false; @@ -230,16 +292,16 @@ class JsirDenseStates { virtual ~JsirDenseStates() = default; // Gets the state attached before an op. - virtual T GetStateBefore(mlir::Operation *op) = 0; + virtual T GetStateBefore(mlir::Operation* op) = 0; // Gets the state attached after an op. - virtual T GetStateAfter(mlir::Operation *op) = 0; + virtual T GetStateAfter(mlir::Operation* op) = 0; // Gets the state attached at the entry of a block. - virtual T GetStateAtEntryOf(mlir::Block *block) = 0; + virtual T GetStateAtEntryOf(mlir::Block* block) = 0; // Gets the state attached at the end of a block. - virtual T GetStateAtEndOf(mlir::Block *block) = 0; + virtual T GetStateAtEndOf(mlir::Block* block) = 0; }; template @@ -261,10 +323,10 @@ class JsirDataFlowAnalysisPrinter { // %result0 = an_op (%arg0, %arg1, ...) // %result1 = another_op (%arg0, %arg1, ...) // ... - virtual void PrintOp(mlir::Operation *op, size_t num_indents, - mlir::AsmState &asm_state, llvm::raw_ostream &os) = 0; + virtual void PrintOp(mlir::Operation* op, size_t num_indents, + mlir::AsmState& asm_state, llvm::raw_ostream& os) = 0; - std::string PrintOp(mlir::Operation *op) { + std::string PrintOp(mlir::Operation* op) { std::string output; llvm::raw_string_ostream os(output); mlir::AsmState asm_state(op); @@ -287,14 +349,14 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, public JsirDenseStates>, public JsirSparseStates> { public: - explicit JsirDataFlowAnalysis(mlir::DataFlowSolver &solver) + explicit JsirDataFlowAnalysis(mlir::DataFlowSolver& solver) : mlir::DataFlowAnalysis(solver), solver_(solver) { registerAnchorKind(); } // Set the initial state of an entry block for forward analysis or exit block // for backward analysis. - virtual void InitializeBoundaryBlock(mlir::Block *block, + virtual void InitializeBoundaryBlock(mlir::Block* block, JsirStateRef boundary_state) { std::vector> arg_states; for (mlir::Value arg : block->getArguments()) { @@ -312,20 +374,20 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, // an entry block for a forward analysis, or the exit state of an exit block // for a backward analysis. virtual void InitializeBoundaryBlock( - mlir::Block *block, JsirStateRef boundary_state, + mlir::Block* block, JsirStateRef boundary_state, llvm::MutableArrayRef> arg_states) = 0; // Gets the state attached before an op. - JsirStateRef GetStateBefore(mlir::Operation *op) final; + JsirStateRef GetStateBefore(mlir::Operation* op) final; // Gets the state attached after an op. - JsirStateRef GetStateAfter(mlir::Operation *op) final; + JsirStateRef GetStateAfter(mlir::Operation* op) final; // Gets the state attached at the entry of a block. - JsirStateRef GetStateAtEntryOf(mlir::Block *block) final; + JsirStateRef GetStateAtEntryOf(mlir::Block* block) final; // Gets the state attached at the end of a block. - JsirStateRef GetStateAtEndOf(mlir::Block *block) final; + JsirStateRef GetStateAtEndOf(mlir::Block* block) final; // This virtual method is the transfer function for an operation. It is called // by its overloaded protected method. Same as its version in dense analysis, @@ -351,8 +413,8 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, // | Output | Results | Operands | // +--------+-------------------+-------------------+ virtual void VisitOp( - mlir::Operation *op, llvm::ArrayRef sparse_input, - const StateT *dense_input, + mlir::Operation* op, llvm::ArrayRef sparse_input, + const StateT* dense_input, llvm::MutableArrayRef> sparse_output, JsirStateRef dense_output) = 0; @@ -365,46 +427,46 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, // %result0 = an_op (%arg0, %arg1, ...) // %result1 = another_op (%arg0, %arg1, ...) // ... - void PrintOp(mlir::Operation *op, size_t num_indents, - mlir::AsmState &asm_state, llvm::raw_ostream &os) override; + void PrintOp(mlir::Operation* op, size_t num_indents, + mlir::AsmState& asm_state, llvm::raw_ostream& os) override; using JsirDataFlowAnalysisPrinter::PrintOp; - void PrintRegion(mlir::Region ®ion, size_t num_indents, - mlir::AsmState &asm_state, llvm::raw_ostream &os); + void PrintRegion(mlir::Region& region, size_t num_indents, + mlir::AsmState& asm_state, llvm::raw_ostream& os); // Callbacks for `PrintOp`. See comments of `PrintOp` for the format. - virtual void PrintAtBlockEntry(mlir::Block &block, size_t num_indents, - llvm::raw_ostream &os); - virtual void PrintAfterOp(mlir::Operation *op, size_t num_indents, - mlir::AsmState &asm_state, llvm::raw_ostream &os); + virtual void PrintAtBlockEntry(mlir::Block& block, size_t num_indents, + llvm::raw_ostream& os); + virtual void PrintAfterOp(mlir::Operation* op, size_t num_indents, + mlir::AsmState& asm_state, llvm::raw_ostream& os); - bool IsEntryBlock(mlir::Block *block); + bool IsEntryBlock(mlir::Block* block); // When we visit the op, visit all the CFG edges associated with that op. - absl::flat_hash_map> + absl::flat_hash_map> op_to_cfg_edges_; // TODO(b/425421947) Consider merging this with `op_to_cfg_edges_`. - absl::flat_hash_map> + absl::flat_hash_map> block_to_cfg_edges_; protected: struct CfgEdgeOptions { - llvm::SmallVector from; - llvm::SmallVector to; - mlir::Operation *owner; + llvm::SmallVector from; + llvm::SmallVector to; + llvm::PointerUnion owner; std::optional liveness_info; std::variant> + absl::FunctionRef> pred_values; mlir::ValueRange succ_values; }; void MaybeEmplaceCfgEdges(CfgEdgeOptions options) { - for (auto &from : options.from) { - for (auto &to : options.to) { - for (auto &op : *from->getBlock()) { + for (auto& from : options.from) { + for (auto& to : options.to) { + for (auto& op : *from->getBlock()) { if (getProgramPointBefore(&op) == from) { break; } @@ -419,24 +481,34 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, pred_values = std::get(options.pred_values); } else { pred_values = - std::get>( + std::get>( options.pred_values)(from->getBlock()); } - JsirGeneralCfgEdge *edge = getLatticeAnchor( + JsirGeneralCfgEdge* edge = getLatticeAnchor( from, to, pred_values, options.succ_values, options.liveness_info); - if (options.owner != nullptr) { - op_to_cfg_edges_[options.owner].push_back(edge); - auto from_state = GetStateImpl(from); - from_state.AddDependent(getProgramPointAfter(options.owner)); - } else { - block_to_cfg_edges_[edge->getSucc()->getBlock()].push_back(edge); + + mlir::ProgramPoint* dependent = nullptr; + if (auto* owner_op = llvm::dyn_cast(options.owner)) { + op_to_cfg_edges_[owner_op].push_back(edge); + dependent = getProgramPointAfter(owner_op); + } else if (auto* owner_block = + llvm::dyn_cast(options.owner)) { + block_to_cfg_edges_[owner_block].push_back(edge); + dependent = getProgramPointAfter(owner_block); + } + + auto from_state = GetStateImpl(from); + from_state.AddDependent(dependent); + for (auto pred_value : pred_values) { + auto pred_state = GetStateImpl(pred_value); + pred_state.AddDependent(dependent); } } } } - void InitializeBlock(mlir::Block *block); + void InitializeBlock(mlir::Block* block); // Since our analysis algorithm is based on MLIR's dataflow analysis, we need // to set up the dependency information between basic blocks so that the @@ -447,16 +519,16 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, // we provide a vanilla (unconditional) dependency initialization that // provides all successors as dependencies. // This method is called inside `InitializeBlock`. - virtual void InitializeBlockDependencies(mlir::Block *block); + virtual void InitializeBlockDependencies(mlir::Block* block); - virtual void VisitBlock(mlir::Block *block); + virtual void VisitBlock(mlir::Block* block); // This method mainly serves to "join" states from blocks. i.e., this method // should implement the "join" operation in a dataflow analysis. It should // join the states from the end of the predecessor into the entry of the // successor for a forward analysis, or join the states from the entry of a // block to the end of the predecessor for a backward analysis. - virtual void VisitCfgEdge(JsirGeneralCfgEdge *edge); + virtual void VisitCfgEdge(JsirGeneralCfgEdge* edge); // Gets the state at the program point. template @@ -467,35 +539,35 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, // should be the results. For backward analysis, the input should be the // results and the output should be the operands. struct ValueStateRefs { - std::vector inputs; + std::vector inputs; std::vector> outputs; }; - ValueStateRefs GetValueStateRefs(mlir::Operation *op); + ValueStateRefs GetValueStateRefs(mlir::Operation* op); - llvm::SmallVector Before(mlir::Operation *op) { + llvm::SmallVector Before(mlir::Operation* op) { return {getProgramPointBefore(op)}; } - llvm::SmallVector After(mlir::Operation *op) { + llvm::SmallVector After(mlir::Operation* op) { return {getProgramPointAfter(op)}; } - llvm::SmallVector Before(mlir::Block *block) { + llvm::SmallVector Before(mlir::Block* block) { return {getProgramPointBefore(block)}; } - llvm::SmallVector After(mlir::Block *block) { + llvm::SmallVector After(mlir::Block* block) { return {getProgramPointAfter(block)}; } - llvm::SmallVector Before(mlir::Region ®ion) { + llvm::SmallVector Before(mlir::Region& region) { CHECK(!region.empty()); return {getProgramPointBefore(®ion.front())}; } - llvm::SmallVector After(mlir::Region ®ion) { - llvm::SmallVector after_points; - for (mlir::Block &block : region) { + llvm::SmallVector After(mlir::Region& region) { + llvm::SmallVector after_points; + for (mlir::Block& block : region) { if (block.getSuccessors().empty()) { after_points.push_back(getProgramPointAfter(&block)); } @@ -503,7 +575,37 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, return after_points; } - static mlir::ValueRange GetExprRegionEndValues(mlir::Block *block) { + LivenessInfo LiveIfTruthyOrUnknown(mlir::Value value) { + return { + .kind = LivenessKind::kLiveIfTruthyOrUnknown, + .values = {value}, + }; + } + + LivenessInfo LiveIfFalsyOrUnknown(mlir::Value value) { + return { + .kind = LivenessKind::kLiveIfFalsyOrUnknown, + .values = {value}, + }; + } + + LivenessInfo LiveIfEqualOrUnknown( + mlir::Value lhs, llvm::PointerUnion rhs) { + return { + .kind = LivenessKind::kLiveIfEqualOrUnknown, + .values = {lhs, rhs}, + }; + } + + LivenessInfo LiveIfNotEqualOrUnknown( + mlir::Value lhs, llvm::PointerUnion rhs) { + return { + .kind = LivenessKind::kLiveIfNotEqualOrUnknown, + .values = {lhs, rhs}, + }; + } + + static mlir::ValueRange GetExprRegionEndValues(mlir::Block* block) { auto term_op = block->getTerminator(); if (auto expr_region_end_op = llvm::dyn_cast(term_op)) { @@ -513,8 +615,8 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, } static mlir::ValueRange GetExprRegionEndValuesFromRegion( - mlir::Region ®ion) { - for (auto &block : region.getBlocks()) { + mlir::Region& region) { + for (auto& block : region.getBlocks()) { if (block.hasNoSuccessors()) { auto end_values = GetExprRegionEndValues(&block); if (!end_values.empty()) { @@ -525,7 +627,7 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, return {}; } - static mlir::Region &GetForStatementContinueTargetRegion( + static mlir::Region& GetForStatementContinueTargetRegion( JshirForStatementOp for_stmt) { if (!for_stmt.getUpdate().empty()) { return for_stmt.getUpdate(); @@ -549,7 +651,7 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, } std::optional WithLabel( - mlir::Operation *op) { + mlir::Operation* op) { if (auto labeled_stmt = llvm::dyn_cast(op); labeled_stmt != nullptr) { return jump_env_.WithLabel(labeled_stmt.getLabel().getName()); @@ -557,17 +659,17 @@ class JsirDataFlowAnalysis : public mlir::DataFlowAnalysis, return std::nullopt; } - mlir::LogicalResult initialize(mlir::Operation *op) override; + mlir::LogicalResult initialize(mlir::Operation* op) override; - void VisitOp(mlir::Operation *op, const StateT *input, + void VisitOp(mlir::Operation* op, const StateT* input, JsirStateRef output); - virtual void VisitOp(mlir::Operation *op); + virtual void VisitOp(mlir::Operation* op); - mlir::DataFlowSolver &solver_; + mlir::DataFlowSolver& solver_; // Override `mlir::DataFlowAnalysis::visit` and redirect to `Visit{Op,Block}`. - mlir::LogicalResult visit(mlir::ProgramPoint *point) override; + mlir::LogicalResult visit(mlir::ProgramPoint* point) override; }; template @@ -583,19 +685,19 @@ using JsirBackwardDataFlowAnalysis = // ============================================================================= template -void JsirStateRef::AddDependent(mlir::ProgramPoint *point) { +void JsirStateRef::AddDependent(mlir::ProgramPoint* point) { element_->addDependency(point, analysis_); } template void JsirStateRef::Write( - absl::FunctionRef write_fn) { + absl::FunctionRef write_fn) { mlir::ChangeResult changed = write_fn(&element_->value_); solver_->propagateIfChanged(element_, changed); } template -void JsirStateRef::Write(T &&lattice) { +void JsirStateRef::Write(T&& lattice) { if (element_->value_ == lattice) { return; } @@ -605,13 +707,13 @@ void JsirStateRef::Write(T &&lattice) { } template -void JsirStateRef::Write(const T &lattice) { +void JsirStateRef::Write(const T& lattice) { T lattice_copy = lattice; Write(std::move(lattice_copy)); } template -void JsirStateRef::Join(const T &lattice) { +void JsirStateRef::Join(const T& lattice) { mlir::ChangeResult changed = element_->value_.Join(lattice); solver_->propagateIfChanged(element_, changed); } @@ -624,7 +726,7 @@ template template JsirStateRef JsirDataFlowAnalysis::GetStateImpl( mlir::LatticeAnchor anchor) { - auto *element = + auto* element = mlir::DataFlowAnalysis::getOrCreate>(anchor); return JsirStateRef{element, &solver_, this}; } @@ -632,8 +734,8 @@ JsirStateRef JsirDataFlowAnalysis::GetStateImpl( template JsirStateRef JsirDataFlowAnalysis::GetStateBefore( - mlir::Operation *op) { - if (auto *prev_op = op->getPrevNode()) { + mlir::Operation* op) { + if (auto* prev_op = op->getPrevNode()) { return GetStateAfter(prev_op); } else { return GetStateImpl(getProgramPointBefore(op->getBlock())); @@ -643,21 +745,21 @@ JsirDataFlowAnalysis::GetStateBefore( template JsirStateRef JsirDataFlowAnalysis::GetStateAfter( - mlir::Operation *op) { + mlir::Operation* op) { return GetStateImpl(getProgramPointAfter(op)); } template JsirStateRef JsirDataFlowAnalysis::GetStateAtEntryOf( - mlir::Block *block) { + mlir::Block* block) { return GetStateImpl(getProgramPointBefore(block)); } template JsirStateRef JsirDataFlowAnalysis::GetStateAtEndOf( - mlir::Block *block) { + mlir::Block* block) { if (block->empty()) { return GetStateAtEntryOf(block); } else { @@ -667,8 +769,8 @@ JsirDataFlowAnalysis::GetStateAtEndOf( template void JsirDataFlowAnalysis::PrintOp( - mlir::Operation *op, size_t num_indents, mlir::AsmState &asm_state, - llvm::raw_ostream &os) { + mlir::Operation* op, size_t num_indents, mlir::AsmState& asm_state, + llvm::raw_ostream& os) { size_t num_results = op->getNumResults(); size_t num_operands = op->getNumOperands(); size_t num_attributes = op->getAttrs().size(); @@ -725,14 +827,14 @@ void JsirDataFlowAnalysis::PrintOp( template void JsirDataFlowAnalysis::PrintRegion( - mlir::Region ®ion, size_t num_indents, mlir::AsmState &asm_state, - llvm::raw_ostream &os) { + mlir::Region& region, size_t num_indents, mlir::AsmState& asm_state, + llvm::raw_ostream& os) { os << "{\n"; { llvm::SaveAndRestore num_indents_in_region{num_indents, num_indents + 2}; - for (mlir::Block &block : region.getBlocks()) { + for (mlir::Block& block : region.getBlocks()) { os.indent(num_indents); block.printAsOperand(os, asm_state); os << ":\n"; @@ -742,7 +844,7 @@ void JsirDataFlowAnalysis::PrintRegion( PrintAtBlockEntry(block, num_indents, os); - for (mlir::Operation &op : block) { + for (mlir::Operation& op : block) { os.indent(num_indents); PrintOp(&op, num_indents, asm_state, os); os << "\n"; @@ -755,8 +857,8 @@ void JsirDataFlowAnalysis::PrintRegion( template bool JsirDataFlowAnalysis::IsEntryBlock( - mlir::Block *block) { - mlir::Operation *parent_op = block->getParentOp(); + mlir::Block* block) { + mlir::Operation* parent_op = block->getParentOp(); if (llvm::isa(parent_op) || llvm::isa(parent_op) || llvm::isa(parent_op) || @@ -784,7 +886,7 @@ bool JsirDataFlowAnalysis::IsEntryBlock( // JsirExecutable. template mlir::LogicalResult JsirDataFlowAnalysis::initialize( - mlir::Operation *op) { + mlir::Operation* op) { // The op depends on its input operands. for (mlir::Value operand : op->getOperands()) { JsirStateRef operand_state_ref = GetStateAt(operand); @@ -808,6 +910,7 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = After(branch), .to = Before(branch.getDest()), + .owner = branch.getDest(), .pred_values = branch.getDestOperands(), .succ_values = branch.getDest()->getArguments(), }); @@ -818,10 +921,8 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = After(cond_branch), .to = Before(cond_branch.getTrueDest()), - .liveness_info = - std::tuple{cond_branch.getCondition(), - mlir::BoolAttr::get(cond_branch.getContext(), true), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = cond_branch.getTrueDest(), + .liveness_info = LiveIfTruthyOrUnknown(cond_branch.getCondition()), .pred_values = cond_branch.getTrueDestOperands(), .succ_values = cond_branch.getTrueDest()->getArguments(), }); @@ -829,10 +930,8 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = After(cond_branch), .to = Before(cond_branch.getFalseDest()), - .liveness_info = - std::tuple{cond_branch.getCondition(), - mlir::BoolAttr::get(cond_branch.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = cond_branch.getFalseDest(), + .liveness_info = LiveIfFalsyOrUnknown(cond_branch.getCondition()), .pred_values = cond_branch.getFalseDestOperands(), .succ_values = cond_branch.getFalseDest()->getArguments(), }); @@ -848,8 +947,8 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( llvm::isa(op) || llvm::isa(op) || llvm::isa(op) || - llvm::isa(op) /* TODO Should this be here? */ || - llvm::isa(op) || + llvm::isa(op) /* TODO Should this be here? */ + || llvm::isa(op) || llvm::isa(op)) { if (llvm::isa(op)) { maybe_jump_targets = { @@ -862,18 +961,18 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(op), .to = Before(op->getRegion(0)), - .owner = op, + .owner = &*op, }); MaybeEmplaceCfgEdges({ .from = After(op->getRegion(0)), .to = After(op), - .owner = op, + .owner = &*op, }); } else { MaybeEmplaceCfgEdges({ .from = Before(op), .to = After(op), - .owner = op, + .owner = &*op, }); } } @@ -898,42 +997,33 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(if_stmt), .to = Before(if_stmt.getConsequent()), - .owner = if_stmt, - .liveness_info = - std::tuple{if_stmt.getTest(), - mlir::BoolAttr::get(if_stmt.getContext(), true), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*if_stmt, + .liveness_info = LiveIfTruthyOrUnknown(if_stmt.getTest()), }); MaybeEmplaceCfgEdges({ .from = After(if_stmt.getConsequent()), .to = After(if_stmt), - .owner = if_stmt, + .owner = &*if_stmt, }); if (!if_stmt.getAlternate().empty()) { MaybeEmplaceCfgEdges({ .from = Before(if_stmt), .to = Before(if_stmt.getAlternate()), - .owner = if_stmt, - .liveness_info = - std::tuple{if_stmt.getTest(), - mlir::BoolAttr::get(if_stmt.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*if_stmt, + .liveness_info = LiveIfFalsyOrUnknown(if_stmt.getTest()), }); MaybeEmplaceCfgEdges({ .from = After(if_stmt.getAlternate()), .to = After(if_stmt), - .owner = if_stmt, + .owner = &*if_stmt, }); } else { MaybeEmplaceCfgEdges({ .from = Before(if_stmt), .to = After(if_stmt), - .owner = if_stmt, - .liveness_info = - std::tuple{if_stmt.getTest(), - mlir::BoolAttr::get(if_stmt.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*if_stmt, + .liveness_info = LiveIfFalsyOrUnknown(if_stmt.getTest()), }); } } @@ -953,17 +1043,17 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(block_stmt), .to = Before(block_stmt.getDirectives()), - .owner = block_stmt, + .owner = &*block_stmt, }); MaybeEmplaceCfgEdges({ .from = After(block_stmt.getDirectives()), .to = Before(block_stmt.getBody()), - .owner = block_stmt, + .owner = &*block_stmt, }); MaybeEmplaceCfgEdges({ .from = After(block_stmt.getBody()), .to = After(block_stmt), - .owner = block_stmt, + .owner = &*block_stmt, }); } @@ -987,32 +1077,26 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(while_stmt), .to = Before(while_stmt.getTest()), - .owner = while_stmt, + .owner = &*while_stmt, }); MaybeEmplaceCfgEdges({ .from = After(while_stmt.getTest()), .to = Before(while_stmt.getBody()), - .owner = while_stmt, - .liveness_info = - std::tuple{ - GetExprRegionEndValuesFromRegion(while_stmt.getTest())[0], - mlir::BoolAttr::get(while_stmt.getContext(), true), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*while_stmt, + .liveness_info = LiveIfTruthyOrUnknown( + GetExprRegionEndValuesFromRegion(while_stmt.getTest())[0]), }); MaybeEmplaceCfgEdges({ .from = After(while_stmt.getBody()), .to = Before(while_stmt.getTest()), - .owner = while_stmt, + .owner = &*while_stmt, }); MaybeEmplaceCfgEdges({ .from = After(while_stmt.getTest()), .to = After(while_stmt), - .owner = while_stmt, - .liveness_info = - std::tuple{ - GetExprRegionEndValuesFromRegion(while_stmt.getTest())[0], - mlir::BoolAttr::get(while_stmt.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*while_stmt, + .liveness_info = LiveIfFalsyOrUnknown( + GetExprRegionEndValuesFromRegion(while_stmt.getTest())[0]), }); } @@ -1037,32 +1121,26 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(do_while_stmt), .to = Before(do_while_stmt.getBody()), - .owner = do_while_stmt, + .owner = &*do_while_stmt, }); MaybeEmplaceCfgEdges({ .from = After(do_while_stmt.getBody()), .to = Before(do_while_stmt.getTest()), - .owner = do_while_stmt, + .owner = &*do_while_stmt, }); MaybeEmplaceCfgEdges({ .from = After(do_while_stmt.getTest()), .to = Before(do_while_stmt.getBody()), - .owner = do_while_stmt, - .liveness_info = - std::tuple{ - GetExprRegionEndValuesFromRegion(do_while_stmt.getTest())[0], - mlir::BoolAttr::get(do_while_stmt.getContext(), true), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*do_while_stmt, + .liveness_info = LiveIfTruthyOrUnknown( + GetExprRegionEndValuesFromRegion(do_while_stmt.getTest())[0]), }); MaybeEmplaceCfgEdges({ .from = After(do_while_stmt.getTest()), .to = After(do_while_stmt), - .owner = do_while_stmt, - .liveness_info = - std::tuple{ - GetExprRegionEndValuesFromRegion(do_while_stmt.getTest())[0], - mlir::BoolAttr::get(do_while_stmt.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*do_while_stmt, + .liveness_info = LiveIfFalsyOrUnknown( + GetExprRegionEndValuesFromRegion(do_while_stmt.getTest())[0]), }); } @@ -1091,7 +1169,7 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( &GetForStatementContinueTargetRegion(for_stmt).front()), }; // Emplace an edge into the first non-empty region of the for-statement. - mlir::Region &first_region = + mlir::Region& first_region = !for_stmt.getInit().empty() ? for_stmt.getInit() : (!for_stmt.getTest().empty() ? for_stmt.getTest() @@ -1099,17 +1177,17 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(for_stmt), .to = Before(first_region), - .owner = for_stmt, + .owner = &*for_stmt, }); if (!for_stmt.getInit().empty()) { - mlir::Region &successor = + mlir::Region& successor = !for_stmt.getTest().empty() ? for_stmt.getTest() : for_stmt.getBody(); MaybeEmplaceCfgEdges({ .from = After(for_stmt.getInit()), .to = Before(successor), - .owner = for_stmt, + .owner = &*for_stmt, }); } @@ -1117,22 +1195,16 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = After(for_stmt.getTest()), .to = Before(for_stmt.getBody()), - .owner = for_stmt, - .liveness_info = - std::tuple{ - GetExprRegionEndValuesFromRegion(for_stmt.getTest())[0], - mlir::BoolAttr::get(for_stmt.getContext(), true), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*for_stmt, + .liveness_info = LiveIfTruthyOrUnknown( + GetExprRegionEndValuesFromRegion(for_stmt.getTest())[0]), }); MaybeEmplaceCfgEdges({ .from = After(for_stmt.getTest()), .to = After(for_stmt), - .owner = for_stmt, - .liveness_info = - std::tuple{ - GetExprRegionEndValuesFromRegion(for_stmt.getTest())[0], - mlir::BoolAttr::get(for_stmt.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*for_stmt, + .liveness_info = LiveIfFalsyOrUnknown( + GetExprRegionEndValuesFromRegion(for_stmt.getTest())[0]), }); } @@ -1140,18 +1212,18 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = After(for_stmt.getBody()), .to = Before(GetForStatementContinueTargetRegion(for_stmt)), - .owner = for_stmt, + .owner = &*for_stmt, }); } if (!for_stmt.getUpdate().empty()) { - mlir::Region &successor = + mlir::Region& successor = !for_stmt.getTest().empty() ? for_stmt.getTest() : for_stmt.getBody(); MaybeEmplaceCfgEdges({ .from = After(for_stmt.getUpdate()), .to = Before(successor), - .owner = for_stmt, + .owner = &*for_stmt, }); } } @@ -1174,17 +1246,17 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(for_in_stmt), .to = Before(for_in_stmt.getBody()), - .owner = for_in_stmt, + .owner = &*for_in_stmt, }); MaybeEmplaceCfgEdges({ .from = After(for_in_stmt.getBody()), .to = Before(for_in_stmt.getBody()), - .owner = for_in_stmt, + .owner = &*for_in_stmt, }); MaybeEmplaceCfgEdges({ .from = After(for_in_stmt.getBody()), .to = After(for_in_stmt), - .owner = for_in_stmt, + .owner = &*for_in_stmt, }); } @@ -1206,17 +1278,17 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(for_of_stmt), .to = Before(for_of_stmt.getBody()), - .owner = for_of_stmt, + .owner = &*for_of_stmt, }); MaybeEmplaceCfgEdges({ .from = After(for_of_stmt.getBody()), .to = Before(for_of_stmt.getBody()), - .owner = for_of_stmt, + .owner = &*for_of_stmt, }); MaybeEmplaceCfgEdges({ .from = After(for_of_stmt.getBody()), .to = After(for_of_stmt), - .owner = for_of_stmt, + .owner = &*for_of_stmt, }); } @@ -1250,23 +1322,21 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(logical_expr), .to = After(logical_expr), - .owner = logical_expr, - .liveness_info = std::tuple{left_value, comparison_attr, - LivenessKind::kLiveIfNotEqualOrUnknown}, + .owner = &*logical_expr, + .liveness_info = LiveIfNotEqualOrUnknown(left_value, comparison_attr), .pred_values = mlir::ValueRange{left_value}, .succ_values = logical_expr->getResults(), }); MaybeEmplaceCfgEdges({ .from = Before(logical_expr), .to = Before(logical_expr.getRight()), - .owner = logical_expr, - .liveness_info = std::tuple{left_value, comparison_attr, - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*logical_expr, + .liveness_info = LiveIfEqualOrUnknown(left_value, comparison_attr), }); MaybeEmplaceCfgEdges({ .from = After(logical_expr.getRight()), .to = After(logical_expr), - .owner = logical_expr, + .owner = &*logical_expr, .pred_values = GetExprRegionEndValues, .succ_values = logical_expr->getResults(), }); @@ -1287,32 +1357,26 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(conditional_expr), .to = Before(conditional_expr.getConsequent()), - .owner = conditional_expr, - .liveness_info = - std::tuple{conditional_expr.getTest(), - mlir::BoolAttr::get(conditional_expr.getContext(), true), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*conditional_expr, + .liveness_info = LiveIfTruthyOrUnknown(conditional_expr.getTest()), }); MaybeEmplaceCfgEdges({ .from = Before(conditional_expr), .to = Before(conditional_expr.getAlternate()), - .owner = conditional_expr, - .liveness_info = std::tuple{conditional_expr.getTest(), - mlir::BoolAttr::get( - conditional_expr.getContext(), false), - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*conditional_expr, + .liveness_info = LiveIfFalsyOrUnknown(conditional_expr.getTest()), }); MaybeEmplaceCfgEdges({ .from = After(conditional_expr.getConsequent()), .to = After(conditional_expr), - .owner = conditional_expr, + .owner = &*conditional_expr, .pred_values = GetExprRegionEndValues, .succ_values = conditional_expr->getResults(), }); MaybeEmplaceCfgEdges({ .from = After(conditional_expr.getAlternate()), .to = After(conditional_expr), - .owner = conditional_expr, + .owner = &*conditional_expr, .pred_values = GetExprRegionEndValues, .succ_values = conditional_expr->getResults(), }); @@ -1320,7 +1384,7 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( if (auto break_stmt = llvm::dyn_cast(op); break_stmt != nullptr) { - absl::StatusOr break_target; + absl::StatusOr break_target; JsirIdentifierAttr label = break_stmt.getLabelAttr(); if (label == nullptr) { @@ -1333,14 +1397,14 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(break_stmt), .to = {break_target.value()}, - .owner = break_stmt, + .owner = &*break_stmt, }); } } if (auto continue_stmt = llvm::dyn_cast(op); continue_stmt != nullptr) { - absl::StatusOr continue_target; + absl::StatusOr continue_target; JsirIdentifierAttr label = continue_stmt.getLabelAttr(); if (label == nullptr) { @@ -1353,7 +1417,7 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(continue_stmt), .to = {continue_target.value()}, - .owner = continue_stmt, + .owner = &*continue_stmt, }); } } @@ -1376,24 +1440,24 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(try_stmt), .to = Before(try_stmt.getBlock()), - .owner = try_stmt, + .owner = &*try_stmt, }); if (!try_stmt.getFinalizer().empty()) { MaybeEmplaceCfgEdges({ .from = After(try_stmt.getBlock()), .to = Before(try_stmt.getFinalizer()), - .owner = try_stmt, + .owner = &*try_stmt, }); MaybeEmplaceCfgEdges({ .from = After(try_stmt.getFinalizer()), .to = After(try_stmt), - .owner = try_stmt, + .owner = &*try_stmt, }); } else { MaybeEmplaceCfgEdges({ .from = After(try_stmt.getBlock()), .to = After(try_stmt), - .owner = try_stmt, + .owner = &*try_stmt, }); } } @@ -1415,12 +1479,12 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(switch_stmt), .to = Before(switch_stmt.getCases()), - .owner = switch_stmt, + .owner = &*switch_stmt, }); MaybeEmplaceCfgEdges({ .from = After(switch_stmt.getCases()), .to = After(switch_stmt), - .owner = switch_stmt, + .owner = &*switch_stmt, }); } @@ -1440,54 +1504,50 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( MaybeEmplaceCfgEdges({ .from = Before(switch_case), .to = Before(switch_case.getConsequent()), - .owner = switch_case, + .owner = &*switch_case, }); } else { MaybeEmplaceCfgEdges({ .from = Before(switch_case), .to = Before(switch_case.getTest()), - .owner = switch_case, + .owner = &*switch_case, }); MaybeEmplaceCfgEdges({ .from = After(switch_case.getTest()), .to = Before(switch_case.getConsequent()), - .owner = switch_case, - .liveness_info = - std::tuple{ - switch_case->getParentOfType() - .getDiscriminant(), - GetExprRegionEndValuesFromRegion(switch_case.getTest())[0], - LivenessKind::kLiveIfEqualOrUnknown}, + .owner = &*switch_case, + .liveness_info = LiveIfEqualOrUnknown( + switch_case->getParentOfType() + .getDiscriminant(), + GetExprRegionEndValuesFromRegion(switch_case.getTest())[0]), }); MaybeEmplaceCfgEdges({ .from = After(switch_case.getTest()), .to = After(switch_case), - .owner = switch_case, - .liveness_info = - std::tuple{ - switch_case->getParentOfType() - .getDiscriminant(), - GetExprRegionEndValuesFromRegion(switch_case.getTest())[0], - LivenessKind::kLiveIfNotEqualOrUnknown}, + .owner = &*switch_case, + .liveness_info = LiveIfNotEqualOrUnknown( + switch_case->getParentOfType() + .getDiscriminant(), + GetExprRegionEndValuesFromRegion(switch_case.getTest())[0]), }); } // If this is not the last case, we need fall-through to the next case. - if (auto *next_node = switch_case->getNextNode(); next_node != nullptr) { + if (auto* next_node = switch_case->getNextNode(); next_node != nullptr) { if (auto successor_case = llvm::dyn_cast(next_node); successor_case != nullptr) { MaybeEmplaceCfgEdges({ .from = After(switch_case.getConsequent()), .to = Before(successor_case.getConsequent()), - .owner = switch_case, + .owner = &*switch_case, }); } } else { MaybeEmplaceCfgEdges({ .from = After(switch_case.getConsequent()), .to = After(switch_case), - .owner = switch_case, + .owner = &*switch_case, }); } } @@ -1498,8 +1558,8 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( auto with_label = WithLabel(op); // Recursively initialize. - for (mlir::Region ®ion : op->getRegions()) { - for (mlir::Block &block : region.getBlocks()) { + for (mlir::Region& region : op->getRegions()) { + for (mlir::Block& block : region.getBlocks()) { InitializeBlock(&block); } } @@ -1509,9 +1569,9 @@ mlir::LogicalResult JsirDataFlowAnalysis::initialize( template void JsirDataFlowAnalysis::InitializeBlock( - mlir::Block *block) { + mlir::Block* block) { // Initialize all inner ops. - for (mlir::Operation &op : *block) { + for (mlir::Operation& op : *block) { initialize(&op); } InitializeBlockDependencies(block); @@ -1525,7 +1585,7 @@ void JsirDataFlowAnalysis::InitializeBlock( mlir::DataFlowSolver::WorkItem{getProgramPointBefore(block), this}); } else if constexpr (direction == DataflowDirection::kBackward) { // The definition below is copied from https://reviews.llvm.org/D154713. - auto is_exit_block = [](mlir::Block *b) { + auto is_exit_block = [](mlir::Block* b) { // Treat empty and terminator-less blocks as exit blocks. if (b->empty() || !b->back().mightHaveTrait()) @@ -1534,7 +1594,7 @@ void JsirDataFlowAnalysis::InitializeBlock( // There may be a weird case where a terminator may be transferring // control either to the parent or to another block, so exit blocks and // successors are not mutually exclusive. - mlir::Operation *terminator = b->getTerminator(); + mlir::Operation* terminator = b->getTerminator(); return terminator && terminator->hasTrait(); }; @@ -1550,12 +1610,12 @@ void JsirDataFlowAnalysis::InitializeBlock( template void JsirDataFlowAnalysis:: - InitializeBlockDependencies(mlir::Block *block) { + InitializeBlockDependencies(mlir::Block* block) { if constexpr (direction == DataflowDirection::kForward) { // For each block, we should update its successor blocks when the state // at the end of the block updates. Thus, we enumerate each predecessor's // end state and link it to the block. - for (mlir::Block *pred : block->getPredecessors()) { + for (mlir::Block* pred : block->getPredecessors()) { JsirStateRef pred_state_ref = GetStateAtEndOf(pred); pred_state_ref.AddDependent(getProgramPointBefore(block)); } @@ -1563,7 +1623,7 @@ void JsirDataFlowAnalysis:: // For each block, we should update its predecessor blocks when the state // at the end of the block updates. Thus, we enumerate each successor's // end state and link it to the block. - for (mlir::Block *succ : block->getSuccessors()) { + for (mlir::Block* succ : block->getSuccessors()) { JsirStateRef succ_state_ref = GetStateAtEntryOf(succ); succ_state_ref.AddDependent(getProgramPointBefore(block)); } @@ -1572,7 +1632,7 @@ void JsirDataFlowAnalysis:: template mlir::LogicalResult JsirDataFlowAnalysis::visit( - mlir::ProgramPoint *point) { + mlir::ProgramPoint* point) { if (!point->isBlockStart()) { VisitOp(point->getPrevOp()); } else if (!point->isNull()) { @@ -1583,17 +1643,17 @@ mlir::LogicalResult JsirDataFlowAnalysis::visit( template void JsirDataFlowAnalysis::VisitOp( - mlir::Operation *op) { + mlir::Operation* op) { if constexpr (direction == DataflowDirection::kForward) { JsirStateRef before_state_ref = GetStateBefore(op); - const StateT *before = &before_state_ref.value(); + const StateT* before = &before_state_ref.value(); JsirStateRef after_state_ref = GetStateAfter(op); VisitOp(op, before, after_state_ref); } else if constexpr (direction == DataflowDirection::kBackward) { JsirStateRef after_state_ref = GetStateAfter(op); - const StateT *after = &after_state_ref.value(); + const StateT* after = &after_state_ref.value(); JsirStateRef before_state_ref = GetStateBefore(op); @@ -1603,15 +1663,15 @@ void JsirDataFlowAnalysis::VisitOp( template void JsirDataFlowAnalysis::VisitBlock( - mlir::Block *block) { - for (auto *edge : block_to_cfg_edges_[block]) { + mlir::Block* block) { + for (auto* edge : block_to_cfg_edges_[block]) { VisitCfgEdge(edge); } } template void JsirDataFlowAnalysis::PrintAtBlockEntry( - mlir::Block &block, size_t num_indents, llvm::raw_ostream &os) { + mlir::Block& block, size_t num_indents, llvm::raw_ostream& os) { os.indent(num_indents + 2); os << "// "; GetStateAtEntryOf(&block).value().print(os); @@ -1626,8 +1686,8 @@ JsirDataFlowAnalysis::GetStateAt(mlir::Value value) { template void JsirDataFlowAnalysis::PrintAfterOp( - mlir::Operation *op, size_t num_indents, mlir::AsmState &asm_state, - llvm::raw_ostream &os) { + mlir::Operation* op, size_t num_indents, mlir::AsmState& asm_state, + llvm::raw_ostream& os) { for (mlir::Value result : op->getResults()) { auto result_state_ref = GetStateAt(result); @@ -1648,9 +1708,9 @@ void JsirDataFlowAnalysis::PrintAfterOp( template typename JsirDataFlowAnalysis::ValueStateRefs JsirDataFlowAnalysis::GetValueStateRefs( - mlir::Operation *op) { + mlir::Operation* op) { if constexpr (direction == DataflowDirection::kForward) { - std::vector operands; + std::vector operands; for (mlir::Value operand : op->getOperands()) { auto operand_state_ref = GetStateAt(operand); operands.push_back(&operand_state_ref.value()); @@ -1668,7 +1728,7 @@ JsirDataFlowAnalysis::GetValueStateRefs( .outputs = std::move(result_state_refs), }; } else if constexpr (direction == DataflowDirection::kBackward) { - std::vector results; + std::vector results; for (size_t i = 0; i != op->getNumResults(); ++i) { mlir::Value result = op->getResult(i); auto result_state_ref = GetStateAt(result); @@ -1689,7 +1749,7 @@ JsirDataFlowAnalysis::GetValueStateRefs( template void JsirDataFlowAnalysis::VisitOp( - mlir::Operation *op, const StateT *input, JsirStateRef output) { + mlir::Operation* op, const StateT* input, JsirStateRef output) { if constexpr (direction == DataflowDirection::kForward) { auto [operands, result_state_refs] = GetValueStateRefs(op); return VisitOp(op, operands, input, result_state_refs, output); @@ -1701,7 +1761,7 @@ void JsirDataFlowAnalysis::VisitOp( template void JsirDataFlowAnalysis::VisitCfgEdge( - JsirGeneralCfgEdge *edge) { + JsirGeneralCfgEdge* edge) { // Match arguments from the predecessor to the successor. for (const auto [pred_value, succ_value] : llvm::zip(edge->getPredValues(), edge->getSuccValues())) { diff --git a/maldoca/js/ir/analyses/dynamic_constant_propagation/BUILD b/maldoca/js/ir/analyses/dynamic_constant_propagation/BUILD index e2352d4..19c8f6f 100644 --- a/maldoca/js/ir/analyses/dynamic_constant_propagation/BUILD +++ b/maldoca/js/ir/analyses/dynamic_constant_propagation/BUILD @@ -156,6 +156,7 @@ cc_test( deps = [ ":symbol_mutation_info", "//maldoca/base/testing:status_matchers", + "//maldoca/js/ast", "//maldoca/js/driver", "//maldoca/js/driver:conversion", "//maldoca/js/driver:driver_cc_proto", diff --git a/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis.cc b/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis.cc index 904adb4..b9fd7d6 100644 --- a/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis.cc +++ b/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis.cc @@ -27,6 +27,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/SCCIterator.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/TypeSwitch.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Debug.h" @@ -40,6 +41,7 @@ #include "mlir/IR/Value.h" #include "mlir/IR/ValueRange.h" #include "mlir/Support/DebugStringHelper.h" +#include "mlir/Support/WalkResult.h" #include "absl/algorithm/container.h" #include "absl/cleanup/cleanup.h" #include "absl/container/flat_hash_map.h" @@ -103,16 +105,24 @@ struct JsirInlineFunctionInfo { std::optional JsirInlineFunctionInfo::Create( const BabelScopes &scopes, mlir::Region ¶ms, mlir::Region &body) { - absl::StatusOr body_block = GetStmtsRegionBlock(body); - if (!body_block.ok()) { - return std::nullopt; - } + llvm::SmallVector return_ops; + body.walk([&](mlir::Operation* op) { + // Skip nested functions + if (llvm::isa(op)) { + return mlir::WalkResult::skip(); + } + if (auto return_op = llvm::dyn_cast(op)) { + return_ops.push_back(return_op); + } + return mlir::WalkResult::advance(); + }); - auto return_op_range = FilterBlockOps(**body_block); - if (!llvm::hasNItems(return_op_range, 1)) { + if (return_ops.size() != 1) { return std::nullopt; } - JsirReturnStatementOp return_op = *return_op_range.begin(); + JsirReturnStatementOp return_op = return_ops[0]; if (return_op.getArgument() == nullptr) { return std::nullopt; diff --git a/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis_test.cc b/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis_test.cc index f1deee7..579e26e 100644 --- a/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis_test.cc +++ b/maldoca/js/ir/analyses/dynamic_constant_propagation/analysis_test.cc @@ -23,7 +23,6 @@ #include "mlir/IR/BuiltinAttributes.h" #include "mlir/IR/MLIRContext.h" #include "mlir/Support/LLVM.h" -#include "gmock/gmock.h" #include "gtest/gtest.h" #include "absl/container/flat_hash_map.h" #include "absl/log/check.h" @@ -75,8 +74,8 @@ void RunTest(const JsirAnalysisConfig::DynamicConstantPropagation &config, LoadNecessaryDialects(mlir_context); mlir_context.loadDialect(); - MALDOCA_ASSERT_OK_AND_ASSIGN(JsLirRepr repr, - ToJsLirRepr::FromJsAstRepr(ast, scopes, mlir_context)); + MALDOCA_ASSERT_OK_AND_ASSIGN( + JsHirRepr repr, ToJsHirRepr::FromJsAstRepr(ast, scopes, mlir_context)); // Get the const bindings. absl::flat_hash_map const_bindings = @@ -153,7 +152,7 @@ TEST(JsirDynamicConstantPropagationAnalysisTest, CombinedSource) { // Extract the prelude from the AST. JsirAnalysisConfig::DynamicConstantPropagation prelude_config = - ExtractPrelude(kCombined, *ast_repr.ast); + ExtractPreludeByAnnotations(kCombined, *ast_repr.ast); EXPECT_EQ( PrettyPrintSourceFromSourceString(babel, prelude_config.prelude_source(), @@ -176,7 +175,8 @@ TEST(JsirDynamicConstantPropagationAnalysisTest, BabelReuse) { // Use the Babel instance so that its internal scope uid counter is // incremented. - MALDOCA_ASSERT_OK(babel.Parse(kSource, parse_request, absl::InfiniteDuration())); + MALDOCA_ASSERT_OK( + babel.Parse(kSource, parse_request, absl::InfiniteDuration())); // Convert the **combined** source to AST. MALDOCA_ASSERT_OK_AND_ASSIGN(JsAstRepr ast_repr, @@ -186,7 +186,7 @@ TEST(JsirDynamicConstantPropagationAnalysisTest, BabelReuse) { // Extract the prelude from the AST. JsirAnalysisConfig::DynamicConstantPropagation prelude_config = - ExtractPrelude(kCombined, *ast_repr.ast); + ExtractPreludeByAnnotations(kCombined, *ast_repr.ast); EXPECT_EQ( PrettyPrintSourceFromSourceString(babel, prelude_config.prelude_source(), diff --git a/maldoca/js/ir/analyses/dynamic_constant_propagation/symbol_mutation_info_test.cc b/maldoca/js/ir/analyses/dynamic_constant_propagation/symbol_mutation_info_test.cc index 1735a62..69cc4af 100644 --- a/maldoca/js/ir/analyses/dynamic_constant_propagation/symbol_mutation_info_test.cc +++ b/maldoca/js/ir/analyses/dynamic_constant_propagation/symbol_mutation_info_test.cc @@ -24,6 +24,7 @@ #include "absl/container/flat_hash_map.h" #include "absl/time/time.h" #include "maldoca/base/testing/status_matchers.h" +#include "maldoca/js/ast/ast.generated.h" #include "maldoca/js/driver/conversion.h" #include "maldoca/js/driver/driver.h" #include "maldoca/js/driver/driver.pb.h" @@ -56,22 +57,22 @@ TEST_P(GetLvalueRootSymbolsTest, GetLvalueRootSymbols) { LoadNecessaryDialects(mlir_context); MALDOCA_ASSERT_OK_AND_ASSIGN( - JsLirRepr lir_repr, - ToJsLirRepr::FromJsSourceRepr( + JsHirRepr hir_repr, + ToJsHirRepr::FromJsSourceRepr( test_case.source, request, absl::InfiniteDuration(), /*recursion_depth_limit=*/std::nullopt, babel, mlir_context)); mlir::Value left = nullptr; - lir_repr.op->walk([&](JsirAssignmentExpressionOp op) { + hir_repr.op->walk([&](JsirAssignmentExpressionOp op) { ASSERT_EQ(left, nullptr) << "Found multiple declarations or assignments."; left = op.getLeft(); }); - lir_repr.op->walk([&](JsirVariableDeclaratorOp op) { + hir_repr.op->walk([&](JsirVariableDeclaratorOp op) { ASSERT_EQ(left, nullptr) << "Found multiple declarations or assignments."; left = op.getId(); }); - LvalueRootSymbols root_symbols = GetLvalueRootSymbols(lir_repr.scopes, left); + LvalueRootSymbols root_symbols = GetLvalueRootSymbols(hir_repr.scopes, left); EXPECT_THAT(root_symbols.assignment_symbols, ElementsAreArray(test_case.root_symbols.assignment_symbols)); @@ -143,13 +144,13 @@ TEST_P(GetSymbolMutationInfosTest, GetSymbolMutationInfos) { LoadNecessaryDialects(mlir_context); MALDOCA_ASSERT_OK_AND_ASSIGN( - JsLirRepr lir_repr, - ToJsLirRepr::FromJsSourceRepr( + JsHirRepr hir_repr, + ToJsHirRepr::FromJsSourceRepr( test_case.source, request, absl::InfiniteDuration(), /*recursion_depth_limit=*/std::nullopt, babel, mlir_context)); absl::flat_hash_map infos = - GetSymbolMutationInfos(lir_repr.scopes, *lir_repr.op); + GetSymbolMutationInfos(hir_repr.scopes, *hir_repr.op); EXPECT_THAT(infos, UnorderedElementsAreArray(test_case.infos)); } diff --git a/maldoca/js/ir/conversion/BUILD b/maldoca/js/ir/conversion/BUILD index 1f2beec..7e8ab2e 100644 --- a/maldoca/js/ir/conversion/BUILD +++ b/maldoca/js/ir/conversion/BUILD @@ -81,63 +81,6 @@ cc_library( ], ) -cc_library( - name = "jslir_jump_env", - srcs = ["jslir_jump_env.cc"], - hdrs = ["jslir_jump_env.h"], - deps = [ - "@abseil-cpp//absl/cleanup", - "@abseil-cpp//absl/status", - "@abseil-cpp//absl/status:statusor", - "@llvm-project//llvm:Support", - "@llvm-project//mlir:IR", - ], -) - -cc_library( - name = "jshir_to_jslir", - srcs = [ - "jshir_to_jslir.cc", - ], - hdrs = [ - "jshir_to_jslir.h", - ], - deps = [ - ":jslir_jump_env", - "//maldoca/js/ast", - "//maldoca/js/ir", - "@abseil-cpp//absl/functional:function_ref", - "@abseil-cpp//absl/log:check", - "@abseil-cpp//absl/types:optional", - "@llvm-project//llvm:Support", - "@llvm-project//mlir:ControlFlowDialect", - "@llvm-project//mlir:IR", - ], -) - -cc_library( - name = "jslir_to_jshir", - srcs = [ - "jslir_to_jshir.cc", - ], - hdrs = [ - "jslir_to_jshir.h", - ], - deps = [ - "//maldoca/base:status", - "//maldoca/js/ir", - "//maldoca/js/ir:jslir_visitor", - "@abseil-cpp//absl/algorithm:container", - "@abseil-cpp//absl/log", - "@abseil-cpp//absl/log:check", - "@abseil-cpp//absl/status", - "@abseil-cpp//absl/status:statusor", - "@llvm-project//llvm:Support", - "@llvm-project//mlir:ControlFlowDialect", - "@llvm-project//mlir:IR", - ], -) - cc_library( name = "utils", srcs = ["utils.cc"], @@ -145,9 +88,7 @@ cc_library( visibility = ["//visibility:public"], deps = [ ":ast_to_jsir", - ":jshir_to_jslir", ":jsir_to_ast", - ":jslir_to_jshir", "//maldoca/base:ret_check", "//maldoca/js/ast", "//maldoca/js/ir", diff --git a/maldoca/js/ir/conversion/ast_to_jsir.generated.cc b/maldoca/js/ir/conversion/ast_to_jsir.generated.cc index 494ffb0..48c6997 100644 --- a/maldoca/js/ir/conversion/ast_to_jsir.generated.cc +++ b/maldoca/js/ir/conversion/ast_to_jsir.generated.cc @@ -45,7 +45,7 @@ namespace maldoca { -JsirStatementOpInterface AstToJsir::VisitStatement(const JsStatement *node) { +JsirProgramBodyElementOpInterface AstToJsir::VisitProgramBodyElement(const JsProgramBodyElement *node) { if (auto *expression_statement = dynamic_cast(node)) { return VisitExpressionStatement(expression_statement); } @@ -109,10 +109,6 @@ JsirStatementOpInterface AstToJsir::VisitStatement(const JsStatement *node) { if (auto *class_declaration = dynamic_cast(node)) { return VisitClassDeclaration(class_declaration); } - LOG(FATAL) << "Unreachable code."; -} - -JsirModuleDeclarationOpInterface AstToJsir::VisitModuleDeclaration(const JsModuleDeclaration *node) { if (auto *import_declaration = dynamic_cast(node)) { return VisitImportDeclaration(import_declaration); } @@ -152,18 +148,7 @@ JsirProgramOp AstToJsir::VisitProgram(const JsProgram *node) { mlir::Region &mlir_body_region = op.getBody(); AppendNewBlockAndPopulate(mlir_body_region, [&] { for (const auto &element : *node->body()) { - switch (element.index()) { - case 0: { - VisitStatement(std::get<0>(element).get()); - break; - } - case 1: { - VisitModuleDeclaration(std::get<1>(element).get()); - break; - } - default: - LOG(FATAL) << "Unreachable code."; - } + VisitProgramBodyElement(element.get()); } }); mlir::Region &mlir_directives_region = op.getDirectives(); @@ -423,6 +408,73 @@ JsirBigIntLiteralOp AstToJsir::VisitBigIntLiteral(const JsBigIntLiteral *node) { return CreateExpr(node, mlir_value, mlir_extra); } +JsirStatementOpInterface AstToJsir::VisitStatement(const JsStatement *node) { + if (auto *expression_statement = dynamic_cast(node)) { + return VisitExpressionStatement(expression_statement); + } + if (auto *block_statement = dynamic_cast(node)) { + return VisitBlockStatement(block_statement); + } + if (auto *empty_statement = dynamic_cast(node)) { + return VisitEmptyStatement(empty_statement); + } + if (auto *debugger_statement = dynamic_cast(node)) { + return VisitDebuggerStatement(debugger_statement); + } + if (auto *with_statement = dynamic_cast(node)) { + return VisitWithStatement(with_statement); + } + if (auto *return_statement = dynamic_cast(node)) { + return VisitReturnStatement(return_statement); + } + if (auto *labeled_statement = dynamic_cast(node)) { + return VisitLabeledStatement(labeled_statement); + } + if (auto *break_statement = dynamic_cast(node)) { + return VisitBreakStatement(break_statement); + } + if (auto *continue_statement = dynamic_cast(node)) { + return VisitContinueStatement(continue_statement); + } + if (auto *if_statement = dynamic_cast(node)) { + return VisitIfStatement(if_statement); + } + if (auto *switch_statement = dynamic_cast(node)) { + return VisitSwitchStatement(switch_statement); + } + if (auto *throw_statement = dynamic_cast(node)) { + return VisitThrowStatement(throw_statement); + } + if (auto *try_statement = dynamic_cast(node)) { + return VisitTryStatement(try_statement); + } + if (auto *while_statement = dynamic_cast(node)) { + return VisitWhileStatement(while_statement); + } + if (auto *do_while_statement = dynamic_cast(node)) { + return VisitDoWhileStatement(do_while_statement); + } + if (auto *for_statement = dynamic_cast(node)) { + return VisitForStatement(for_statement); + } + if (auto *for_in_statement = dynamic_cast(node)) { + return VisitForInStatement(for_in_statement); + } + if (auto *for_of_statement = dynamic_cast(node)) { + return VisitForOfStatement(for_of_statement); + } + if (auto *function_declaration = dynamic_cast(node)) { + return VisitFunctionDeclaration(function_declaration); + } + if (auto *variable_declaration = dynamic_cast(node)) { + return VisitVariableDeclaration(variable_declaration); + } + if (auto *class_declaration = dynamic_cast(node)) { + return VisitClassDeclaration(class_declaration); + } + LOG(FATAL) << "Unreachable code."; +} + JshirBlockStatementOp AstToJsir::VisitBlockStatement(const JsBlockStatement *node) { auto op = CreateStmt(node); mlir::Region &mlir_body_region = op.getBody(); @@ -1084,6 +1136,22 @@ JsirMetaPropertyOp AstToJsir::VisitMetaProperty(const JsMetaProperty *node) { return CreateExpr(node, mlir_meta, mlir_property); } +JsirModuleDeclarationOpInterface AstToJsir::VisitModuleDeclaration(const JsModuleDeclaration *node) { + if (auto *import_declaration = dynamic_cast(node)) { + return VisitImportDeclaration(import_declaration); + } + if (auto *export_named_declaration = dynamic_cast(node)) { + return VisitExportNamedDeclaration(export_named_declaration); + } + if (auto *export_default_declaration = dynamic_cast(node)) { + return VisitExportDefaultDeclaration(export_default_declaration); + } + if (auto *export_all_declaration = dynamic_cast(node)) { + return VisitExportAllDeclaration(export_all_declaration); + } + LOG(FATAL) << "Unreachable code."; +} + JsirModuleSpecifierAttrInterface AstToJsir::VisitModuleSpecifierAttr(const JsModuleSpecifier *node) { if (auto *import_specifier = dynamic_cast(node)) { return VisitImportSpecifierAttr(import_specifier); diff --git a/maldoca/js/ir/conversion/ast_to_jsir.h b/maldoca/js/ir/conversion/ast_to_jsir.h index 9f4984d..24bbcaf 100644 --- a/maldoca/js/ir/conversion/ast_to_jsir.h +++ b/maldoca/js/ir/conversion/ast_to_jsir.h @@ -65,7 +65,6 @@ class AstToJsir { FOR_EACH_JSIR_CLASS(DECLARE_CIR_OP_VISIT_FUNCTION, DECLARE_HIR_OP_VISIT_FUNCTION, - /*LIR_OP=*/JSIR_CLASS_IGNORE, DECLARE_REF_OP_VISIT_FUNCTION, DECLARE_ATTRIB_VISIT_FUNCTION) @@ -74,6 +73,9 @@ class AstToJsir { #undef DECLARE_HIR_OP_VISIT_FUNCTION #undef DECLARE_ATTRIB_VISIT_FUNCTION + JsirProgramBodyElementOpInterface VisitProgramBodyElement( + const JsProgramBodyElement* node); + JsirLiteralOpInterface VisitLiteral(const JsLiteral *node); JsirStatementOpInterface VisitStatement(const JsStatement *node); @@ -116,8 +118,8 @@ class AstToJsir { T CreateStmt(const JsNode *node, Args &&...args) { CHECK(node != nullptr) << "Node cannot be null."; mlir::MLIRContext *context = builder_.getContext(); - return builder_.create(GetJsirTriviaAttr(context, *node), std::nullopt, - std::forward(args)...); + return builder_.create(GetJsirTriviaAttr(context, *node), + mlir::TypeRange(), std::forward(args)...); } void AppendNewBlockAndPopulate(mlir::Region ®ion, diff --git a/maldoca/js/ir/conversion/ast_to_jsir.handwritten.cc b/maldoca/js/ir/conversion/ast_to_jsir.handwritten.cc index 1c7a1e8..eea2b6b 100644 --- a/maldoca/js/ir/conversion/ast_to_jsir.handwritten.cc +++ b/maldoca/js/ir/conversion/ast_to_jsir.handwritten.cc @@ -42,9 +42,13 @@ namespace maldoca { JsirCommentAttrInterface AstToJsir::VisitCommentAttr(const JsComment *node) { - auto loc = - GetJsirLocationAttr(builder_.getContext(), node->loc(), node->start(), - node->end(), /*scope_uid=*/std::nullopt); + JsirLocationAttr loc = nullptr; + if (node->loc().has_value()) { + loc = GetJsirLocationAttr(builder_.getContext(), node->loc().value(), + node->start(), node->end(), + /*scope_uid=*/std::nullopt); + } + switch (node->comment_type()) { case JsCommentType::kCommentLine: return JsirCommentLineAttr::get( diff --git a/maldoca/js/ir/conversion/jshir_to_jslir.cc b/maldoca/js/ir/conversion/jshir_to_jslir.cc deleted file mode 100644 index 116e791..0000000 --- a/maldoca/js/ir/conversion/jshir_to_jslir.cc +++ /dev/null @@ -1,1041 +0,0 @@ -// Copyright 2024 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "maldoca/js/ir/conversion/jshir_to_jslir.h" - -#include -#include -#include -#include - -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/TypeSwitch.h" -#include "llvm/ADT/ilist.h" -#include "llvm/ADT/iterator_range.h" -#include "llvm/Support/Casting.h" -#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h" -#include "mlir/IR/Block.h" -#include "mlir/IR/Builders.h" -#include "mlir/IR/BuiltinAttributes.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/IR/Location.h" -#include "mlir/IR/Operation.h" -#include "mlir/IR/Value.h" -#include "mlir/IR/ValueRange.h" -#include "absl/log/check.h" -#include "maldoca/js/ast/ast.generated.h" -#include "maldoca/js/ir/ir.h" - -namespace maldoca { - -void JshirToJslir::VisitOperation(mlir::Operation *hir_op) { - llvm::TypeSwitch(hir_op) - .Case( - [&](JshirBlockStatementOp hir_op) { VisitBlockStatementOp(hir_op); }) - .Case([&](JshirWithStatementOp hir_op) { VisitWithStatementOp(hir_op); }) - .Case([&](JshirLabeledStatementOp hir_op) { - VisitLabeledStatementOp(hir_op); - }) - .Case([&](JshirIfStatementOp hir_op) { VisitIfStatementOp(hir_op); }) - .Case([&](JshirSwitchStatementOp hir_op) { - VisitSwitchStatementOp(hir_op); - }) - .Case([&](JshirCatchClauseOp hir_op) { VisitCatchClauseOp(hir_op); }) - .Case([&](JshirTryStatementOp hir_op) { VisitTryStatementOp(hir_op); }) - .Case( - [&](JshirWhileStatementOp hir_op) { VisitWhileStatementOp(hir_op); }) - .Case([&](JshirDoWhileStatementOp hir_op) { - VisitDoWhileStatementOp(hir_op); - }) - .Case([&](JshirForStatementOp hir_op) { VisitForStatementOp(hir_op); }) - .Case( - [&](JshirForInStatementOp hir_op) { VisitForInStatementOp(hir_op); }) - .Case( - [&](JshirForOfStatementOp hir_op) { VisitForOfStatementOp(hir_op); }) - .Case([&](JshirLogicalExpressionOp hir_op) { - VisitLogicalExpressionOp(hir_op); - }) - .Case([&](JshirConditionalExpressionOp hir_op) { - VisitConditionalExpressionOp(hir_op); - }) - .Case( - [&](JshirBreakStatementOp hir_op) { VisitBreakStatementOp(hir_op); }) - .Case([&](JshirContinueStatementOp hir_op) { - VisitContinueStatementOp(hir_op); - }) - .Default([&](mlir::Operation *hir_op) { - auto *lir_op = builder_.cloneWithoutRegions(*hir_op, mapping_); - for (unsigned int i = 0, e = hir_op->getNumRegions(); i != e; ++i) { - auto with_env_scope = env_.WithScope(); - auto &lir_region = lir_op->getRegion(i); - VisitRegion(&hir_op->getRegion(i), &lir_region); - } - }); -} - -void JshirToJslir::VisitOperations( - llvm::iterator_range::iterator> hir_ops) { - for (auto &hir_op : hir_ops) { - VisitOperation(&hir_op); - } -} - -void JshirToJslir::VisitBlock(mlir::Block *hir_block) { - VisitOperations(*hir_block); -} - -void JshirToJslir::VisitRegion(mlir::Region *hir_region, - mlir::Region *lir_region) { - // Save insertion point. - // Will revert at the end. - mlir::OpBuilder::InsertionGuard insertion_guard(builder_); - - for (mlir::Block &hir_block : *hir_region) { - mlir::Block &lir_block = lir_region->emplaceBlock(); - builder_.setInsertionPointToStart(&lir_block); - - for (auto &hir_op : hir_block) { - VisitOperation(&hir_op); - } - } -} - -void JshirToJslir::VisitBlockStatementOp(JshirBlockStatementOp hir_op) { - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::BlockStatement); - - // The JshirBlockStatementOp can be lowered without introducing any new block, - // if the block does not contain labeled breaks: - // - // ``` - // %token = jslir.control_flow_starter {BlockStatement} - // jslir.control_flow_marker {BlockStatementDirectives} (%token) - // ... - // jslir.control_flow_marker {BlockStatementBody} (%token) - // ... - // jslir.control_flow_marker {BlockStatementEnd} (%token) - // ``` - // - // However, a labeled break would jump to the BlockStatementEnd marker, which - // requires it to be the start of a block: - // - // ``` - // jslir.control_flow_starter {BlockStatement} - // jslir.control_flow_marker {BlockStatementDirectives} - // ... - // jslir.control_flow_marker {BlockStatementBody} - // ... - // cf.br [^end_bb] - // - // ^end_bb: <- A labeled break jumps here. - // jslir.control_flow_marker {BlockStatementEnd} - // ``` - - auto generate_directives_and_body = [&] { - { - // Directives - CreateStmt( - hir_op, JsirControlFlowMarkerKind::BlockStatementDirectives, token); - - VisitOperations(hir_op.getDirectives().front()); - } - - { - // Body - CreateStmt( - hir_op, JsirControlFlowMarkerKind::BlockStatementBody, token); - - VisitOperations(hir_op.getBody().front()); - } - }; - - if (!env_.unmatched_labels().empty()) { - mlir::Block *lir_end_block = CreateBlockAfter(builder_.getBlock()); - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = std::nullopt, - .continue_target = std::nullopt, - }); - - generate_directives_and_body(); - - CreateStmt(hir_op, lir_end_block); - builder_.setInsertionPointToStart(lir_end_block); - - } else { - generate_directives_and_body(); - } - - CreateStmt( - hir_op, JsirControlFlowMarkerKind::BlockStatementEnd, token); -} - -void JshirToJslir::VisitWithStatementOp(JshirWithStatementOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_body_block = CreateBlockAfter(lir_current_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_body_block); - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = std::nullopt, - .continue_target = std::nullopt, - }); - - mlir::Value lir_object = mapping_.lookup(hir_op.getObject()); - mlir::Value token = CreateExpr(hir_op, lir_object); - CreateStmt(hir_op, lir_body_block); - - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::WithStatementBody, token, &hir_op.getBody(), - lir_body_block, lir_end_block); - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::WithStatementEnd, token); -} - -void JshirToJslir::VisitLabeledStatementOp(JshirLabeledStatementOp hir_op) { - auto with_label = env_.WithLabel(hir_op.getLabel().getName()); - - mlir::Value token = - CreateExpr(hir_op, hir_op.getLabel()); - - VisitOperations(hir_op.getBody().front()); - - CreateStmt( - hir_op, JsirControlFlowMarkerKind::LabeledStatementEnd, token); -} - -void JshirToJslir::VisitIfStatementOp(JshirIfStatementOp hir_op) { - if (hir_op.getConsequent().empty()) { - hir_op->emitOpError("consequent region is empty"); - return; - } - - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_consequent_block = CreateBlockAfter(lir_current_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_consequent_block); - mlir::Block *lir_alternate_block = nullptr; - if (!hir_op.getAlternate().empty()) { - lir_alternate_block = CreateBlockAfter(lir_consequent_block); - } - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = std::nullopt, - .continue_target = std::nullopt, - }); - - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::IfStatement); - - mlir::Value lir_test = mapping_.lookup(hir_op.getTest()); - if (lir_alternate_block != nullptr) { - CreateCondBranch(hir_op->getLoc(), lir_test, - /*true_dest=*/lir_consequent_block, {}, - /*false_dest=*/lir_alternate_block, {}); - } else { - CreateCondBranch(hir_op->getLoc(), lir_test, - /*true_dest=*/lir_consequent_block, {}, - /*false_dest=*/lir_end_block, {}); - } - - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::IfStatementConsequent, token, - &hir_op.getConsequent(), lir_consequent_block, lir_end_block); - - if (lir_alternate_block != nullptr) { - builder_.setInsertionPointToStart(lir_alternate_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::IfStatementAlternate, token); - VisitOptionalStmtOrStmtsRegion( - &hir_op.getAlternate(), lir_alternate_block, lir_end_block); - } - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::IfStatementEnd, token); -} - -mlir::Value JshirToJslir::VisitSwitchCaseTest(mlir::Value switch_token, - mlir::Value lir_discriminant, - mlir::IntegerAttr case_idx, - const CaseTest &test, - mlir::Block *lir_body_block) { - mlir::OpBuilder::InsertionGuard insertion_guard(builder_); - builder_.setInsertionPointToStart(test.lir_block); - - mlir::Value case_token = JslirSwitchStatementCaseStartOp::create( - builder_, test.loc, switch_token, case_idx); - - // Lower all the ops except for the terminator. - VisitOperations(test.hir_block->without_terminator()); - - // Get the `test` value. - auto *hir_test_terminator = test.hir_block->getTerminator(); - auto hir_test_end_op = llvm::cast(hir_test_terminator); - mlir::Value lir_test = mapping_.lookup(hir_test_end_op.getArgument()); - - // An op that marks the `lir_test` value. - JslirSwitchStatementCaseTestOp::create(builder_, test.loc, lir_test); - - // Perform the actual comparison. - // - // switch () { - // case : - // ... - // } - mlir::Value case_matched = JsirBinaryExpressionOp::create( - builder_, test.loc, "===", lir_discriminant, lir_test); - - // Jump to the body on match, or a specified block on unmatch. - CreateCondBranch(test.loc, case_matched, /*true_dest=*/lir_body_block, {}, - /*false_dest=*/test.lir_unmatch_target_block, {}); - - return case_token; -} - -void JshirToJslir::VisitSwitchCaseOp(mlir::Value switch_token, - mlir::Value lir_discriminant, - const Case &kase) { - mlir::Value case_token; - if (kase.test.has_value()) { - // Test - mlir::IntegerAttr case_idx = builder_.getUI32IntegerAttr(kase.idx); - case_token = VisitSwitchCaseTest(switch_token, lir_discriminant, case_idx, - *kase.test, kase.lir_body_block); - } - - { - // Body - - builder_.setInsertionPointToStart(kase.lir_body_block); - - if (kase.test.has_value()) { - JslirControlFlowMarkerOp::create( - builder_, kase.body_loc, - JsirControlFlowMarkerKind::SwitchStatementCaseBody, case_token); - } else { - JslirSwitchStatementDefaultStartOp::create(builder_, kase.loc, - switch_token, kase.idx); - } - - VisitOperations(*kase.hir_body_block); - - // Jump to next body block. - mlir::cf::BranchOp::create(builder_, kase.body_loc, - kase.lir_fall_through_block); - } -} - -void JshirToJslir::VisitSwitchStatementOp(JshirSwitchStatementOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - auto &hir_switch_case_ops = hir_op.getCases().front().getOperations(); - size_t num_cases = hir_switch_case_ops.size(); - - // Verify HIR and collect information of each case. - std::vector cases; - for (auto [case_idx, hir_op] : llvm::enumerate(hir_switch_case_ops)) { - auto hir_switch_case_op = llvm::dyn_cast(hir_op); - if (hir_switch_case_op == nullptr) { - hir_op.emitError("cases must all be `JshirSwitchCaseOp`s"); - return; - } - - std::optional test; - mlir::Region &hir_test_region = hir_switch_case_op.getTest(); - if (!hir_test_region.empty()) { - test = CaseTest{ - .loc = hir_test_region.getLoc(), - .hir_block = &hir_test_region.front(), - .lir_block = nullptr, // To be created later. - .lir_unmatch_target_block = nullptr, // To be computed later. - }; - } - - mlir::Region &hir_body_region = hir_switch_case_op.getConsequent(); - mlir::Block *hir_body_block = &hir_body_region.front(); - - cases.push_back(Case{ - .idx = case_idx, - .loc = hir_switch_case_op.getLoc(), - - .test = std::move(test), - - .hir_body_block = hir_body_block, - .body_loc = hir_body_region.getLoc(), - .lir_body_block = nullptr, // To be created later. - .lir_fall_through_block = nullptr, // To be computed later. - }); - } - - // Find the index of the default case. - std::optional default_case_idx; - for (const auto &kase : cases) { - if (kase.test.has_value()) { - continue; - } - - if (default_case_idx.has_value()) { - hir_op.emitError("contains more than 1 default case"); - return; - } - - default_case_idx = kase.idx; - } - - // Create LIR blocks in the original order of cases in HIR. - // This step computes CaseTest::lir_block and Case::lir_body_block. - mlir::Block *lir_end_block = CreateBlockAfter(lir_current_block); - for (auto &kase : cases) { - if (kase.test.has_value()) { - kase.test->lir_block = CreateBlockBefore(lir_end_block); - } - kase.lir_body_block = CreateBlockBefore(lir_end_block); - } - - // test_idx_to_case_idx[test_idx] == case_idx - // - // In a switch-statement, the order of test matches and the order of body - // fallthroughs are different. - // - // switch () { - // case : - // ; - // default: - // ; - // case : - // ; - // } - // - // Test match order: - // test_a -> test_b -> default - // Body fallthrough order: - // body_a -> body_default -> body_b - // - // We use `test_idx` to indicate the order of test matches, and `case_idx` to - // indicate body fallthrough order (i.e. original order). - // - // The only difference is that in test match order, default comes at last. - std::vector test_idx_to_case_idx; - test_idx_to_case_idx.reserve(cases.size()); - for (size_t case_idx = 0; case_idx < num_cases; ++case_idx) { - if (default_case_idx != case_idx) { - test_idx_to_case_idx.push_back(case_idx); - } - } - if (default_case_idx.has_value()) { - test_idx_to_case_idx.push_back(*default_case_idx); - } - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = lir_end_block, - .continue_target = std::nullopt, - }); - - // Set up the switch statement start and branch into first test - mlir::Value lir_discriminant = mapping_.lookup(hir_op.getDiscriminant()); - mlir::Value token = - CreateExpr(hir_op, lir_discriminant); - if (num_cases == 0) { - CreateStmt(hir_op, lir_end_block); - } else { - CreateStmt(hir_op, cases[0].lir_first_block()); - } - - // Generate code for each switch case. - for (size_t test_idx = 0; test_idx < num_cases; ++test_idx) { - const size_t case_idx = test_idx_to_case_idx[test_idx]; - Case &kase = cases[case_idx]; - - if (kase.test.has_value()) { - // If the case does not match, which block should we jump to? - kase.test->lir_unmatch_target_block = [&] { - if (test_idx + 1 == cases.size()) { - return lir_end_block; - } else { - size_t next_case_idx = test_idx_to_case_idx[test_idx + 1]; - return cases[next_case_idx].lir_first_block(); - } - }(); - } - - // We always fall through to the body of the next case, regardless of the - // location of the default case. - kase.lir_fall_through_block = [&] { - if (case_idx + 1 == num_cases) { - return lir_end_block; - } else { - return cases[case_idx + 1].lir_body_block; - } - }(); - - VisitSwitchCaseOp(token, lir_discriminant, kase); - } - - // mark the end block with a nullop - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::SwitchStatementEnd, token); -} - -void JshirToJslir::VisitCatchClauseOp(JshirCatchClauseOp hir_op) { - mlir::Value lir_param = nullptr; - if (hir_op.getParam() != nullptr) { - lir_param = mapping_.lookup(hir_op.getParam()); - } - - CreateStmt(hir_op, lir_param); - CHECK(hir_op.getBody().hasOneBlock()); - mlir::Block &hir_body_block = hir_op.getBody().front(); - VisitOperations(hir_body_block); -} - -void JshirToJslir::VisitTryStatementOp(JshirTryStatementOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_end_block = CreateBlockAfter(lir_current_block); - - mlir::Block *lir_body_block = CreateBlockBefore(lir_end_block); - - mlir::Block *lir_handler_block = nullptr; - if (!hir_op.getHandler().empty()) { - lir_handler_block = CreateBlockBefore(lir_end_block); - } - - mlir::Block *lir_finalizer_block = nullptr; - if (!hir_op.getFinalizer().empty()) { - lir_finalizer_block = CreateBlockBefore(lir_end_block); - } - - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::TryStatement); - CreateStmt(hir_op, lir_body_block); - - mlir::Block *lir_body_successor = - (lir_finalizer_block != nullptr) ? lir_finalizer_block : lir_end_block; - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::TryStatementBody, token, &hir_op.getBlock(), - lir_body_block, /*lir_successor=*/lir_body_successor); - - if (lir_handler_block != nullptr) { - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::TryStatementHandler, token, - &hir_op.getHandler(), lir_handler_block, - /*lir_successor=*/lir_body_successor); - } - - if (lir_finalizer_block != nullptr) { - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::TryStatementFinalizer, token, - &hir_op.getFinalizer(), lir_finalizer_block, - /*lir_successor=*/lir_end_block); - } - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::TryStatementEnd, token); -} - -void JshirToJslir::VisitWhileStatementOp(JshirWhileStatementOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_test_block = CreateBlockAfter(lir_current_block); - mlir::Block *lir_body_block = CreateBlockAfter(lir_test_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_body_block); - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = lir_end_block, - .continue_target = lir_test_block, - }); - - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::WhileStatement); - CreateStmt(hir_op, lir_test_block); - - VisitExprRegionWithMarkerOp(JsirControlFlowMarkerKind::WhileStatementTest, - token, &hir_op.getTest(), lir_test_block, - lir_body_block, lir_end_block); - - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::WhileStatementBody, token, &hir_op.getBody(), - lir_body_block, lir_test_block); - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::WhileStatementEnd, token); -} - -void JshirToJslir::VisitDoWhileStatementOp(JshirDoWhileStatementOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_body_block = CreateBlockAfter(lir_current_block); - mlir::Block *lir_test_block = CreateBlockAfter(lir_body_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_test_block); - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = lir_end_block, - .continue_target = lir_test_block, - }); - - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::DoWhileStatement); - CreateStmt(hir_op, lir_body_block); - - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::DoWhileStatementBody, token, &hir_op.getBody(), - lir_body_block, lir_test_block); - - VisitExprRegionWithMarkerOp(JsirControlFlowMarkerKind::DoWhileStatementTest, - token, &hir_op.getTest(), lir_test_block, - lir_body_block, lir_end_block); - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::DoWhileStatementEnd, token); -} - -void JshirToJslir::VisitForStatementOp(JshirForStatementOp hir_op) { - // A for-statement has the following structure. "?" means that this block is - // optional and might not exist. - // ... - // | - // lir_current_block - // | - // v - // lir_init_block? - // | - // v - // +--- lir_test_block? <--+ - // | | | - // | v | - // | lir_body_block | - // | | | - // | v | - // | lir_update_block? --+ - // | - // +--> lir_end_block - // | - // ... - // - // Specifically, if `lir_test_block` doesn't exist: - // ... - // | - // lir_current_block - // | - // v - // lir_init_block? - // | - // v - // lir_body_block <---+ - // | | - // v | - // lir_update_block? --+ - // - // lir_end_block // no predecessor - // | - // ... - - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_end_block = CreateBlockAfter(lir_current_block); - - mlir::Block *lir_init_block = nullptr; - if (!hir_op.getInit().empty()) { - lir_init_block = CreateBlockBefore(lir_end_block); - } - - mlir::Block *lir_test_block = nullptr; - if (!hir_op.getTest().empty()) { - lir_test_block = CreateBlockBefore(lir_end_block); - } - - mlir::Block *lir_body_block = CreateBlockBefore(lir_end_block); - - mlir::Block *lir_update_block = nullptr; - if (!hir_op.getUpdate().empty()) { - lir_update_block = CreateBlockBefore(lir_end_block); - } - - // The target of `continue;` is the successor of `lir_body_block`. - mlir::Block *lir_continue_target = - lir_update_block ? lir_update_block - : (lir_test_block ? lir_test_block : lir_body_block); - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = lir_end_block, - .continue_target = lir_continue_target, - }); - - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::ForStatement); - - // Branch into the first block of the for-statement. - mlir::Block *lir_first_block = - lir_init_block ? lir_init_block - : (lir_test_block ? lir_test_block : lir_body_block); - - CreateStmt(hir_op, lir_first_block); - - if (lir_init_block != nullptr) { - // Init - - builder_.setInsertionPointToEnd(lir_init_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::ForStatementInit, token); - - mlir::Block *lir_branch_target = - lir_test_block ? lir_test_block : lir_body_block; - - VisitUnknownRegion(&hir_op.getInit(), lir_init_block, - lir_branch_target); - } - - if (lir_test_block != nullptr) { - // Test - - VisitExprRegionWithMarkerOp(JsirControlFlowMarkerKind::ForStatementTest, - token, /*hir_region=*/&hir_op.getTest(), - /*lir_block=*/lir_test_block, - /*lir_successor_true=*/lir_body_block, - /*lir_successor_false=*/lir_end_block); - } - - { - // Body - - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::ForStatementBody, token, &hir_op.getBody(), - lir_body_block, lir_continue_target); - } - - if (lir_update_block != nullptr) { - // Update - - mlir::Block *lir_successor = - lir_test_block ? lir_test_block : lir_body_block; - - VisitStmtOrStmtsRegionWithMarkerOp( - JsirControlFlowMarkerKind::ForStatementUpdate, token, - /*hir_region=*/&hir_op.getUpdate(), /*lir_block=*/lir_update_block, - lir_successor); - } - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::ForStatementEnd, token); -} - -void JshirToJslir::VisitForInOfStatementOp( - mlir::Operation *hir_op, JsirForInOfKind kind, - JsirForInOfDeclarationAttr left_declaration, mlir::Value hir_left_lval, - mlir::Value hir_right, std::optional await, mlir::Region &hir_body) { - mlir::Block *lir_start_block = builder_.getBlock(); - mlir::Block *lir_next_block = CreateBlockAfter(lir_start_block); - mlir::Block *lir_body_block = CreateBlockAfter(lir_next_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_body_block); - - auto with_break_continue_info = env_.WithJumpTargets({ - .labeled_break_target = lir_end_block, - .unlabeled_break_target = lir_end_block, - .continue_target = lir_next_block, - }); - - mlir::Value lir_left_lval = mapping_.lookup(hir_left_lval); - mlir::Value lir_right = mapping_.lookup(hir_right); - - mlir::Value iterator; - switch (kind) { - case JsirForInOfKind::ForIn: { - iterator = CreateExpr( - hir_op, left_declaration, lir_left_lval, lir_right); - break; - } - case JsirForInOfKind::ForOf: { - if (!await.has_value()) { - hir_op->emitOpError("expected await to be defined, got nullopt"); - return; - } - - iterator = CreateExpr( - hir_op, left_declaration, lir_left_lval, lir_right, await.value()); - break; - } - } - - mlir::cf::BranchOp::create(builder_, hir_op->getLoc(), lir_next_block); - - { - builder_.setInsertionPointToStart(lir_body_block); - CreateStmt(hir_op, iterator); - - VisitStmtOrStmtsRegion(&hir_body, lir_body_block, - /*dest=*/lir_next_block); - } - - { - builder_.setInsertionPointToStart(lir_next_block); - mlir::Value has_next = - CreateExpr(hir_op, iterator); - - CreateCondBranch(hir_op->getLoc(), has_next, /*true_dest=*/lir_body_block, - {}, - /*false_dest=*/lir_end_block, {}); - } - - builder_.setInsertionPointToStart(lir_end_block); - CreateStmt(hir_op, iterator); -} - -void JshirToJslir::VisitForInStatementOp(JshirForInStatementOp hir_op) { - return VisitForInOfStatementOp(hir_op, JsirForInOfKind::ForIn, - hir_op.getLeftDeclarationAttr(), - hir_op.getLeftLval(), hir_op.getRight(), - /*await=*/std::nullopt, hir_op.getBody()); -} - -void JshirToJslir::VisitForOfStatementOp(JshirForOfStatementOp hir_op) { - return VisitForInOfStatementOp(hir_op, JsirForInOfKind::ForOf, - hir_op.getLeftDeclarationAttr(), - hir_op.getLeftLval(), hir_op.getRight(), - hir_op.getAwait(), hir_op.getBody()); -} - -void JshirToJslir::VisitLogicalExpressionOp(JshirLogicalExpressionOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_right_block = CreateBlockAfter(lir_current_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_right_block); - - mlir::Value lir_left = mapping_.lookup(hir_op.getLeft()); - - mlir::Value token = CreateExpr( - hir_op, hir_op.getOperator_(), lir_left); - - struct LirBranchTarget { - mlir::Block *dest; - mlir::ValueRange operands; - }; - struct CondBrArgs { - mlir::Value cond; - LirBranchTarget true_branch_target; - LirBranchTarget false_branch_target; - }; - - auto logical_operator = StringToJsLogicalOperator(hir_op.getOperator_()); - if (!logical_operator.ok()) { - hir_op->emitError("invalid logical operator: ") - << logical_operator.status().ToString(); - return; - } - - auto [cond, true_branch_target, false_branch_target] = [&]() -> CondBrArgs { - switch (*logical_operator) { - case JsLogicalOperator::kAnd: { - // left && right => left ? right : left - // - // %left = ... - // if %left goto [^right_bb] else goto [^end_bb(%left)] - // ^right_bb: - // %right = ... - // goto [^end_bb(%right)] - // ^end_bb(%result): - // ... - - return { - .cond = lir_left, - .true_branch_target = {.dest = lir_right_block, .operands = {}}, - .false_branch_target = {.dest = lir_end_block, - .operands = lir_left}, - }; - } - case JsLogicalOperator::kOr: { - // left || right => left ? left : right - // - // %left = ... - // if %left goto [^end_bb(%left)] else goto [^right_bb] - // ^right_bb: - // %right = ... - // goto [^end_bb(%right)] - // ^end_bb(%result): - // ... - - return { - .cond = lir_left, - .true_branch_target = {.dest = lir_end_block, .operands = lir_left}, - .false_branch_target = {.dest = lir_right_block, .operands = {}}, - }; - } - case JsLogicalOperator::kNullishCoalesce: { - // left ?? right => (left == null) ? right : left - // - // %left = ... - // %left_is_null = (%left == null) - // if %left_is_null goto [^right_bb] else goto [^end_bb(%left)] - // ^right_bb: - // %right = ... - // goto [^end_bb(%right)] - // ^end_bb(%result): - // ... - - mlir::Value lir_null = CreateExpr(hir_op); - mlir::StringAttr mlir_equal_operator = builder_.getStringAttr( - JsBinaryOperatorToString(JsBinaryOperator::kEqual)); - mlir::Value lir_left_is_null = CreateExpr( - hir_op, mlir_equal_operator, lir_left, lir_null); - - return { - .cond = lir_left_is_null, - .true_branch_target = {.dest = lir_right_block, .operands = {}}, - .false_branch_target = {.dest = lir_end_block, - .operands = lir_left}, - }; - } - } - }(); - - CreateCondBranch(hir_op->getLoc(), cond, true_branch_target.dest, - true_branch_target.operands, false_branch_target.dest, - false_branch_target.operands); - - builder_.setInsertionPointToStart(lir_right_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::LogicalExpressionRight, token); - VisitExprRegion(&hir_op.getRight(), lir_right_block, - lir_end_block); - - builder_.setInsertionPointToStart(lir_end_block); - mlir::Value lir_result = lir_end_block->addArgument( - JsirAnyType::get(builder_.getContext()), builder_.getUnknownLoc()); - mapping_.map(hir_op, lir_result); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::LogicalExpressionEnd, token); -} - -void JshirToJslir::VisitConditionalExpressionOp( - JshirConditionalExpressionOp hir_op) { - mlir::Block *lir_current_block = builder_.getBlock(); - mlir::Block *lir_alternate_block = CreateBlockAfter(lir_current_block); - mlir::Block *lir_consequent_block = CreateBlockAfter(lir_alternate_block); - mlir::Block *lir_end_block = CreateBlockAfter(lir_consequent_block); - - mlir::Value lir_test = mapping_.lookup(hir_op.getTest()); - mlir::Value token = CreateExpr( - hir_op, JsirControlFlowKind::ConditionalExpression); - CreateCondBranch(hir_op->getLoc(), lir_test, - /*true_dest=*/lir_consequent_block, {}, - /*false_dest=*/lir_alternate_block, {}); - - builder_.setInsertionPointToStart(lir_alternate_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::ConditionalExpressionAlternate, token); - VisitExprRegion(&hir_op.getAlternate(), - lir_alternate_block, lir_end_block); - - builder_.setInsertionPointToStart(lir_consequent_block); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::ConditionalExpressionConsequent, - token); - VisitExprRegion(&hir_op.getConsequent(), - lir_consequent_block, lir_end_block); - - builder_.setInsertionPointToStart(lir_end_block); - mlir::Value lir_result = lir_end_block->addArgument( - JsirAnyType::get(builder_.getContext()), builder_.getUnknownLoc()); - mapping_.map(hir_op, lir_result); - CreateStmt( - hir_op, JsirControlFlowMarkerKind::ConditionalExpressionEnd, token); -} - -void JshirToJslir::VisitContinueStatementOp(JshirContinueStatementOp hir_op) { - JsirIdentifierAttr label = hir_op.getLabelAttr(); // May be nullptr. - auto continue_target = (label == nullptr) - ? env_.continue_target() - : env_.continue_target(label.getName()); - if (!continue_target.ok()) { - hir_op->emitError("unknown continue target, will not generate branch op: ") - << continue_target.status().ToString(); - return; - } - - CreateStmt(hir_op, label); - CreateStmt(hir_op, *continue_target); - - mlir::Block *dead_block_after_continue = - CreateBlockAfter(builder_.getBlock()); - builder_.setInsertionPointToStart(dead_block_after_continue); -} - -void JshirToJslir::VisitBreakStatementOp(JshirBreakStatementOp hir_op) { - absl::StatusOr break_target; - - JsirIdentifierAttr label = hir_op.getLabelAttr(); // May be nullptr. - if (label == nullptr) { - break_target = env_.break_target(); - } else { - // ``` - // break