blob: 4262b2bd8fbf46f5f0f085b1bb639c3ed51fa9a6 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z196 < %s | FileCheck %s
; Converting the AND to RISBMux must remove the dead def from the CC
; live range
define i16 @and_to_risbmux_issue229045(ptr %out, ptr %in, i8 %c) {
; CHECK-LABEL: and_to_risbmux_issue229045:
; CHECK: # %bb.0:
; CHECK-NEXT: tmll %r4, 255
; CHECK-NEXT: lghi %r0, 0
; CHECK-NEXT: lghi %r1, 82
; CHECK-NEXT: lghi %r4, 82
; CHECK-NEXT: locgre %r1, %r0
; CHECK-NEXT: sllg %r1, %r1, 1
; CHECK-NEXT: lb %r1, 1(%r1,%r3)
; CHECK-NEXT: locgre %r0, %r4
; CHECK-NEXT: agr %r3, %r0
; CHECK-NEXT: llc %r0, 1
; CHECK-NEXT: stc %r1, 0(%r2)
; CHECK-NEXT: mvc 0(1), 1(%r3)
; CHECK-NEXT: risblg %r1, %r0, 31, 159, 0
; CHECK-NEXT: stc %r0, 0(%r2)
; CHECK-NEXT: lhi %r2, 0
; CHECK-NEXT: stc %r1, 0
; CHECK-NEXT: br %r14
%cmp = icmp eq i8 %c, 0
%sel0 = select i1 %cmp, i16 0, i16 82
%ext0 = zext i16 %sel0 to i64
%gep0 = getelementptr [2 x i8], ptr %in, i64 %ext0
%ld0 = load i16, ptr %gep0, align 2
%trunc0 = trunc i16 %ld0 to i8
store i8 %trunc0, ptr %out, align 1
%sel1 = select i1 %cmp, i64 82, i64 0
%gep1 = getelementptr i8, ptr %in, i64 %sel1
%ld1 = load i16, ptr %gep1, align 2
%trunc1 = trunc i16 %ld1 to i8
store i8 %trunc1, ptr null, align 4
%ld2 = load i16, ptr null, align 2
%trunc2 = trunc i16 %ld2 to i8
%and = and i8 %trunc2, 1
store i8 %and, ptr null, align 1
store i8 %trunc2, ptr %out, align 2
ret i16 0
}