xref: /llvm-project/llvm/test/CodeGen/SystemZ/branch-10.ll (revision 93183ee78c5850cc475f537ca14dd0a83c009bbf)
1*93183ee7SRichard Sandiford; Test all condition-code masks that are relevant for CLGRJ.
2*93183ee7SRichard Sandiford;
3*93183ee7SRichard Sandiford; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4*93183ee7SRichard Sandiford
5*93183ee7SRichard Sandiforddeclare i64 @foo()
6*93183ee7SRichard Sandiford@g1 = global i16 0
7*93183ee7SRichard Sandiford
8*93183ee7SRichard Sandiforddefine void @f1(i64 %target) {
9*93183ee7SRichard Sandiford; CHECK-LABEL: f1:
10*93183ee7SRichard Sandiford; CHECK: .cfi_def_cfa_offset
11*93183ee7SRichard Sandiford; CHECK: .L[[LABEL:.*]]:
12*93183ee7SRichard Sandiford; CHECK: clgrjle %r2, {{%r[0-9]+}}, .L[[LABEL]]
13*93183ee7SRichard Sandiford  br label %loop
14*93183ee7SRichard Sandifordloop:
15*93183ee7SRichard Sandiford  %val = call i64 @foo()
16*93183ee7SRichard Sandiford  %cond = icmp ule i64 %val, %target
17*93183ee7SRichard Sandiford  br i1 %cond, label %loop, label %exit
18*93183ee7SRichard Sandifordexit:
19*93183ee7SRichard Sandiford  ret void
20*93183ee7SRichard Sandiford}
21*93183ee7SRichard Sandiford
22*93183ee7SRichard Sandiforddefine void @f2(i64 %target) {
23*93183ee7SRichard Sandiford; CHECK-LABEL: f2:
24*93183ee7SRichard Sandiford; CHECK: .cfi_def_cfa_offset
25*93183ee7SRichard Sandiford; CHECK: .L[[LABEL:.*]]:
26*93183ee7SRichard Sandiford; CHECK: clgrjl %r2, {{%r[0-9]+}}, .L[[LABEL]]
27*93183ee7SRichard Sandiford  br label %loop
28*93183ee7SRichard Sandifordloop:
29*93183ee7SRichard Sandiford  %val = call i64 @foo()
30*93183ee7SRichard Sandiford  %cond = icmp ult i64 %val, %target
31*93183ee7SRichard Sandiford  br i1 %cond, label %loop, label %exit
32*93183ee7SRichard Sandifordexit:
33*93183ee7SRichard Sandiford  ret void
34*93183ee7SRichard Sandiford}
35*93183ee7SRichard Sandiford
36*93183ee7SRichard Sandiforddefine void @f3(i64 %target) {
37*93183ee7SRichard Sandiford; CHECK-LABEL: f3:
38*93183ee7SRichard Sandiford; CHECK: .cfi_def_cfa_offset
39*93183ee7SRichard Sandiford; CHECK: .L[[LABEL:.*]]:
40*93183ee7SRichard Sandiford; CHECK: clgrjh %r2, {{%r[0-9]+}}, .L[[LABEL]]
41*93183ee7SRichard Sandiford  br label %loop
42*93183ee7SRichard Sandifordloop:
43*93183ee7SRichard Sandiford  %val = call i64 @foo()
44*93183ee7SRichard Sandiford  %cond = icmp ugt i64 %val, %target
45*93183ee7SRichard Sandiford  br i1 %cond, label %loop, label %exit
46*93183ee7SRichard Sandifordexit:
47*93183ee7SRichard Sandiford  ret void
48*93183ee7SRichard Sandiford}
49*93183ee7SRichard Sandiford
50*93183ee7SRichard Sandiforddefine void @f4(i64 %target) {
51*93183ee7SRichard Sandiford; CHECK-LABEL: f4:
52*93183ee7SRichard Sandiford; CHECK: .cfi_def_cfa_offset
53*93183ee7SRichard Sandiford; CHECK: .L[[LABEL:.*]]:
54*93183ee7SRichard Sandiford; CHECK: clgrjhe %r2, {{%r[0-9]+}}, .L[[LABEL]]
55*93183ee7SRichard Sandiford  br label %loop
56*93183ee7SRichard Sandifordloop:
57*93183ee7SRichard Sandiford  %val = call i64 @foo()
58*93183ee7SRichard Sandiford  %cond = icmp uge i64 %val, %target
59*93183ee7SRichard Sandiford  br i1 %cond, label %loop, label %exit
60*93183ee7SRichard Sandifordexit:
61*93183ee7SRichard Sandiford  ret void
62*93183ee7SRichard Sandiford}
63