90 lines · plain
1; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=arguments-to-return --test FileCheck --test-arg --check-prefixes=INTERESTING --test-arg %s --test-arg --input-file %s -o %t2; RUN: FileCheck --check-prefixes=RESULT %s < %t3 4@gv = global i32 05 6; INTERESTING-LABEL: @move_entry_block_use_argument_to_return(i32 %arg) {7; INTERESTING: i32 %arg8 9; RESULT-LABEL: define i32 @move_entry_block_use_argument_to_return(10; RESULT-NEXT: ret i32 %arg11; RESULT-NEXT: }12define void @move_entry_block_use_argument_to_return(i32 %arg) {13 store i32 %arg, ptr @gv14 ret void15}16 17; INTERESTING-LABEL: @move_entry_block_use_argument_to_return_existing_ret(i32 %arg) {18; INTERESTING: %arg19 20; RESULT-LABEL: define i32 @move_entry_block_use_argument_to_return_existing_ret(21; RESULT-NEXT: ret i32 %arg22; RESULT-NEXT: }23define i32 @move_entry_block_use_argument_to_return_existing_ret(i32 %arg) {24 store i32 %arg, ptr @gv25 ret i32 026}27 28; INTERESTING-LABEL: @move_phi_block_use_argument_to_return(i32 %arg, ptr %ptr0, ptr %ptr1, i1 %cond0, i1 %cond1) {29; INTERESTING: %arg30 31; RESULT-LABEL: define i32 @move_phi_block_use_argument_to_return(32; RESULT-NEXT: entry:33; RESULT-NEXT: ret i32 %arg34define void @move_phi_block_use_argument_to_return(i32 %arg, ptr %ptr0, ptr %ptr1, i1 %cond0, i1 %cond1) {35entry:36 br i1 %cond0, label %bb0, label %bb137 38bb0:39 %phi = phi i32 [ %arg, %entry ], [ 123, %bb1 ]40 store i32 %arg, ptr %ptr041 store i32 %phi, ptr %ptr142 br label %bb143 44bb1:45 br i1 %cond1, label %bb0, label %bb246 47bb2:48 ret void49}50 51; INTERESTING-LABEL: define {{.*}} @keep_first_arg(i32 %arg0, ptr %arg1) {52; INTERESTING: %arg053 54; RESULT-LABEL: define i32 @keep_first_arg(55; RESULT-NEXT: ret i32 %arg056; RESULT-NEXT: }57define void @keep_first_arg(i32 %arg0, ptr %arg1) {58 store i32 %arg0, ptr %arg159 ret void60}61 62; INTERESTING-LABEL: define {{.*}} @keep_second_arg(i32 %arg0, ptr %arg1) {63; INTERESTING: %arg164 65; RESULT-LABEL: define ptr @keep_second_arg(66; RESULT-NEXT: ret ptr %arg167; RESULT-NEXT: }68define void @keep_second_arg(i32 %arg0, ptr %arg1) {69 store i32 %arg0, ptr %arg170 ret void71}72 73; INTERESTING-LABEL: @multi_void_return_arg(i1 %arg0, ptr %arg1, i32 %arg2) {74; INTERESTING: i32 %arg275 76; RESULT-LABEL: define i32 @multi_void_return_arg(i1 %arg0, ptr %arg1, i32 %arg2) {77; RESULT-NEXT: entry:78; RESULT-NEXT: ret i32 %arg279define void @multi_void_return_arg(i1 %arg0, ptr %arg1, i32 %arg2) {80entry:81 br i1 %arg0, label %bb0, label %bb182 83bb0:84 store i32 %arg2, ptr %arg185 ret void86 87bb1:88 ret void89}90