1# RUN: llc -march=hexagon -run-pass branch-folder %s -o - -verify-machineinstrs | FileCheck %s 2 3# Branch folding will perform tail merging of bb.1 and bb.2, and bb.2 will 4# become the common tail. The use of R0 in bb.2 is <undef> while the 5# corresponding use in bb.1 is not. The common tail will have the <undef> 6# flag removed, which will cause R0 to become a live-in to bb.2. The problem 7# is that R0 is not live-out from all predecessors of bb.2, namely is not 8# live-out from bb.0. To remedy that, the branch folder should add an 9# IMPLICIT_DEF to that block. 10 11# CHECK-LABEL: name: func0 12# CHECK-LABEL: bb.0: 13# CHECK: $r0 = IMPLICIT_DEF 14# CHECK-LABEL: bb.1: 15# CHECK-LABEL: bb.2: 16# CHECK: liveins: $r0 17# CHECK: PS_storerhabs 0, $r0 18# CHECK: PS_jmpret 19 20--- 21name: func0 22tracksRegLiveness: true 23 24body: | 25 bb.0: 26 liveins: $r31 27 successors: %bb.1, %bb.2 28 J2_jumpt undef $p0, %bb.2, implicit-def $pc 29 J2_jump %bb.1, implicit-def $pc 30 31 bb.1: 32 liveins: $r31 33 successors: %bb.3 34 $r0 = L2_loadruh_io undef $r1, 0 35 PS_storerhabs 0, killed $r0 36 J2_jump %bb.3, implicit-def $pc 37 38 bb.2: 39 liveins: $r31 40 successors: %bb.3 41 PS_storerhabs 0, undef $r0 42 J2_jump %bb.3, implicit-def $pc 43 44 bb.3: 45 liveins: $r31 46 PS_jmpret killed $r31, implicit-def $pc 47... 48--- 49# CHECK-LABEL: name: func1 50# CHECK-LABEL: bb.1: 51# CHECK: $r0 = IMPLICIT_DEF 52# CHECK-LABEL: bb.2: 53# CHECK-LABEL: bb.3: 54# CHECK: liveins: $r0 55# CHECK: PS_storerhabs 0, killed $r0 56# CHECK: PS_jmpret 57 58name: func1 59tracksRegLiveness: true 60 61body: | 62 bb.0: 63 liveins: $r31 64 successors: %bb.1, %bb.2 65 J2_jumpt undef $p0, %bb.2, implicit-def $pc 66 J2_jump %bb.1, implicit-def $pc 67 68 bb.1: 69 liveins: $r31 70 successors: %bb.3 71 $r1 = A2_tfrsi 1 72 PS_storerhabs 0, undef $r0 73 $r0 = A2_tfrsi 1 74 J2_jump %bb.3, implicit-def $pc 75 76 bb.2: 77 liveins: $r31 78 successors: %bb.3 79 $r0 = L2_loadruh_io undef $r1, 0 80 PS_storerhabs 0, killed $r0 81 $r0 = A2_tfrsi 1 82 J2_jump %bb.3, implicit-def $pc 83 84 bb.3: 85 liveins: $r31 86 PS_jmpret killed $r31, implicit undef $r0, implicit-def $pc 87... 88