| # RUN: llc -mtriple=x86_64-- -run-pass branch-folder -O3 -o - %s | FileCheck %s |
| |
| --- |
| name: test1a |
| body: | |
| ; CHECK-LABEL: name: test1a |
| ; CHECK: bb.0: |
| ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| ; CHECK: JCC_1 %bb.2, 5, implicit $eflags |
| ; CHECK: bb.1: |
| ; CHECK: successors: %bb.2(0x80000000) |
| ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| ; CHECK-NOT: RET |
| ; CHECK: bb.2: |
| ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: RET 0 |
| bb.0: |
| TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| JCC_1 %bb.2, 5, implicit killed $eflags |
| |
| bb.1: |
| MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| |
| bb.2: |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| ... |
| |
| --- |
| name: test1b |
| body: | |
| |
| ; Verify that we get the same rewrites as in test1a when adding some |
| ; DBG_VALUE instructions in the mix. |
| ; |
| ; CHECK-LABEL: name: test1b |
| ; CHECK: bb.0: |
| ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| ; CHECK: JCC_1 %bb.2, 5, implicit $eflags |
| ; CHECK: bb.1: |
| ; CHECK: successors: %bb.2(0x80000000) |
| ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| ; CHECK-NOT: RET |
| ; CHECK: bb.2: |
| ; CHECK: DBG_VALUE |
| ; CHECK: DBG_VALUE |
| ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: RET 0 |
| bb.0: |
| TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| JCC_1 %bb.2, 5, implicit killed $eflags |
| |
| bb.1: |
| MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| |
| bb.2: |
| DBG_VALUE |
| DBG_VALUE |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| ... |
| |
| --- |
| name: test2a |
| body: | |
| ; CFI instruction currently prevents the rewrite here (although technically |
| ; I suppose that branch folding could let bb.1 fallthrough into bb.2 here). |
| ; |
| ; CHECK-LABEL: name: test2a |
| ; CHECK: bb.0: |
| ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| ; CHECK: JCC_1 %bb.2, 5, implicit killed $eflags |
| ; CHECK: bb.1: |
| ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: RET 0 |
| ; CHECK: bb.2: |
| ; CHECK: CFI_INSTRUCTION def_cfa_offset 8 |
| ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: RET 0 |
| bb.0: |
| TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| JCC_1 %bb.2, 5, implicit killed $eflags |
| |
| bb.1: |
| MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| |
| bb.2: |
| CFI_INSTRUCTION def_cfa_offset 8 |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| ... |
| |
| --- |
| name: test2b |
| body: | |
| ; Verify that we get the same rewrites as in test1a when adding some |
| ; DBG_VALUE instructions in the mix. |
| ; |
| ; CHECK-LABEL: name: test2b |
| ; CHECK: bb.0: |
| ; CHECK: TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| ; CHECK: JCC_1 %bb.2, 5, implicit killed $eflags |
| ; CHECK: bb.1: |
| ; CHECK: MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: RET 0 |
| ; CHECK: bb.2: |
| ; CHECK: DBG_VALUE |
| ; CHECK: CFI_INSTRUCTION def_cfa_offset 8 |
| ; CHECK: DBG_VALUE |
| ; CHECK: MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| ; CHECK: RET 0 |
| bb.0: |
| TEST8rr killed renamable $al, renamable $al, implicit-def $eflags |
| JCC_1 %bb.2, 5, implicit killed $eflags |
| |
| bb.1: |
| MOV8mi $r12, 1, $noreg, 0, $noreg, 0 |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| |
| bb.2: |
| DBG_VALUE |
| CFI_INSTRUCTION def_cfa_offset 8 |
| DBG_VALUE |
| MOV8mi $r13, 1, $noreg, 0, $noreg, 0 |
| RET 0 |
| ... |