# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z16 -start-before=peephole-opt \
# RUN: -stop-after=peephole-opt %s -o - | FileCheck %s
--- |
define double @f1(ptr %x, i32 %a, i32 %b, i32 %limit, ptr %dst) #0 {
%arrayidx1 = getelementptr inbounds double, ptr %x, i64 1
ret double 0.0
}
define double @f2(ptr %x, i32 %a, i32 %b, i32 %limit, ptr %dst) #0 {
%arrayidx1 = getelementptr inbounds double, ptr %x, i64 1
ret double 0.0
}
...
# Do not fold where CC is live.
# CHECK: name: f1
# CHECK: {{.*}} WFADB
---
name: f1
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: addr64bit }
- { id: 1, class: gr32bit }
- { id: 2, class: gr32bit }
- { id: 3, class: gr32bit }
- { id: 4, class: addr64bit }
- { id: 5, class: vr64bit }
- { id: 6, class: vr64bit }
- { id: 7, class: vr64bit }
- { id: 8, class: grx32bit }
liveins:
- { reg: '$r2d', virtual-reg: '%0' }
- { reg: '$r3l', virtual-reg: '%1' }
- { reg: '$r4l', virtual-reg: '%2' }
- { reg: '$r5l', virtual-reg: '%3' }
- { reg: '$r6d', virtual-reg: '%4' }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
liveins: $r2d, $r3l, $r4l, $r5l, $r6d
%4:addr64bit = COPY $r6d
%3:gr32bit = COPY $r5l
%2:gr32bit = COPY $r4l
%1:gr32bit = COPY $r3l
%0:addr64bit = COPY $r2d
CLFIMux %3, 42, implicit-def $cc
%5:vr64bit = VL64 %0, 0, $noreg :: (load (s64) from %ir.x)
%6:vr64bit = VL64 %0, 8, $noreg :: (load (s64) from %ir.arrayidx1)
%7:vr64bit = nsz arcp contract afn reassoc nofpexcept WFADB killed %6, killed %5, implicit $fpc
%8:grx32bit = SELRMux %2, %1, 14, 4, implicit $cc
STMux killed %8, %4, 0, $noreg :: (store (s32) into %ir.dst)
$f0d = COPY %7
Return implicit $f0d
...
# Do not fold where CC is live in.
# CHECK: name: f2
# CHECK: {{.*}} WFADB
---
name: f2
alignment: 16
tracksRegLiveness: true
registers:
- { id: 0, class: addr64bit }
- { id: 1, class: gr32bit }
- { id: 2, class: gr32bit }
- { id: 3, class: gr32bit }
- { id: 4, class: addr64bit }
- { id: 5, class: vr64bit }
- { id: 6, class: vr64bit }
- { id: 7, class: vr64bit }
- { id: 8, class: grx32bit }
liveins:
- { reg: '$r2d', virtual-reg: '%0' }
- { reg: '$r3l', virtual-reg: '%1' }
- { reg: '$r4l', virtual-reg: '%2' }
- { reg: '$r5l', virtual-reg: '%3' }
- { reg: '$r6d', virtual-reg: '%4' }
frameInfo:
maxAlignment: 1
machineFunctionInfo: {}
body: |
bb.0:
liveins: $r2d, $r3l, $r4l, $r5l, $r6d, $cc
%4:addr64bit = COPY $r6d
%3:gr32bit = COPY $r5l
%2:gr32bit = COPY $r4l
%1:gr32bit = COPY $r3l
%0:addr64bit = COPY $r2d
%5:vr64bit = VL64 %0, 0, $noreg :: (load (s64) from %ir.x)
%6:vr64bit = VL64 %0, 8, $noreg :: (load (s64) from %ir.arrayidx1)
%7:vr64bit = nsz arcp contract afn reassoc nofpexcept WFADB killed %6, killed %5, implicit $fpc
%8:grx32bit = SELRMux %2, %1, 14, 4, implicit $cc
STMux killed %8, %4, 0, $noreg :: (store (s32) into %ir.dst)
$f0d = COPY %7
Return implicit $f0d
...