119 lines · plain
1; RUN: llvm-reduce %s -o %t --abort-on-invalid-reduction --delta-passes=operands-to-args --test FileCheck --test-arg %s --test-arg --check-prefix=INTERESTING --test-arg --input-file2; RUN: FileCheck %s --input-file %t --check-prefix=REDUCED3 4; INTERESTING-LABEL: define void @func(5; REDUCED-LABEL: define void @func(i32 %k, ptr %Local, ptr %Global) {6 7; Keep one reference to the original value.8; INTERESTING: %[[LOCAL:Local[0-9]*]] = alloca i32, align 49; INTERESTING: store i32 42, ptr %[[LOCAL]], align 410; INTERESTING: store i32 42, ptr @Global, align 411 12; Everything else must use the function argument.13; REDUCED: store i32 21, ptr %Local, align 414; REDUCED: store i32 21, ptr %Global, align 415; REDUCED: store i32 0, ptr %Local, align 416; REDUCED: store i32 0, ptr %Global, align 417; REDUCED: store float 0.000000e+00, ptr %Global, align 418 19; Do not add any arguments for %Keep and @GlobalKeep.20; INTERESTING: %[[KEEP:LocalKeep[0-9]*]] = add i32 %k, 2121; INTERESTING: store i32 %[[KEEP]], ptr @GlobalKeep, align 422 23 24@Global = global i32 4225@GlobalKeep = global i32 4226 27define void @func(i32 %k) {28entry:29 %Local = alloca i32, align 430 31 store i32 42, ptr %Local, align 432 store i32 42, ptr @Global, align 433 34 store i32 21, ptr %Local, align 435 store i32 21, ptr @Global, align 436 37 store i32 0, ptr %Local, align 438 store i32 0, ptr @Global, align 439 40 store float 0.000000e+00, ptr @Global, align 441 42 %LocalKeep = add i32 %k, 2143 store i32 %LocalKeep, ptr @GlobalKeep, align 444 45 ret void46}47 48; INTERESTING-LABEL: define void @func_caller(49; REDUCED-LABEL: define void @func_caller() {50; REDUCED: call void @func(i32 21, ptr null, ptr null)51define void @func_caller() {52entry:53 call void @func(i32 21)54 ret void55}56 57 58; Make sure to skip functions with non-direct call users59declare void @e(ptr)60 61; INTERESTING-LABEL: define void @g(62; REDUCED-LABEL: define void @g(ptr %f) {63; REDUCED: call void @e(ptr %f)64define void @g() {65 call void @e(ptr @f)66 ret void67}68 69; INTERESTING-LABEL: define void @f(70; REDUCED-LABEL: define void @f(ptr %a) {71; REDUCED: %1 = load ptr, ptr %a, align 872define void @f(ptr %a) {73 %1 = load ptr, ptr %a74 ret void75}76 77@gv_init_use = global [1 x ptr] [ptr @has_global_init_user]78 79; INTERESTING-LABEL: define void @has_global_init_user(80; REDUCED-LABEL: define void @has_global_init_user(ptr %Local) {81define void @has_global_init_user() {82 %Local = alloca i32, align 483 store i32 42, ptr %Local, align 484 ret void85}86 87; INTERESTING-LABEL: define void @has_callee_and_arg_user(88; REDUCED-LABEL: define void @has_callee_and_arg_user(ptr %orig.arg, ptr %Local) {89define void @has_callee_and_arg_user(ptr %orig.arg) {90 %Local = alloca i32, align 491 store i32 42, ptr %Local, align 492 ret void93}94 95declare void @ptr_user(ptr)96 97; INTERESTING-LABEL: define void @calls_and_passes_func(98; REDUCED-LABEL: define void @calls_and_passes_func(ptr %has_callee_and_arg_user) {99; REDUCED: call void @has_callee_and_arg_user(ptr %has_callee_and_arg_user, ptr null)100define void @calls_and_passes_func() {101 call void @has_callee_and_arg_user(ptr @has_callee_and_arg_user)102 ret void103}104 105; INTERESTING-LABEL: define void @has_wrong_callsite_type_user(106; REDUCED-LABEL: define void @has_wrong_callsite_type_user(i32 %extra.arg, ptr %Local) {107define void @has_wrong_callsite_type_user(i32 %extra.arg) {108 %Local = alloca i32, align 4109 store i32 42, ptr %Local, align 4110 ret void111}112 113; INTERESTING-LABEL: define void @calls_wrong_func_type(114; REDUCED: call void @has_wrong_callsite_type_user()115define void @calls_wrong_func_type() {116 call void @has_wrong_callsite_type_user()117 ret void118}119