Skip to content

[CodeExtractor] Refactor extractCodeRegion, fix alloca emission. #114419

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 222 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from 216 commits
Commits
Show all changes
222 commits
Select commit Hold shift + click to select a range
9cf9ee7
extractor WIP
Meinersbur Nov 25, 2021
5efb70c
WIP
Meinersbur Nov 25, 2021
bc9e2c8
WIP
Meinersbur Nov 25, 2021
6dbe2b6
WIP
Meinersbur Nov 25, 2021
032d0fc
WIP
Meinersbur Nov 29, 2021
58d4d8a
Merge branch 'irbuilder-extract' into HEAD
Meinersbur Nov 29, 2021
e61d218
WIP
Meinersbur Nov 30, 2021
595dc0b
WIP
Meinersbur Nov 30, 2021
391ccdd
WIP
Meinersbur Nov 30, 2021
bfcb05f
WIP
Meinersbur Dec 1, 2021
25162d3
WIP
Meinersbur Dec 1, 2021
8aa6061
WIP
Meinersbur Dec 1, 2021
68f6c4b
WIP
Meinersbur Dec 2, 2021
47c8395
WIP
Meinersbur Dec 2, 2021
1e8b833
WIP
Meinersbur Dec 2, 2021
c0200bd
WIP
Meinersbur Dec 2, 2021
30dbbf0
WIP
Meinersbur Dec 2, 2021
a4a59d7
WIP
Meinersbur Dec 4, 2021
c2f7fb9
WIP
Meinersbur Dec 4, 2021
1cb62c4
WIP
Meinersbur Dec 4, 2021
2eb5feb
WIP
Meinersbur Dec 4, 2021
46b8d94
WIP
Meinersbur Dec 4, 2021
ef5ecda
WIP
Meinersbur Dec 4, 2021
5e351a6
cleanup unused
Meinersbur Dec 4, 2021
f5869da
Working on BFI
Meinersbur Dec 4, 2021
f4a1043
Working on BFI
Meinersbur Dec 4, 2021
c121f72
Working on BFI
Meinersbur Dec 5, 2021
4b29ca0
severSplitPHINodesOfExits
Meinersbur Dec 5, 2021
2d7ffba
OldTargets
Meinersbur Dec 5, 2021
c730d39
Trying to inline extractCodeRegionByCopy
Meinersbur Dec 5, 2021
b72ec47
Inlined extractCodeRegionByCopy
Meinersbur Dec 5, 2021
e9c6c69
WIP
Meinersbur Dec 5, 2021
b6b95a6
WIP
Meinersbur Dec 5, 2021
a13a7e9
WIP
Meinersbur Dec 5, 2021
b9bf259
Moving arguments
Meinersbur Dec 5, 2021
2c8d360
Moving struct arguments
Meinersbur Dec 5, 2021
2c2c233
Moving more arguments
Meinersbur Dec 5, 2021
bd187ae
Refactor call parameter codegen
Meinersbur Dec 5, 2021
02adf99
Remove unnecessary entry block
Meinersbur Dec 5, 2021
e94ad8f
Remove dead code
Meinersbur Dec 5, 2021
29c5769
WIP
Meinersbur Dec 5, 2021
6b0860c
Lifetime markers
Meinersbur Dec 5, 2021
7c5d021
fix sinking; TODO: lifetime markers
Meinersbur Dec 5, 2021
82d5905
simpler sinking test case
Meinersbur Dec 5, 2021
084a66e
Refactor swift args
Meinersbur Dec 6, 2021
09abd45
weights
Meinersbur Dec 6, 2021
1e1e248
move code before inserting replacement
Meinersbur Dec 6, 2021
6bfcd3e
copy code move
Meinersbur Dec 6, 2021
740d3f2
exit block code split
Meinersbur Dec 6, 2021
657923d
WIP
Meinersbur Dec 6, 2021
6c34205
WIP
Meinersbur Dec 6, 2021
1f9c10b
WIP
Meinersbur Dec 6, 2021
3d6f543
Copy using common switch gen
Meinersbur Dec 6, 2021
895d538
WIP
Meinersbur Dec 6, 2021
e90022c
Common Reloads
Meinersbur Dec 6, 2021
a0dbb9a
Reloads update
Meinersbur Dec 6, 2021
fa5ab1f
Update inputs belongs to create extracted function
Meinersbur Dec 6, 2021
c7f9480
switch
Meinersbur Dec 6, 2021
e244716
WIP
Meinersbur Dec 6, 2021
96f681c
reload eariler
Meinersbur Dec 6, 2021
2091667
check old function
Meinersbur Dec 6, 2021
dbacfa1
switch update
Meinersbur Dec 6, 2021
365ce3c
WIP
Meinersbur Dec 6, 2021
5c86c35
SSA
Meinersbur Dec 6, 2021
20b7150
outputs stores
Meinersbur Dec 6, 2021
a375438
connect to NewHeader
Meinersbur Dec 6, 2021
52d07c0
WIP
Meinersbur Dec 6, 2021
fea2bcb
lifetime markers for copy
Meinersbur Dec 6, 2021
4f0cce8
connect PHIs
Meinersbur Dec 6, 2021
8b0d1e0
WIP
Meinersbur Dec 6, 2021
fc6a7fd
clang-format
Meinersbur Dec 6, 2021
3531ac5
eligability check
Meinersbur Dec 6, 2021
471cccd
WIP
Meinersbur Dec 6, 2021
dec8cf8
comment
Meinersbur Dec 6, 2021
93483b4
Merge branch 'irbuilder-extract' into HEAD
Meinersbur Dec 6, 2021
db9c1e8
preparing for refactor extract function
Meinersbur Dec 6, 2021
7c15b69
WIP
Meinersbur Dec 6, 2021
5c45602
WIP
Meinersbur Dec 6, 2021
6ad705f
WIP
Meinersbur Dec 6, 2021
3e2c327
moved exit block SuccNum
Meinersbur Dec 6, 2021
d1de567
Orlder
Meinersbur Dec 6, 2021
694143c
Prepare for refactoring FuncImpl
Meinersbur Dec 6, 2021
214fd18
extracted FuncImpl
Meinersbur Dec 6, 2021
b6dc69b
extracted emitReplacerCall
Meinersbur Dec 6, 2021
e381872
extracted insertReplacer
Meinersbur Dec 6, 2021
2c71618
clang-format
Meinersbur Dec 6, 2021
9092507
WIP
Meinersbur Dec 6, 2021
8e80131
cleaning up
Meinersbur Dec 7, 2021
f723df5
fixing PHIs
Meinersbur Dec 7, 2021
6b59af7
cleaning up
Meinersbur Dec 7, 2021
6aa65a3
cleaning up
Meinersbur Dec 7, 2021
bd3a288
cleaning up
Meinersbur Dec 7, 2021
827cf17
clang-format
Meinersbur Dec 7, 2021
c8d067f
Keep only SwitchCases
Meinersbur Dec 7, 2021
35dd894
Undo unnecessary change
Meinersbur Dec 7, 2021
d394e0e
cundo changes/format
Meinersbur Dec 7, 2021
0dfd685
clang-format
Meinersbur Dec 7, 2021
80a0c15
Merge branch 'main' into irbuilder-extract-refactor
Meinersbur Mar 31, 2022
2702100
[CodeRefactor] rebase
Meinersbur Mar 31, 2022
974072d
some simplification/comments
Meinersbur Mar 31, 2022
573017f
Merge branch 'main' into irbuilder-extract-refactor
Meinersbur Apr 13, 2022
09c8983
Merge branch 'main' into irbuilder-extract-refactor
Meinersbur Apr 20, 2022
f280bdb
Merge branch 'irbuilder-extract-refactor' into HEAD
Meinersbur Nov 11, 2022
7d5bbda
Avoid deprecation warnings
Meinersbur Nov 11, 2022
d1dc14f
Use range-for
Meinersbur Nov 11, 2022
cb8dae6
Merge branch 'main' into HEAD
Meinersbur Nov 11, 2022
e2d1e21
NumExitBlocks -> SwitchCases.size()
Meinersbur Nov 11, 2022
179252f
clang-format
Meinersbur Nov 11, 2022
f1ef796
Add alloca block test
Meinersbur Nov 11, 2022
a80f7a6
clang-format
Meinersbur Nov 11, 2022
853d6db
rename to recomputeSwitchCases
Meinersbur Nov 11, 2022
3996391
refactor getSwitchType
Meinersbur Nov 11, 2022
b878fe0
clang-format
Meinersbur Nov 11, 2022
7fa2a83
erge commit '343de6856e16b58bcbd16d479fc633f54e22fadc^' into users/me…
Meinersbur Nov 1, 2024
ac29f5e
Merge commit '343de6856e16b58bcbd16d479fc633f54e22fadc' into users/me…
Meinersbur Nov 1, 2024
bd5589d
Merge commit '62b27f893ecceade799df80b343d00851db250ba^' into users/m…
Meinersbur Nov 1, 2024
5c8a548
Merge commit '62b27f893ecceade799df80b343d00851db250ba' into users/me…
Meinersbur Nov 1, 2024
44889ac
Merge commit '934942c0331a078acc9350dc3ba7790a0e2698a8^' into users/m…
Meinersbur Nov 1, 2024
092e165
Merge commit '934942c0331a078acc9350dc3ba7790a0e2698a8' into users/me…
Meinersbur Nov 1, 2024
74f8fa4
Merge commit '60f406c4db5ba1ed6d66567ddaef4b86386496e1^' into users/m…
Meinersbur Nov 1, 2024
306c458
Merge commit '60f406c4db5ba1ed6d66567ddaef4b86386496e1' into users/me…
Meinersbur Nov 1, 2024
e548fff
Merge commit 'd23b7f5f9f4adf1f12c268771055ba1c8ce6e01b^' into users/m…
Meinersbur Nov 1, 2024
a743b60
Merge commit 'd23b7f5f9f4adf1f12c268771055ba1c8ce6e01b' into users/me…
Meinersbur Nov 1, 2024
c779b65
Merge commit '79d59c3f3e8abb66a758793bfd9acd8ea6b3d92b^' into users/m…
Meinersbur Nov 1, 2024
58195d3
Merge commit '79d59c3f3e8abb66a758793bfd9acd8ea6b3d92b' into users/me…
Meinersbur Nov 1, 2024
9565b27
Merge commit 'b432dd2d4b75847cc51bd3d4b41f4d71ca9bf0bd' into users/me…
Meinersbur Nov 1, 2024
0e549c0
Merge commit 'cde2cc9a8f46acfa1f92b127de28748943dc2de8' into users/me…
Meinersbur Nov 1, 2024
1762c29
Merge commit '06911ba6ea1e552d3bcaed2728c92a9aa6cbf4d2^' into users/m…
Meinersbur Nov 1, 2024
5eaf8a2
Merge commit '06911ba6ea1e552d3bcaed2728c92a9aa6cbf4d2' into users/me…
Meinersbur Nov 1, 2024
d79fe0e
Backport applied merge
Meinersbur Nov 1, 2024
419fe95
Merge commit 'a19ae77d2a9016428fee7cd5af03fd20ad6d4464^' into users/m…
Meinersbur Nov 1, 2024
faf3ec6
Merge commit 'a19ae77d2a9016428fee7cd5af03fd20ad6d4464' into users/me…
Meinersbur Nov 1, 2024
4a1be01
Merge commit '80f2f1eabc491cde39d543e4ebda93e2d2974d1f^' into users/m…
Meinersbur Nov 1, 2024
9d8e570
Merge commit '80f2f1eabc491cde39d543e4ebda93e2d2974d1f' into users/me…
Meinersbur Nov 1, 2024
e60abd8
Merge commit '32b38d248fd3c75abc5c86ab6677b6cb08a703cc^' into users/m…
Meinersbur Nov 1, 2024
66282ed
Merge commit '32b38d248fd3c75abc5c86ab6677b6cb08a703cc' into users/me…
Meinersbur Nov 1, 2024
67acce7
apply insertAt->insertInto
Meinersbur Nov 1, 2024
d1d4132
Merge commit 'fb8eb84e5fd0b3219bd89522cceee3a8e128a85f^' into users/m…
Meinersbur Nov 1, 2024
36ce773
Merge commit 'fb8eb84e5fd0b3219bd89522cceee3a8e128a85f' into users/me…
Meinersbur Nov 1, 2024
22fa0b3
Re-apply last merge changes
Meinersbur Nov 1, 2024
e1acf65
Merge commit 'f9599bbc7a3f831e1793a549d8a7a19265f3e504^' into users/m…
Meinersbur Nov 1, 2024
8777a07
Merge commit 'f9599bbc7a3f831e1793a549d8a7a19265f3e504' into users/me…
Meinersbur Nov 1, 2024
72bd2da
Merge commit '0cbb8ec030e23c0e13331b5d54155def8c901b36^' into users/m…
Meinersbur Nov 1, 2024
de44f8c
Merge commit '0cbb8ec030e23c0e13331b5d54155def8c901b36' into users/me…
Meinersbur Nov 1, 2024
4add729
Merge commit '5da674492a5acf8e08a58f611e39ff4cd6a16dfe^' into users/m…
Meinersbur Nov 1, 2024
1d5937b
erge commit '5da674492a5acf8e08a58f611e39ff4cd6a16dfe' into users/mei…
Meinersbur Nov 1, 2024
dd699c1
Merge commit '6942c64e8128e4ccd891b813d0240f574f80f59e^' into users/m…
Meinersbur Nov 1, 2024
ee48944
Merge commit '6942c64e8128e4ccd891b813d0240f574f80f59e' into users/me…
Meinersbur Nov 1, 2024
4fced02
Merge commit '5064ca8b591315b628120f67de0411f8e20f2e8f^' into users/m…
Meinersbur Nov 1, 2024
3e9219c
Merge commit '5064ca8b591315b628120f67de0411f8e20f2e8f' into users/me…
Meinersbur Nov 1, 2024
e086736
Merge commit '5181156b3743df29dc840e15990d9202b3501f60^' into users/m…
Meinersbur Nov 1, 2024
2060d9a
Re-apply merge
Meinersbur Nov 1, 2024
8be7ac4
Merge commit 'df3478e480b3b2e9fe125697b7931dc48b09e450^' into users/m…
Meinersbur Nov 1, 2024
2f5752b
Merge commit 'df3478e480b3b2e9fe125697b7931dc48b09e450' into users/me…
Meinersbur Nov 1, 2024
64c7171
Merge commit 'eee8dd90887cbf86fa0fea1ff770377a87af0257^' into users/m…
Meinersbur Nov 1, 2024
376df21
Merge commit 'eee8dd90887cbf86fa0fea1ff770377a87af0257' into users/me…
Meinersbur Nov 1, 2024
34cdd8c
merge fix
Meinersbur Nov 1, 2024
66465ed
Merge commit '6b8ed78719d0ae8eff55b937a976602f3a748697^' into users/m…
Meinersbur Nov 1, 2024
f628802
Merge commit '6b8ed78719d0ae8eff55b937a976602f3a748697' into users/me…
Meinersbur Nov 1, 2024
0c6b352
Merge commit '7b9d73c2f90c0ed8497339a16fc39785349d9610^' into users/m…
Meinersbur Nov 1, 2024
63c0c1a
Merge commit '7b9d73c2f90c0ed8497339a16fc39785349d9610' into users/me…
Meinersbur Nov 1, 2024
b697d9a
Merge commit 'b7b5907b56e98719b1dba8364ebcfb264fc09bfe^' into users/m…
Meinersbur Nov 1, 2024
c9e3520
Merge commit 'b7b5907b56e98719b1dba8364ebcfb264fc09bfe' into users/me…
Meinersbur Nov 1, 2024
a90631d
Merge commit '3bf72bf427f15521111df4e35c868005ceb0013b^' into users/m…
Meinersbur Nov 1, 2024
bf3db9b
Merge commit '3bf72bf427f15521111df4e35c868005ceb0013b' into users/me…
Meinersbur Nov 2, 2024
6979662
Merge commit 'bf5d96c96c40e485327e8ddf4fb8f0ddae859e6f^' into users/m…
Meinersbur Nov 2, 2024
16912a9
Merge commit 'bf5d96c96c40e485327e8ddf4fb8f0ddae859e6f' into users/me…
Meinersbur Nov 2, 2024
4619a32
Merge commit 'd041af3019984f505530bac3acb94ca2f13f33cd^' into users/m…
Meinersbur Nov 2, 2024
ea7f998
Merge commit 'd041af3019984f505530bac3acb94ca2f13f33cd' into users/me…
Meinersbur Nov 2, 2024
5e1ffdd
Merge commit '632f44e5edee6395ef26953d41a0e681a121aad3^' into users/m…
Meinersbur Nov 2, 2024
7f3d338
Merge commit '632f44e5edee6395ef26953d41a0e681a121aad3' into users/me…
Meinersbur Nov 2, 2024
7629cef
Merge commit '1833de3ee364a996d03bb23b19fe472e3e2ddf3b^' into users/m…
Meinersbur Nov 2, 2024
6b77154
Merge commit '1833de3ee364a996d03bb23b19fe472e3e2ddf3b' into users/me…
Meinersbur Nov 2, 2024
e0f9f26
Merge commit 'ababa964752d5bfa6eb608c97f19d4e68df1d243^' into users/m…
Meinersbur Nov 2, 2024
2af4152
Merge commit '6b62a9135a28bd001263e5a9db08d4cff1123126' into users/me…
Meinersbur Nov 2, 2024
fc5ea7e
Insert instructions using iterators
Meinersbur Nov 2, 2024
1bb4d26
Merge commit 'e0d49066c1acfa4ae0f0e8ea49b0f0b6bb3f1a25^' into users/m…
Meinersbur Nov 2, 2024
c286985
Merge commit 'e0d49066c1acfa4ae0f0e8ea49b0f0b6bb3f1a25' into users/me…
Meinersbur Nov 2, 2024
6635f3e
Merge commit '0861755e597e671424ee369f36dff5591b7178ee^' into users/m…
Meinersbur Nov 2, 2024
25ee1b8
Merge commit '0861755e597e671424ee369f36dff5591b7178ee' into users/me…
Meinersbur Nov 2, 2024
13e85f8
Merge commit '40282674e9808baeb9b88afdd3cbd7da46825544^' into users/m…
Meinersbur Nov 2, 2024
fd26f43
Merge commit '40282674e9808baeb9b88afdd3cbd7da46825544' into users/me…
Meinersbur Nov 2, 2024
0ff97dc
Merge commit '15f3f446c504d1bb85282fb3bd98db6eab69829d^' into users/m…
Meinersbur Nov 2, 2024
5b2556a
Merge commit '15f3f446c504d1bb85282fb3bd98db6eab69829d' into users/me…
Meinersbur Nov 2, 2024
fcbebc0
Merge commit 'ff63d628c46459437df21e09f70993685eba4bc3^' into users/m…
Meinersbur Nov 2, 2024
f825999
Merge commit 'ff63d628c46459437df21e09f70993685eba4bc3' into users/me…
Meinersbur Nov 2, 2024
b1b4fc1
Re-apply
Meinersbur Nov 2, 2024
3ed964e
Merge commit 'ffd08c7759000f55332f1657a1fab64a7adc03fd' into users/me…
Meinersbur Nov 2, 2024
801ea1b
Merge commit 'bdc77d1ecc9219dfc641aaaa4fb088233e9a32d1' into users/me…
Meinersbur Nov 2, 2024
f9f1665
Merge commit 'ce73b1672a6053d5974dc2342881aac02efe2dbb^' into users/m…
Meinersbur Nov 2, 2024
8f1538f
Merge commit 'ce73b1672a6053d5974dc2342881aac02efe2dbb' into users/me…
Meinersbur Nov 2, 2024
827626e
Merge commit '91d7ca904c601d181c431bffbf2773165de2fabd' into users/me…
Meinersbur Nov 2, 2024
d6ac280
Merge commit 'c4f8ae6f32dadf9383c94ed13152d91f68631255' into users/me…
Meinersbur Nov 2, 2024
e8857fd
Merge commit '5ece35df8586d0cb8c104a9f44eaae771de025f5' into users/me…
Meinersbur Nov 2, 2024
206f353
Merge commit '6cc8774228a4162ebadfa636086a171f82e51a8c' into users/me…
Meinersbur Nov 2, 2024
6988226
Merge commit 'b143b2483fc5d7e73763ff9292dec6479552de9e' into users/me…
Meinersbur Nov 2, 2024
d0475d9
Merge commit 'fa658ac7913408d5ec248193d531ba63f6fbe73d' into users/me…
Meinersbur Nov 2, 2024
ad78fbf
Merge commit 'a195e2d461dde7c73c6dd24da097affb1a7b6f78' into users/me…
Meinersbur Nov 2, 2024
983427b
Merge commit '178fc4779ece31392a2cd01472b0279e50b3a199' into users/me…
Meinersbur Nov 2, 2024
99540f8
Merge commit 'fef3426ad3d8d5bf01941438467df318d00c6279' into users/me…
Meinersbur Nov 2, 2024
31ad714
erge commit 'e17a39bc314f97231e440c9e68d9f46a9c07af6d' into users/mei…
Meinersbur Nov 2, 2024
03a9841
Merge commit '14120227a34365e829d05c1413033d235d7d272c' into users/me…
Meinersbur Nov 2, 2024
d62cdf9
Merge commit 'e03f427196ec67a8a5cfbdd658f9eabe9bce83ce' into users/me…
Meinersbur Nov 2, 2024
59ef5e5
Merge commit '0f488a0b7d3da3c736e9242e5dd110ba0322e45a' into users/me…
Meinersbur Nov 2, 2024
a534511
Merge commit 'fa789dffb1e12c2aece0187aeacc48dfb1768340' into users/me…
Meinersbur Nov 2, 2024
b067189
Merge commit '76007138f4ffd4e0f510d12b5e8cad529c21f24d' into users/me…
Meinersbur Nov 2, 2024
f345536
Merge commit '4102625380823e58d7b13f01b5bd979a29bce19e' into users/me…
Meinersbur Nov 2, 2024
cd3c857
Remove unused varaible
Meinersbur Nov 2, 2024
5139231
Merge branch 'main' into users/meinersbur/irbuilder-extract-refactor
Meinersbur Nov 2, 2024
035c7ea
Merge commit '4aaa92578686176243a294eeb2ca5697a99edcaa^' into users/m…
Meinersbur Nov 4, 2024
d5cb3a9
Merge commit '4aaa92578686176243a294eeb2ca5697a99edcaa' into users/me…
Meinersbur Nov 4, 2024
3947031
post-merge fix
Meinersbur Nov 4, 2024
3cffa34
Merge branch 'main' into users/meinersbur/irbuilder-extract-refactor
Meinersbur Nov 4, 2024
bbf7cb6
typo
Meinersbur Nov 4, 2024
277fe43
Re-insert what's lost after merge
Meinersbur Nov 5, 2024
9010e93
Expand doxygen on SwitchCases
Meinersbur Nov 5, 2024
6c7f3b4
Extract-out applyFirstDebugLoc
Meinersbur Nov 7, 2024
4ca6906
Merge branch 'users/meinersbur/irbuilder-extract-applyFirstDebugLoc' …
Meinersbur Nov 7, 2024
71e373c
Merge commit '644a9a4327af4fb4f7b09832cafe3c82843231b5^' into users/m…
Meinersbur Nov 12, 2024
db3c7f9
Merge commit '644a9a4327af4fb4f7b09832cafe3c82843231b5' into users/me…
Meinersbur Nov 12, 2024
e8db4a5
Merge branch 'main' into users/meinersbur/irbuilder-extract-refactor
Meinersbur Nov 12, 2024
b707c7e
SwitchCases -> ExtractedFuncRetVals
Meinersbur Nov 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 65 additions & 16 deletions llvm/include/llvm/Transforms/Utils/CodeExtractor.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class Instruction;
class Module;
class Type;
class Value;
class StructType;

/// A cache for the CodeExtractor analysis. The operation \ref
/// CodeExtractor::extractCodeRegion is guaranteed not to invalidate this
Expand Down Expand Up @@ -101,12 +102,25 @@ class CodeExtractorAnalysisCache {

// Bits of intermediate state computed at various phases of extraction.
SetVector<BasicBlock *> Blocks;
unsigned NumExitBlocks = std::numeric_limits<unsigned>::max();
Type *RetTy;

// Mapping from the original exit blocks, to the new blocks inside
// the function.
SmallVector<BasicBlock *, 4> OldTargets;
/// Lists of blocks that are branched from the code region to be extracted,
/// also called the exit blocks. Each block is contained at most once. Its
/// order defines the return value of the extracted function.
///
/// When there is just one (or no) exit block, the return value is
/// irrelevant.
///
/// When there are exactly two exit blocks, the extracted function returns a
/// boolean. For SwitchCases[0], it returns 'true'. For SwitchCases[1] it
/// returns 'false'.
/// NOTE: Since a boolean is represented by i1, SwitchCases[0] returns 1 and
/// SwitchCases[1] returns 0, which is inverted with the the regular
/// switch case below.
///
/// When there are 3 or more exit blocks, leaving the extracted function via
/// the first block it returns 0. When leaving via the second entry it
/// returns 1, etc.
SmallVector<BasicBlock *> SwitchCases;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I think this should be "ExitBlocks"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I intentionally named it SwitchCases to indicate that it is not just an unordered list of exist blocks, but the order is used to determine the extracted function's return values and the replacement switch statement. I am not married to the name (could also be ExtractedFunctionReturnValues), but I honestly think that ExitBlocks would be a misleading name.

Despite this, do you still prefer ExitBlocks?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just any name that doesn't imply it's only used by a switch instruction.


// Suffix to use when creating extracted function (appended to the original
// function name + "."). If empty, the default is to use the entry block
Expand Down Expand Up @@ -238,26 +252,61 @@ class CodeExtractorAnalysisCache {
getLifetimeMarkers(const CodeExtractorAnalysisCache &CEAC,
Instruction *Addr, BasicBlock *ExitBlock) const;

/// Updates the list of SwitchCases (corresponding to exit blocks) after
/// changes of the control flow or the Blocks list.
void recomputeSwitchCases();

/// Return the type used for the return code of the extracted function to
/// indicate which exit block to jump to.
Type *getSwitchType();

void severSplitPHINodesOfEntry(BasicBlock *&Header);
void severSplitPHINodesOfExits(const SetVector<BasicBlock *> &Exits);
void severSplitPHINodesOfExits();
void splitReturnBlocks();

Function *constructFunction(const ValueSet &inputs,
const ValueSet &outputs,
BasicBlock *header,
BasicBlock *newRootNode, BasicBlock *newHeader,
Function *oldFunction, Module *M);

void moveCodeToFunction(Function *newFunction);

void calculateNewCallTerminatorWeights(
BasicBlock *CodeReplacer,
DenseMap<BasicBlock *, BlockFrequency> &ExitWeights,
const DenseMap<BasicBlock *, BlockFrequency> &ExitWeights,
BranchProbabilityInfo *BPI);

CallInst *emitCallAndSwitchStatement(Function *newFunction,
BasicBlock *newHeader,
ValueSet &inputs, ValueSet &outputs);
/// Normalizes the control flow of the extracted regions, such as ensuring
/// that the extracted region does not contain a return instruction.
void normalizeCFGForExtraction(BasicBlock *&header);

/// Generates the function declaration for the function containing the
/// extracted code.
Function *constructFunctionDeclaration(const ValueSet &inputs,
const ValueSet &outputs,
BlockFrequency EntryFreq,
const Twine &Name,
ValueSet &StructValues,
StructType *&StructTy);

/// Generates the code for the extracted function. That is: a prolog, the
/// moved or copied code from the original function, and epilogs for each
/// exit.
void emitFunctionBody(const ValueSet &inputs, const ValueSet &outputs,
const ValueSet &StructValues, Function *newFunction,
StructType *StructArgTy, BasicBlock *header,
const ValueSet &SinkingCands);

/// Generates a Basic Block that calls the extracted function.
CallInst *emitReplacerCall(const ValueSet &inputs, const ValueSet &outputs,
const ValueSet &StructValues,
Function *newFunction, StructType *StructArgTy,
Function *oldFunction, BasicBlock *ReplIP,
BlockFrequency EntryFreq,
ArrayRef<Value *> LifetimesStart,
std::vector<Value *> &Reloads);

/// Connects the basic block containing the call to the extracted function
/// into the original function's control flow.
void insertReplacerCall(
Function *oldFunction, BasicBlock *header, BasicBlock *codeReplacer,
const ValueSet &outputs, ArrayRef<Value *> Reloads,
const DenseMap<BasicBlock *, BlockFrequency> &ExitWeights);
};

} // end namespace llvm
Expand Down
Loading