3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 -verify-machineinstrs | FileCheck %s
5 ; Run the test again to make sure it still works the same even
6 ; in the presence of the load-store-on-condition-2 facility.
7 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -verify-machineinstrs | FileCheck %s
9 ; And again in the presence of the select instructions.
10 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 -verify-machineinstrs | FileCheck %s
13 define i32 @f1(i32 %a, i32 %b, i32 %limit) {
16 ; CHECK: locrhe %r2, %r3
18 %cond = icmp ult i32 %limit, 42
19 %res = select i1 %cond, i32 %a, i32 %b
24 define i64 @f2(i64 %a, i64 %b, i64 %limit) {
26 ; CHECK: clgfi %r4, 42
27 ; CHECK: locgrhe %r2, %r3
29 %cond = icmp ult i64 %limit, 42
30 %res = select i1 %cond, i64 %a, i64 %b
34 ; Test LOCR in a case that could use COMPARE AND BRANCH. We prefer using
36 define i32 @f3(i32 %a, i32 %b, i32 %limit) {
39 ; CHECK: locrlh %r2, %r3
41 %cond = icmp eq i32 %limit, 42
42 %res = select i1 %cond, i32 %a, i32 %b
46 ; ...and again for LOCGR.
47 define i64 @f4(i64 %a, i64 %b, i64 %limit) {
50 ; CHECK: locgrlh %r2, %r3
52 %cond = icmp eq i64 %limit, 42
53 %res = select i1 %cond, i64 %a, i64 %b
57 ; Check that we also get LOCR as a result of early if-conversion.
58 define i32 @f5(i32 %a, i32 %b, i32 %limit) {
61 ; CHECK: locrh %r2, %r3
64 %cond = icmp ult i32 %limit, 42
65 br i1 %cond, label %if.then, label %return
71 %res = phi i32 [ %a, %if.then ], [ %b, %entry ]
75 ; ... and likewise for LOCGR.
76 define i64 @f6(i64 %a, i64 %b, i64 %limit) {
78 ; CHECK: clgfi %r4, 41
79 ; CHECK: locgrh %r2, %r3
82 %cond = icmp ult i64 %limit, 42
83 br i1 %cond, label %if.then, label %return
89 %res = phi i64 [ %a, %if.then ], [ %b, %entry ]
93 ; Check that inverting the condition works as well.
94 define i32 @f7(i32 %a, i32 %b, i32 %limit) {
97 ; CHECK: locrle %r2, %r3
100 %cond = icmp ult i32 %limit, 42
101 br i1 %cond, label %if.then, label %return
107 %res = phi i32 [ %b, %if.then ], [ %a, %entry ]
111 ; ... and likewise for LOCGR.
112 define i64 @f8(i64 %a, i64 %b, i64 %limit) {
114 ; CHECK: clgfi %r4, 41
115 ; CHECK: locgrle %r2, %r3
118 %cond = icmp ult i64 %limit, 42
119 br i1 %cond, label %if.then, label %return
125 %res = phi i64 [ %b, %if.then ], [ %a, %entry ]