1# RUN: llc -mtriple=x86_64-- -run-pass branch-folder -O3 -o - %s | FileCheck %s 2 3--- 4name: test1a 5body: | 6 ; CHECK-LABEL: name: test1a 7 ; CHECK: bb.0: 8 ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 9 ; CHECK: JCC_1 %bb.2, 5, implicit $eflags 10 ; CHECK: bb.1: 11 ; CHECK: successors: %bb.2(0x80000000) 12 ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 13 ; CHECK-NOT: RET 14 ; CHECK: bb.2: 15 ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 16 ; CHECK: RET 0 17 bb.0: 18 TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 19 JCC_1 %bb.2, 5, implicit killed $eflags 20 21 bb.1: 22 MOV8mi $r12, 1, $noreg, 0, $noreg, 0 23 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 24 RET 0 25 26 bb.2: 27 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 28 RET 0 29... 30 31--- 32name: test1b 33body: | 34 35 ; Verify that we get the same rewrites as in test1a when adding some 36 ; DBG_VALUE instructions in the mix. 37 ; 38 ; CHECK-LABEL: name: test1b 39 ; CHECK: bb.0: 40 ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 41 ; CHECK: JCC_1 %bb.2, 5, implicit $eflags 42 ; CHECK: bb.1: 43 ; CHECK: successors: %bb.2(0x80000000) 44 ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 45 ; CHECK-NOT: RET 46 ; CHECK: bb.2: 47 ; CHECK: DBG_VALUE 48 ; CHECK: DBG_VALUE 49 ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 50 ; CHECK: RET 0 51 bb.0: 52 TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 53 JCC_1 %bb.2, 5, implicit killed $eflags 54 55 bb.1: 56 MOV8mi $r12, 1, $noreg, 0, $noreg, 0 57 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 58 RET 0 59 60 bb.2: 61 DBG_VALUE 62 DBG_VALUE 63 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 64 RET 0 65... 66 67--- 68name: test2a 69body: | 70 ; CFI instruction currently prevents the rewrite here (although technically 71 ; I suppose that branch folding could let bb.1 fallthrough into bb.2 here). 72 ; 73 ; CHECK-LABEL: name: test2a 74 ; CHECK: bb.0: 75 ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 76 ; CHECK: JCC_1 %bb.2, 5, implicit killed $eflags 77 ; CHECK: bb.1: 78 ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 79 ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 80 ; CHECK: RET 0 81 ; CHECK: bb.2: 82 ; CHECK: CFI_INSTRUCTION def_cfa_offset 8 83 ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 84 ; CHECK: RET 0 85 bb.0: 86 TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 87 JCC_1 %bb.2, 5, implicit killed $eflags 88 89 bb.1: 90 MOV8mi $r12, 1, $noreg, 0, $noreg, 0 91 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 92 RET 0 93 94 bb.2: 95 CFI_INSTRUCTION def_cfa_offset 8 96 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 97 RET 0 98... 99 100--- 101name: test2b 102body: | 103 ; Verify that we get the same rewrites as in test1a when adding some 104 ; DBG_VALUE instructions in the mix. 105 ; 106 ; CHECK-LABEL: name: test2b 107 ; CHECK: bb.0: 108 ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 109 ; CHECK: JCC_1 %bb.2, 5, implicit killed $eflags 110 ; CHECK: bb.1: 111 ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 112 ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 113 ; CHECK: RET 0 114 ; CHECK: bb.2: 115 ; CHECK: DBG_VALUE 116 ; CHECK: CFI_INSTRUCTION def_cfa_offset 8 117 ; CHECK: DBG_VALUE 118 ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 119 ; CHECK: RET 0 120 bb.0: 121 TEST8rr killed renamable $al, renamable $al, implicit-def $eflags 122 JCC_1 %bb.2, 5, implicit killed $eflags 123 124 bb.1: 125 MOV8mi $r12, 1, $noreg, 0, $noreg, 0 126 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 127 RET 0 128 129 bb.2: 130 DBG_VALUE 131 CFI_INSTRUCTION def_cfa_offset 8 132 DBG_VALUE 133 MOV8mi $r13, 1, $noreg, 0, $noreg, 0 134 RET 0 135... 136