blob: c639a4a1ba961bb6137f7c3084ef461d9f1d1c8d [file] [edit]
; Check that custom inserters and frame lowering mark the CC defs of
; instructions whose condition code is never read as dead.
; RUN: llc -mtriple=s390x-linux-gnu -stop-after=finalize-isel -o - %s | FileCheck %s
; RUN: llc -mtriple=s390x-linux-gnu -stop-after=prolog-epilog -o - %s | FileCheck -check-prefix=PEI %s
; CHECK-LABEL: name: atomicrmw_and_i8
; CHECK: NR {{.*}}, implicit-def dead $cc
define i8 @atomicrmw_and_i8(ptr %src, i8 %b) {
%res = atomicrmw and ptr %src, i8 %b seq_cst
ret i8 %res
}
; CHECK-LABEL: name: atomicrmw_nand_i8
; CHECK: NR {{.*}}, implicit-def dead $cc
; CHECK: XILF {{.*}}, implicit-def dead $cc
define i8 @atomicrmw_nand_i8(ptr %src, i8 %b) {
%res = atomicrmw nand ptr %src, i8 %b seq_cst
ret i8 %res
}
; CHECK-LABEL: name: atomicrmw_xchg_i8
; CHECK: RISBG32 {{.*}}, implicit-def dead $cc
define i8 @atomicrmw_xchg_i8(ptr %src, i8 %b) {
%res = atomicrmw xchg ptr %src, i8 %b seq_cst
ret i8 %res
}
; CHECK-LABEL: name: atomicrmw_max_i8
; CHECK: RISBG32 {{.*}}, implicit-def dead $cc
define i8 @atomicrmw_max_i8(ptr %src, i8 %b) {
%res = atomicrmw max ptr %src, i8 %b seq_cst
ret i8 %res
}
; CHECK-LABEL: name: cmpxchg_i8
; CHECK: RISBG32 {{.*}}, implicit-def dead $cc
define i8 @cmpxchg_i8(ptr %src, i8 %cmp, i8 %swap) {
%pair = cmpxchg ptr %src, i8 %cmp, i8 %swap seq_cst seq_cst
%res = extractvalue { i8, i1 } %pair, 0
ret i8 %res
}
; CHECK-LABEL: name: memcpy_variable
; CHECK: AGHI {{.*}}, -1, implicit-def dead $cc
; CHECK: CGHI {{.*}}, 0, implicit-def $cc
define void @memcpy_variable(ptr %dest, ptr %src, i64 %len) {
call void @llvm.memcpy.p0.p0.i64(ptr %dest, ptr %src, i64 %len, i1 false)
ret void
}
; CHECK-LABEL: name: probed_dynamic_alloca
; CHECK: CLGFI {{.*}}, 4096, implicit-def $cc
; CHECK: SLGFI {{.*}}, 4096, implicit-def dead $cc
; CHECK: $r15d = SLGFI $r15d, 4096, implicit-def dead $cc
; CHECK: CG $r15d, $r15d, 4088, $noreg, implicit-def dead $cc
; CHECK: CGHI {{.*}}, 0, implicit-def $cc
; CHECK: $r15d = SLGR $r15d, {{.*}}, implicit-def dead $cc
; CHECK: CG $r15d, $r15d, -8, {{.*}}, implicit-def dead $cc
define ptr @probed_dynamic_alloca(i64 %len) "probe-stack"="inline-asm" {
%p = alloca i8, i64 %len
ret ptr %p
}
; PEI-LABEL: name: probed_static_alloca
; PEI: $r15d = AGHI $r15d, -4096, implicit-def dead $cc
; PEI: CG undef $r0d, $r15d, 4088, $noreg, implicit-def dead $cc
define void @probed_static_alloca() "probe-stack"="inline-asm" {
%p = alloca [4000 x i8]
call void @use(ptr %p)
ret void
}
declare void @use(ptr)
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)