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