| # RUN: llc -mtriple=x86_64-- -o - %s -run-pass=none -verify-machineinstrs -simplify-mir | FileCheck %s |
| --- |
| # We shouldn't need any explicit successor lists in these examples |
| # CHECK-LABEL: name: func0 |
| # CHECK: bb.0: |
| # CHECK-NOT: successors |
| # CHECK: JE_1 %bb.1, implicit undef $eflags |
| # CHECK: JMP_1 %bb.3 |
| # CHECK: bb.1: |
| # CHECK-NOT: successors |
| # CHECK: bb.2: |
| # CHECK-NOT: successors |
| # CHECK: JE_1 %bb.1, implicit undef $eflags |
| # CHECK: bb.3: |
| # CHECK: RETQ undef $eax |
| name: func0 |
| body: | |
| bb.0: |
| JE_1 %bb.1, implicit undef $eflags |
| JMP_1 %bb.3 |
| |
| bb.1: |
| |
| bb.2: |
| JE_1 %bb.1, implicit undef $eflags |
| |
| bb.3: |
| JE_1 %bb.4, implicit undef $eflags ; condjump+fallthrough to same block |
| |
| bb.4: |
| RETQ undef $eax |
| ... |
| --- |
| # Some cases that need explicit successors: |
| # CHECK-LABEL: name: func1 |
| name: func1 |
| body: | |
| bb.0: |
| ; CHECK: bb.0: |
| ; CHECK: successors: %bb.3, %bb.1 |
| successors: %bb.3, %bb.1 ; different order than operands |
| JE_1 %bb.1, implicit undef $eflags |
| JMP_1 %bb.3 |
| |
| bb.1: |
| ; CHECK: bb.1: |
| ; CHECK: successors: %bb.2, %bb.1 |
| successors: %bb.2, %bb.1 ; different order (fallthrough variant) |
| JE_1 %bb.1, implicit undef $eflags |
| |
| bb.2: |
| ; CHECK: bb.2: |
| ; CHECK: successors: %bb.1(0x60000000), %bb.3(0x20000000) |
| successors: %bb.1(3), %bb.3(1) ; branch probabilities not normalized |
| JE_1 %bb.1, implicit undef $eflags |
| |
| bb.3: |
| ; CHECK: bb.3: |
| ; CHECK: RETQ undef $eax |
| RETQ undef $eax |
| ... |