# 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
...