brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 9627274 Raw
72 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; When the an outlined section contains a PHINode with an incoming block5; outside of the region, the predecessors to be handled specially to ensure that6; a global value is properly assigned.  This ensures that there is no crash7; in that situation.8 9define void @fn1() local_unnamed_addr #0 {10entry:11  br label %block_112 13block_1:14  %a = phi i32 [ 0, %block_2], [ 1, %entry ]15  br i1 0, label %block_3, label %block_216block_2:17  br i1 0, label %block_3, label %block_118 19block_3:20  %b = phi i32 [ 0, %block_2 ], [ 1, %block_1 ]21  br label %block_422 23block_4:24  %c = phi i32 [ 0, %block_5 ], [ 1, %block_3 ]25  br i1 0, label %block_6, label %block_526 27block_5:28  br i1 0, label %block_6, label %block_429 30block_6:31  unreachable32}33; CHECK-LABEL: @fn1(34; CHECK-NEXT:  entry:35; CHECK-NEXT:    [[B_CE_LOC:%.*]] = alloca i32, align 436; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[B_CE_LOC]])37; CHECK-NEXT:    call void @outlined_ir_func_0(ptr [[B_CE_LOC]], i32 0)38; CHECK-NEXT:    [[B_CE_RELOAD:%.*]] = load i32, ptr [[B_CE_LOC]], align 439; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[B_CE_LOC]])40; CHECK-NEXT:    br label [[BLOCK_3:%.*]]41; CHECK:       block_3:42; CHECK-NEXT:    [[B:%.*]] = phi i32 [ [[B_CE_RELOAD]], [[ENTRY:%.*]] ]43; CHECK-NEXT:    call void @outlined_ir_func_0(ptr null, i32 -1)44; CHECK-NEXT:    br label [[BLOCK_6:%.*]]45; CHECK:       block_6:46; CHECK-NEXT:    unreachable47;48;49; CHECK-LABEL: define internal void @outlined_ir_func_0(50; CHECK-NEXT:  newFuncRoot:51; CHECK-NEXT:    br label [[ENTRY_TO_OUTLINE:%.*]]52; CHECK:       entry_to_outline:53; CHECK-NEXT:    br label [[BLOCK_1:%.*]]54; CHECK:       block_1:55; CHECK-NEXT:    [[A:%.*]] = phi i32 [ 0, [[BLOCK_2:%.*]] ], [ 1, [[ENTRY_TO_OUTLINE]] ]56; CHECK-NEXT:    br i1 false, label [[BLOCK_3_SPLIT:%.*]], label [[BLOCK_2]]57; CHECK:       block_2:58; CHECK-NEXT:    br i1 false, label [[BLOCK_3_SPLIT]], label [[BLOCK_1]]59; CHECK:       block_3.split:60; CHECK-NEXT:    [[B_CE:%.*]] = phi i32 [ 0, [[BLOCK_2]] ], [ 1, [[BLOCK_1]] ]61; CHECK-NEXT:    br label [[BLOCK_3_EXITSTUB:%.*]]62; CHECK:       block_3.exitStub:63; CHECK-NEXT:    switch i32 [[TMP1:%.*]], label [[FINAL_BLOCK_0:%.*]] [64; CHECK-NEXT:    i32 0, label [[OUTPUT_BLOCK_0_0:%.*]]65; CHECK-NEXT:    ]66; CHECK:       output_block_0_0:67; CHECK-NEXT:    store i32 [[B_CE]], ptr [[TMP0:%.*]], align 468; CHECK-NEXT:    br label [[FINAL_BLOCK_0]]69; CHECK:       final_block_0:70; CHECK-NEXT:    ret void71;72