57 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s3 4; Show that we are able to outline the simple phi node case of constants when5; the corresponding labels match.6 7define void @function1(ptr %a, ptr %b) {8entry:9 br label %test10test:11 br label %first12first:13 %0 = phi i32 [ 0, %test ]14 store i32 2, ptr %a, align 415 store i32 3, ptr %b, align 416 ret void17}18 19define void @function2(ptr %a, ptr %b) {20entry:21 br label %test22test:23 br label %first24first:25 %0 = phi i32 [ 0, %test ]26 store i32 2, ptr %a, align 427 store i32 3, ptr %b, align 428 ret void29}30; CHECK-LABEL: @function1(31; CHECK-NEXT: entry:32; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A:%.*]], ptr [[B:%.*]])33; CHECK-NEXT: ret void34;35;36; CHECK-LABEL: @function2(37; CHECK-NEXT: entry:38; CHECK-NEXT: call void @outlined_ir_func_0(ptr [[A:%.*]], ptr [[B:%.*]])39; CHECK-NEXT: ret void40;41;42; CHECK: define internal void @outlined_ir_func_0(43; CHECK-NEXT: newFuncRoot:44; CHECK-NEXT: br label [[ENTRY_TO_OUTLINE:%.*]]45; CHECK: entry_to_outline:46; CHECK-NEXT: br label [[TEST:%.*]]47; CHECK: test:48; CHECK-NEXT: br label [[FIRST:%.*]]49; CHECK: first:50; CHECK-NEXT: [[TMP2:%.*]] = phi i32 [ 0, [[TEST]] ]51; CHECK-NEXT: store i32 2, ptr [[TMP0:%.*]], align 452; CHECK-NEXT: store i32 3, ptr [[TMP1:%.*]], align 453; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]]54; CHECK: entry_after_outline.exitStub:55; CHECK-NEXT: ret void56;57