| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc %s -o - -mtriple=powerpc-unknown-unknown -run-pass=machine-cse -verify-machineinstrs | FileCheck %s |
| # RUN: llc %s -o - -mtriple=powerpc-unknown-unknown -passes=machine-cse | FileCheck %s |
| --- | |
| define void @can_pre() { |
| entry: |
| br label %for.body |
| |
| for.body: |
| br i1 undef, label %if.then, label %if.else |
| |
| if.then: |
| br label %if.end |
| |
| if.else: |
| br label %if.end |
| |
| if.end: |
| br label %for.body |
| } |
| |
| define void @cannot_pre() { |
| entry: |
| br label %for.body |
| |
| for.body: |
| br i1 undef, label %if.then, label %if.else |
| |
| if.then: |
| br label %if.end |
| |
| if.else: |
| br label %if.end |
| |
| if.end: |
| br label %for.body |
| } |
| ... |
| --- |
| name: can_pre |
| registers: |
| - { id: 0, class: f8rc, preferred-register: '' } |
| - { id: 1, class: f8rc, preferred-register: '' } |
| - { id: 2, class: gprc, preferred-register: '' } |
| - { id: 3, class: gprc, preferred-register: '' } |
| - { id: 4, class: f8rc, preferred-register: '' } |
| - { id: 5, class: f8rc, preferred-register: '' } |
| liveins: |
| - { reg: '$r1', virtual-reg: '%2' } |
| - { reg: '$r2', virtual-reg: '%3' } |
| - { reg: '$f1', virtual-reg: '%4' } |
| - { reg: '$f2', virtual-reg: '%5' } |
| body: | |
| ; CHECK-LABEL: name: can_pre |
| ; CHECK: bb.0.for.body: |
| ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; CHECK-NEXT: liveins: $r1, $r2, $f1, $f2 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:f8rc = COPY $f2 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:f8rc = COPY $f1 |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gprc = COPY $r2 |
| ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gprc = COPY $r1 |
| ; CHECK-NEXT: $cr0 = CMPLWI [[COPY3]], 0 |
| ; CHECK-NEXT: %6:f8rc = nofpexcept FDIV [[COPY1]], [[COPY]], implicit $rm |
| ; CHECK-NEXT: BCC 44, $cr0, %bb.1 |
| ; CHECK-NEXT: B %bb.2 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1.if.then: |
| ; CHECK-NEXT: successors: %bb.3(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: B %bb.3 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2.if.else: |
| ; CHECK-NEXT: successors: %bb.3(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.3.if.end: |
| ; CHECK-NEXT: BLR implicit $lr, implicit $rm |
| bb.0.for.body: |
| successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| liveins: $r1, $r2, $f1, $f2 |
| |
| %5:f8rc = COPY $f2 |
| %4:f8rc = COPY $f1 |
| %3:gprc = COPY $r2 |
| %2:gprc = COPY $r1 |
| $cr0 = CMPLWI %2, 0 |
| BCC 44, $cr0, %bb.1 |
| B %bb.2 |
| |
| bb.1.if.then: |
| successors: %bb.3(0x80000000) |
| |
| %0:f8rc = nofpexcept FDIV %4, %5, implicit $rm |
| B %bb.3 |
| |
| bb.2.if.else: |
| successors: %bb.3(0x80000000) |
| |
| %1:f8rc = nofpexcept FDIV %4, %5, implicit $rm |
| |
| bb.3.if.end: |
| BLR implicit $lr, implicit $rm |
| ... |
| --- |
| name: cannot_pre |
| registers: |
| - { id: 0, class: f8rc, preferred-register: '' } |
| - { id: 1, class: f8rc, preferred-register: '' } |
| - { id: 2, class: gprc, preferred-register: '' } |
| - { id: 3, class: gprc, preferred-register: '' } |
| - { id: 4, class: f8rc, preferred-register: '' } |
| - { id: 5, class: f8rc, preferred-register: '' } |
| - { id: 6, class: f8rc, preferred-register: '' } |
| liveins: |
| - { reg: '$r1', virtual-reg: '%2' } |
| - { reg: '$r2', virtual-reg: '%3' } |
| - { reg: '$f1', virtual-reg: '%4' } |
| - { reg: '$f2', virtual-reg: '%5' } |
| body: | |
| ; CHECK-LABEL: name: cannot_pre |
| ; CHECK: bb.0.for.body: |
| ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; CHECK-NEXT: liveins: $r1, $r2, $f1, $f2 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:f8rc = COPY $f2 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:f8rc = COPY $f1 |
| ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gprc = COPY $r2 |
| ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gprc = COPY $r1 |
| ; CHECK-NEXT: $cr0 = CMPLWI [[COPY3]], 0 |
| ; CHECK-NEXT: BCC 44, $cr0, %bb.1 |
| ; CHECK-NEXT: B %bb.2 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1.if.then: |
| ; CHECK-NEXT: successors: %bb.3(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[SETRND:%[0-9]+]]:f8rc = SETRND [[COPY2]], implicit-def $rm, implicit $rm |
| ; CHECK-NEXT: %0:f8rc = nofpexcept FDIV [[COPY1]], [[COPY]], implicit $rm |
| ; CHECK-NEXT: B %bb.3 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2.if.else: |
| ; CHECK-NEXT: successors: %bb.3(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %1:f8rc = nofpexcept FDIV [[COPY1]], [[COPY]], implicit $rm |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.3.if.end: |
| ; CHECK-NEXT: BLR implicit $lr, implicit $rm |
| bb.0.for.body: |
| successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| liveins: $r1, $r2, $f1, $f2 |
| |
| %5:f8rc = COPY $f2 |
| %4:f8rc = COPY $f1 |
| %3:gprc = COPY $r2 |
| %2:gprc = COPY $r1 |
| $cr0 = CMPLWI %2, 0 |
| BCC 44, $cr0, %bb.1 |
| B %bb.2 |
| |
| bb.1.if.then: |
| successors: %bb.3(0x80000000) |
| |
| %6:f8rc = SETRND %3, implicit-def $rm, implicit $rm |
| %0:f8rc = nofpexcept FDIV %4, %5, implicit $rm |
| B %bb.3 |
| |
| bb.2.if.else: |
| successors: %bb.3(0x80000000) |
| |
| %1:f8rc = nofpexcept FDIV %4, %5, implicit $rm |
| |
| bb.3.if.end: |
| BLR implicit $lr, implicit $rm |
| ... |