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