Skip to content

Commit f5353d4

Browse files
committed
Revert "[AMDGPU] Graph-based Module Splitting Rewrite (llvm#104763)"
This reverts commit c9b6e01.
1 parent 7037b91 commit f5353d4

17 files changed

+738
-1624
lines changed

llvm/lib/Target/AMDGPU/AMDGPUSplitModule.cpp

Lines changed: 530 additions & 1272 deletions
Large diffs are not rendered by default.

llvm/test/tools/llvm-split/AMDGPU/address-taken-externalize-with-call.ll

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
1-
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-large-threshold=0
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
1+
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-large-function-threshold=0
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
55

66
; 3 kernels:
77
; - A does a direct call to HelperA
88
; - B is storing @HelperA
99
; - C does a direct call to HelperA
1010
;
11-
; The helper functions will get externalized, so C/A will end up
12-
; in the same partition.
13-
14-
; P0 is empty.
15-
; CHECK0: declare
16-
17-
; CHECK1: define amdgpu_kernel void @B(ptr %dst)
18-
19-
; CHECK2: define hidden void @HelperA()
20-
; CHECK2: define amdgpu_kernel void @A()
21-
; CHECK2: define amdgpu_kernel void @C()
11+
; The helper functions will get externalized, which will force A and C into P0 as
12+
; external functions cannot be duplicated.
13+
14+
; CHECK0: define hidden void @HelperA()
15+
; CHECK0: define amdgpu_kernel void @A()
16+
; CHECK0: declare amdgpu_kernel void @B(ptr)
17+
; CHECK0: define amdgpu_kernel void @C()
18+
19+
; CHECK1: declare hidden void @HelperA()
20+
; CHECK1: declare amdgpu_kernel void @A()
21+
; CHECK1: declare amdgpu_kernel void @B(ptr)
22+
; CHECK1: declare amdgpu_kernel void @C()
23+
24+
; CHECK2: declare hidden void @HelperA()
25+
; CHECK2: declare amdgpu_kernel void @A()
26+
; CHECK2: define amdgpu_kernel void @B(ptr %dst)
27+
; CHECK2: declare amdgpu_kernel void @C()
2228

2329
define internal void @HelperA() {
2430
ret void

llvm/test/tools/llvm-split/AMDGPU/address-taken-externalize.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llvm-split -o %t %s -j 2 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-large-threshold=0
1+
; RUN: llvm-split -o %t %s -j 2 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-large-function-threshold=0
22
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
33
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
44

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa -debug -amdgpu-module-splitting-log-private 2>&1 | FileCheck %s --implicit-check-not=MyCustomKernel
2+
; REQUIRES: asserts
3+
4+
; SHA256 of the kernel names.
5+
6+
; CHECK: a097723d21cf9f35d90e6fb7881995ac8c398b3366a6c97efc657404f9fe301c
7+
; CHECK: 626bc23242de8fcfda7f0e66318d29455c081df6b5380e64d14703c95fcbcd59
8+
; CHECK: c38d90a7ca71dc5d694bb9e093dadcdedfc4cb4adf7ed7e46d42fe95a0b4ef55
9+
10+
define amdgpu_kernel void @MyCustomKernel0() {
11+
ret void
12+
}
13+
14+
define amdgpu_kernel void @MyCustomKernel1() {
15+
ret void
16+
}
17+
18+
define amdgpu_kernel void @MyCustomKernel2() {
19+
ret void
20+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
; RUN: llvm-split -o %t %s -j 2 -mtriple amdgcn-amd-amdhsa -debug 2>&1 | FileCheck %s --implicit-check-not="[root]"
2+
; REQUIRES: asserts
3+
4+
; func_3 is never directly called, it needs to be considered
5+
; as a root to handle this module correctly.
6+
7+
; CHECK: [root] kernel_1
8+
; CHECK-NEXT: [dependency] func_1
9+
; CHECK-NEXT: [dependency] func_2
10+
; CHECK-NEXT: [root] func_3
11+
; CHECK-NEXT: [dependency] func_2
12+
13+
define amdgpu_kernel void @kernel_1() {
14+
entry:
15+
call void @func_1()
16+
ret void
17+
}
18+
19+
define linkonce_odr hidden void @func_1() {
20+
entry:
21+
%call = call i32 @func_2()
22+
ret void
23+
}
24+
25+
define linkonce_odr hidden i32 @func_2() #0 {
26+
entry:
27+
ret i32 0
28+
}
29+
30+
define void @func_3() {
31+
entry:
32+
%call = call i32 @func_2()
33+
ret void
34+
}
35+
36+
attributes #0 = { noinline optnone }
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
; RUN: rm -rf %t0 %t1
22
; RUN: llvm-split -o %t %s -j 2 -mtriple amdgcn-amd-amdhsa
33
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
4-
; RUN: not llvm-dis -o - %t1
4+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
55

6-
; Empty module without any defs should result in a single output module that is
7-
; an exact copy of the input.
6+
; Check that all declarations are put into each partition.
87

98
; CHECK0: declare void @A
109
; CHECK0: declare void @B
1110

11+
; CHECK1: declare void @A
12+
; CHECK1: declare void @B
13+
1214
declare void @A()
15+
1316
declare void @B()

llvm/test/tools/llvm-split/AMDGPU/kernels-alias-dependencies.ll

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: llvm-split -o %t %s -j 2 -mtriple amdgcn-amd-amdhsa
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
44

55
; 3 kernels:
66
; - A calls nothing
@@ -13,12 +13,16 @@
1313
; Additionally, @PerryThePlatypus gets externalized as
1414
; the alias counts as taking its address.
1515

16-
; CHECK0: define amdgpu_kernel void @A
16+
; CHECK0-NOT: define
17+
; CHECK0: @Perry = internal alias ptr (), ptr @PerryThePlatypus
18+
; CHECK0: define hidden void @PerryThePlatypus()
19+
; CHECK0: define amdgpu_kernel void @B
20+
; CHECK0: define amdgpu_kernel void @C
21+
; CHECK0-NOT: define
1722

18-
; CHECK1: @Perry = internal alias ptr (), ptr @PerryThePlatypus
19-
; CHECK1: define hidden void @PerryThePlatypus()
20-
; CHECK1: define amdgpu_kernel void @B
21-
; CHECK1: define amdgpu_kernel void @C
23+
; CHECK1-NOT: define
24+
; CHECK1: define amdgpu_kernel void @A
25+
; CHECK1-NOT: define
2226

2327
@Perry = internal alias ptr(), ptr @PerryThePlatypus
2428

llvm/test/tools/llvm-split/AMDGPU/kernels-cost-ranking.ll

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
55

66
; 3 kernels with each their own dependencies should go into 3
77
; distinct partitions. The most expensive kernel should be
88
; seen first and go into the last partition.
99

10+
; CHECK0-NOT: define
1011
; CHECK0: define amdgpu_kernel void @C
1112
; CHECK0: define internal void @HelperC
1213
; CHECK0-NOT: define
1314

15+
; CHECK1-NOT: define
1416
; CHECK1: define amdgpu_kernel void @A
1517
; CHECK1: define internal void @HelperA
18+
; CHECK1-NOT: define
1619

20+
; CHECK2-NOT: define
1721
; CHECK2: define amdgpu_kernel void @B
1822
; CHECK2: define internal void @HelperB
23+
; CHECK2-NOT: define
24+
1925

2026
define amdgpu_kernel void @A() {
2127
call void @HelperA()

llvm/test/tools/llvm-split/AMDGPU/kernels-dependency-external.ll

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
11
; RUN: llvm-split -o %t %s -j 4 -mtriple amdgcn-amd-amdhsa
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
5-
; RUN: llvm-dis -o - %t3 | FileCheck --check-prefix=CHECK3 --implicit-check-not=define %s
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
5+
; RUN: llvm-dis -o - %t3 | FileCheck --check-prefix=CHECK3 %s
66

7-
; CHECK0: define internal void @PrivateHelper1()
8-
; CHECK0: define amdgpu_kernel void @D
7+
; Both overridable helper should go in P0.
98

10-
; CHECK1: define internal void @PrivateHelper0()
11-
; CHECK1: define amdgpu_kernel void @C
9+
; CHECK0-NOT: define
10+
; CHECK0: define available_externally void @OverridableHelper0()
11+
; CHECK0: define internal void @OverridableHelper1()
12+
; CHECK0: define amdgpu_kernel void @A
13+
; CHECK0: define amdgpu_kernel void @B
14+
; CHECK0-NOT: define
1215

13-
; CHECK2: define internal void @OverridableHelper1()
14-
; CHECK2: define amdgpu_kernel void @B
16+
; CHECK1-NOT: define
1517

16-
; CHECK3: define available_externally void @OverridableHelper0()
17-
; CHECK3: define amdgpu_kernel void @A
18+
; CHECK2-NOT: define
19+
; CHECK2: define internal void @PrivateHelper1()
20+
; CHECK2: define amdgpu_kernel void @D
21+
; CHECK2-NOT: define
22+
23+
; CHECK3-NOT: define
24+
; CHECK3: define internal void @PrivateHelper0()
25+
; CHECK3: define amdgpu_kernel void @C
26+
; CHECK3-NOT: define
1827

1928
define available_externally void @OverridableHelper0() {
2029
ret void

llvm/test/tools/llvm-split/AMDGPU/kernels-dependency-indirect.ll

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
55

66
; We have 4 kernels:
77
; - Each kernel has an internal helper
@@ -15,19 +15,25 @@
1515
; indirect call. HelperC/D should also end up in P0 as they
1616
; are dependencies of HelperB.
1717

18+
; CHECK0-NOT: define
19+
; CHECK0: define hidden void @HelperA
20+
; CHECK0: define hidden void @HelperB
21+
; CHECK0: define hidden void @CallCandidate
22+
; CHECK0: define internal void @HelperC
1823
; CHECK0: define internal void @HelperD
19-
; CHECK0: define amdgpu_kernel void @D
24+
; CHECK0: define amdgpu_kernel void @A
25+
; CHECK0: define amdgpu_kernel void @B
26+
; CHECK0-NOT: define
2027

21-
; CHECK1: define internal void @HelperC
22-
; CHECK1: define amdgpu_kernel void @C
28+
; CHECK1-NOT: define
29+
; CHECK1: define internal void @HelperD
30+
; CHECK1: define amdgpu_kernel void @D
31+
; CHECK1-NOT: define
2332

24-
; CHECK2: define hidden void @HelperA
25-
; CHECK2: define hidden void @HelperB
26-
; CHECK2: define hidden void @CallCandidate
33+
; CHECK2-NOT: define
2734
; CHECK2: define internal void @HelperC
28-
; CHECK2: define internal void @HelperD
29-
; CHECK2: define amdgpu_kernel void @A
30-
; CHECK2: define amdgpu_kernel void @B
35+
; CHECK2: define amdgpu_kernel void @C
36+
; CHECK2-NOT: define
3137

3238
@addrthief = global [3 x ptr] [ptr @HelperA, ptr @HelperB, ptr @CallCandidate]
3339

llvm/test/tools/llvm-split/AMDGPU/kernels-dependency-overridable.ll

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
5-
6-
; CHECK0: define amdgpu_kernel void @D
7-
8-
; CHECK1: define amdgpu_kernel void @C
9-
10-
; CHECK2: define void @ExternalHelper
11-
; CHECK2: define amdgpu_kernel void @A
12-
; CHECK2: define amdgpu_kernel void @B
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
5+
6+
; CHECK0-NOT: define
7+
; CHECK0: define void @ExternalHelper
8+
; CHECK0: define amdgpu_kernel void @A
9+
; CHECK0: define amdgpu_kernel void @B
10+
; CHECK0-NOT: define
11+
12+
; CHECK1-NOT: define
13+
; CHECK1: define amdgpu_kernel void @D
14+
; CHECK1-NOT: define
15+
16+
; CHECK2-NOT: define
17+
; CHECK2: define amdgpu_kernel void @C
18+
; CHECK2-NOT: define
1319

1420
define void @ExternalHelper() {
1521
ret void

llvm/test/tools/llvm-split/AMDGPU/kernels-global-variables-noexternal.ll

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-no-externalize-globals
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
55

66
; 3 kernels use private/internal global variables.
77
; The GVs should be copied in each partition as needed.
88

9+
; CHECK0-NOT: define
910
; CHECK0: @bar = internal constant ptr
1011
; CHECK0: define amdgpu_kernel void @C
12+
; CHECK0-NOT: define
1113

14+
; CHECK1-NOT: define
1215
; CHECK1: @foo = private constant ptr
1316
; CHECK1: define amdgpu_kernel void @A
17+
; CHECK1-NOT: define
1418

19+
; CHECK2-NOT: define
1520
; CHECK2: @foo = private constant ptr
1621
; CHECK2: @bar = internal constant ptr
1722
; CHECK2: define amdgpu_kernel void @B
23+
; CHECK2-NOT: define
1824

1925
@foo = private constant ptr poison
2026
@bar = internal constant ptr poison

llvm/test/tools/llvm-split/AMDGPU/kernels-global-variables.ll

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
; RUN: llvm-split -o %t %s -j 3 -mtriple amdgcn-amd-amdhsa
2-
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 --implicit-check-not=define %s
3-
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 --implicit-check-not=define %s
4-
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 --implicit-check-not=define %s
2+
; RUN: llvm-dis -o - %t0 | FileCheck --check-prefix=CHECK0 %s
3+
; RUN: llvm-dis -o - %t1 | FileCheck --check-prefix=CHECK1 %s
4+
; RUN: llvm-dis -o - %t2 | FileCheck --check-prefix=CHECK2 %s
55

66
; 3 kernels use private/internal global variables.
77
; The GVs should be copied in each partition as needed.
88

9+
; CHECK0-NOT: define
910
; CHECK0: @foo = hidden constant ptr poison
1011
; CHECK0: @bar = hidden constant ptr poison
1112
; CHECK0: define amdgpu_kernel void @C
13+
; CHECK0-NOT: define
1214

15+
; CHECK1-NOT: define
1316
; CHECK1: @foo = external hidden constant ptr{{$}}
1417
; CHECK1: @bar = external hidden constant ptr{{$}}
1518
; CHECK1: define amdgpu_kernel void @A
19+
; CHECK1-NOT: define
1620

21+
; CHECK2-NOT: define
1722
; CHECK2: @foo = external hidden constant ptr{{$}}
1823
; CHECK2: @bar = external hidden constant ptr{{$}}
1924
; CHECK2: define amdgpu_kernel void @B
25+
; CHECK2-NOT: define
2026

2127
@foo = private constant ptr poison
2228
@bar = internal constant ptr poison

0 commit comments

Comments
 (0)