xref: /llvm-project/llvm/test/CodeGen/SystemZ/int-cmp-62.ll (revision f8803919ad5c7e135af962efcbbe8c7c5310bbf4)
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 | FileCheck %s
2;
3; Test that a CC result of a sub that can overflow is tested with the right predicate.
4
5define i32 @fun0(i32 %a, i32 %b, ptr %dest) {
6; CHECK-LABEL: fun0
7; CHECK: s %r2, 0(%r4)
8; CHECK: bner %r14
9entry:
10  %cur = load i32, ptr %dest
11  %res = sub nsw i32 %a, %cur
12  %cmp = icmp ne i32 %a, %cur
13  br i1 %cmp, label %exit, label %store
14
15store:
16  store i32 %b, ptr %dest
17  br label %exit
18
19exit:
20  ret i32 %res
21}
22
23define i32 @fun1(i32 %a, i32 %b, ptr %dest) {
24; CHECK-LABEL: fun1
25; CHECK: s %r2, 0(%r4)
26; CHECK: bner %r14
27entry:
28  %cur = load i32, ptr %dest
29  %res = sub nuw i32 %a, %cur
30  %cmp = icmp ne i32 %a, %cur
31  br i1 %cmp, label %exit, label %store
32
33store:
34  store i32 %b, ptr %dest
35  br label %exit
36
37exit:
38  ret i32 %res
39}
40