125 lines · plain
1; RUN: llvm-split -o %t_s3_ %s -j 3 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-max-depth=82; RUN: llvm-dis -o - %t_s3_0 | FileCheck --check-prefix=SPLIT3-CHECK0 --implicit-check-not=define %s3; RUN: llvm-dis -o - %t_s3_1 | FileCheck --check-prefix=SPLIT3-CHECK1 --implicit-check-not=define %s4; RUN: llvm-dis -o - %t_s3_2 | FileCheck --check-prefix=SPLIT3-CHECK2 --implicit-check-not=define %s5 6; RUN: llvm-split -o %t_s5_ %s -j 5 -mtriple amdgcn-amd-amdhsa -amdgpu-module-splitting-max-depth=87; RUN: llvm-dis -o - %t_s5_0 | FileCheck --check-prefix=SPLIT5-CHECK0 --implicit-check-not=define %s8; RUN: llvm-dis -o - %t_s5_1 | FileCheck --check-prefix=SPLIT5-CHECK1 --implicit-check-not=define %s9; RUN: llvm-dis -o - %t_s5_2 | FileCheck --check-prefix=SPLIT5-CHECK2 --implicit-check-not=define %s10; RUN: llvm-dis -o - %t_s5_3 | FileCheck --check-prefix=SPLIT5-CHECK3 --implicit-check-not=define %s11; RUN: llvm-dis -o - %t_s5_4 | FileCheck --check-prefix=SPLIT5-CHECK4 --implicit-check-not=define %s12 13; Test the specifics of the search algorithm.14; This test will change depending on new heuristics we add or remove.15 16; --------------------------------------------17 18; SPLIT3-CHECK0: define amdgpu_kernel void @A()19; SPLIT3-CHECK0: define internal void @HelperA()20; SPLIT3-CHECK0: define amdgpu_kernel void @B()21; SPLIT3-CHECK0: define internal void @HelperB()22 23; SPLIT3-CHECK1: define amdgpu_kernel void @C()24; SPLIT3-CHECK1: define internal void @HelperC()25 26; SPLIT3-CHECK2: define internal void @HelperA()27; SPLIT3-CHECK2: define internal void @HelperB()28; SPLIT3-CHECK2: define internal void @HelperC()29; SPLIT3-CHECK2: define amdgpu_kernel void @AB()30; SPLIT3-CHECK2: define amdgpu_kernel void @BC()31; SPLIT3-CHECK2: define amdgpu_kernel void @ABC()32 33; --------------------------------------------34 35; SPLIT5-CHECK0: define amdgpu_kernel void @A()36; SPLIT5-CHECK0: define internal void @HelperA()37 38; SPLIT5-CHECK1: define amdgpu_kernel void @B()39; SPLIT5-CHECK1: define internal void @HelperB()40 41; SPLIT5-CHECK2: define internal void @HelperB()42; SPLIT5-CHECK2: define internal void @HelperC()43; SPLIT5-CHECK2: define amdgpu_kernel void @BC44 45; SPLIT5-CHECK3: define amdgpu_kernel void @C()46; SPLIT5-CHECK3: define internal void @HelperC()47 48; SPLIT5-CHECK4: define internal void @HelperA()49; SPLIT5-CHECK4: define internal void @HelperB()50; SPLIT5-CHECK4: define internal void @HelperC()51; SPLIT5-CHECK4: define amdgpu_kernel void @AB()52; SPLIT5-CHECK4: define amdgpu_kernel void @ABC()53 54define amdgpu_kernel void @A() {55 store volatile i64 42, ptr null56 store volatile i64 42, ptr null57 store volatile i64 42, ptr null58 store volatile i64 42, ptr null59 store volatile i64 42, ptr null60 call void @HelperA()61 ret void62}63 64define internal void @HelperA() {65 store volatile i32 42, ptr null66 store volatile i32 42, ptr null67 ret void68}69 70define amdgpu_kernel void @B() {71 store volatile i64 42, ptr null72 store volatile i64 42, ptr null73 store volatile i64 42, ptr null74 store volatile i64 42, ptr null75 call void @HelperB()76 ret void77}78 79define internal void @HelperB() {80 store volatile i32 42, ptr null81 store volatile i32 42, ptr null82 store volatile i32 42, ptr null83 ret void84}85 86define amdgpu_kernel void @C() {87 store volatile i64 42, ptr null88 store volatile i64 42, ptr null89 store volatile i64 42, ptr null90 store volatile i64 42, ptr null91 store volatile i64 42, ptr null92 store volatile i64 42, ptr null93 store volatile i64 42, ptr null94 store volatile i64 42, ptr null95 call void @HelperC()96 ret void97}98 99define internal void @HelperC() {100 store volatile i32 42, ptr null101 ret void102}103 104define amdgpu_kernel void @AB() {105 store volatile i32 42, ptr null106 call void @HelperA()107 call void @HelperB()108 ret void109}110 111define amdgpu_kernel void @BC() {112 store volatile i32 42, ptr null113 store volatile i32 42, ptr null114 call void @HelperB()115 call void @HelperC()116 ret void117}118 119define amdgpu_kernel void @ABC() {120 call void @HelperA()121 call void @HelperB()122 call void @HelperC()123 ret void124}125