| ; 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) |