1; No arguments means internalize everything 2; RUN: opt < %s -passes=internalize -S | FileCheck --check-prefix=ALL %s 3 4; Non-existent files should be treated as if they were empty (so internalize 5; everything) 6; RUN: opt < %s -passes=internalize -internalize-public-api-file /nonexistent/file 2> /dev/null -S | FileCheck --check-prefix=ALL %s 7 8; Internalize all but foo and j 9; RUN: opt < %s -passes=internalize -internalize-public-api-list foo -internalize-public-api-list j -S | FileCheck --check-prefix=FOO_AND_J %s 10 11; RUN: opt < %s -S -passes=internalize -internalize-public-api-list bar -internalize-public-api-list foo -internalize-public-api-file /nonexistent/file 2> /dev/null | FileCheck --check-prefix=FOO_AND_BAR %s 12 13; -file and -list options should be merged, the apifile contains foo and j 14; RUN: opt < %s -passes=internalize -internalize-public-api-list bar -internalize-public-api-file %S/apifile -S | FileCheck --check-prefix=FOO_J_AND_BAR %s 15 16; specifying through pass builder option 17; RUN: opt < %s -passes='internalize<preserve-gv=foo;preserve-gv=j>' -S | FileCheck --check-prefix=FOO_AND_J %s 18; RUN: opt < %s -passes='internalize<preserve-gv=foo;preserve-gv=bar>' -S | FileCheck --check-prefix=FOO_AND_BAR %s 19; RUN: opt < %s -passes='internalize<preserve-gv=foo;preserve-gv=j;preserve-gv=bar>' -S | FileCheck --check-prefix=FOO_J_AND_BAR %s 20 21; ALL: @i = internal global 22; FOO_AND_J: @i = internal global 23; FOO_AND_BAR: @i = internal global 24; FOO_J_AND_BAR: @i = internal global 25@i = global i32 0 26 27; ALL: @j = internal global 28; FOO_AND_J: @j = global 29; FOO_AND_BAR: @j = internal global 30; FOO_J_AND_BAR: @j = global 31@j = global i32 0 32 33; ALL: define internal void @main() { 34; FOO_AND_J: define internal void @main() { 35; FOO_AND_BAR: define internal void @main() { 36; FOO_J_AND_BAR: define internal void @main() { 37define void @main() { 38 ret void 39} 40 41; ALL: define internal void @foo() { 42; FOO_AND_J: define void @foo() { 43; FOO_AND_BAR: define void @foo() { 44; FOO_J_AND_BAR: define void @foo() { 45define void @foo() { 46 ret void 47} 48 49; ALL: define available_externally void @bar() { 50; FOO_AND_J: define available_externally void @bar() { 51; FOO_AND_BAR: define available_externally void @bar() { 52; FOO_J_AND_BAR: define available_externally void @bar() { 53define available_externally void @bar() { 54 ret void 55} 56 57; ALL: define dllexport void @export_foo() { 58; FOO_AND_J: define dllexport void @export_foo() { 59; FOO_AND_BAR: define dllexport void @export_foo() { 60; FOO_J_AND_BAR: define dllexport void @export_foo() { 61define dllexport void @export_foo() { 62 ret void 63} 64 65