blob: c4dc4673dc9516df1052d701d8e49a0a3dd963e0 [file] [log] [blame]
Richard Sandiford8a757bb2013-07-31 12:11:07 +00001; Test SystemZInstrInfo::AnalyzeBranch and SystemZInstrInfo::InsertBranch.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5declare void @foo() noreturn
6
7; Check a case where a separate branch is needed and where the original
8; order should be reversed.
9define i32 @f1(i32 %a, i32 %b) {
10; CHECK-LABEL: f1:
11; CHECK: clr %r2, %r3
Richard Sandiford3d768e32013-07-31 12:30:20 +000012; CHECK: jl .L[[LABEL:.*]]
Richard Sandiford8a757bb2013-07-31 12:11:07 +000013; CHECK: br %r14
14; CHECK: .L[[LABEL]]:
15; CHECK: brasl %r14, foo@PLT
16entry:
17 %cmp = icmp ult i32 %a, %b
18 br i1 %cmp, label %callit, label %return
19
20callit:
21 call void @foo()
22 unreachable
23
24return:
25 ret i32 1
26}
27
28; Same again with a fused compare and branch.
29define i32 @f2(i32 %a) {
30; CHECK-LABEL: f2:
Richard Sandiford3d768e32013-07-31 12:30:20 +000031; CHECK: cije %r2, 0, .L[[LABEL:.*]]
Richard Sandiford8a757bb2013-07-31 12:11:07 +000032; CHECK: br %r14
33; CHECK: .L[[LABEL]]:
34; CHECK: brasl %r14, foo@PLT
35entry:
36 %cmp = icmp eq i32 %a, 0
37 br i1 %cmp, label %callit, label %return
38
39callit:
40 call void @foo()
41 unreachable
42
43return:
44 ret i32 1
45}