1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs 2; RUN: opt -S -passes=verify,iroutliner -ir-outlining-no-cost < %s | FileCheck %s 3 4; Show that we are able to outline the simple phi node case of constants when 5; the corresponding labels match. 6 7define void @function1(ptr %a, ptr %b) { 8entry: 9 br label %test 10test: 11 br label %first 12first: 13 %0 = phi i32 [ 0, %test ] 14 store i32 2, ptr %a, align 4 15 store i32 3, ptr %b, align 4 16 ret void 17} 18 19define void @function2(ptr %a, ptr %b) { 20entry: 21 br label %test 22test: 23 br label %first 24first: 25 %0 = phi i32 [ 0, %test ] 26 store i32 2, ptr %a, align 4 27 store i32 3, ptr %b, align 4 28 ret void 29} 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 void 34; 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 void 40; 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 4 52; CHECK-NEXT: store i32 3, ptr [[TMP1:%.*]], align 4 53; CHECK-NEXT: br label [[ENTRY_AFTER_OUTLINE_EXITSTUB:%.*]] 54; CHECK: entry_after_outline.exitStub: 55; CHECK-NEXT: ret void 56; 57