[lldb] Make sure Blocks always have a parent (#117683)
[llvm-project.git] / llvm / test / CodeGen / SystemZ / cond-move-02.ll
blob362d7cc3865b6d1aa629b334c65e77687f43d13b
1 ; Test LOCHI and LOCGHI.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -verify-machineinstrs | FileCheck %s
5 ; Run the test again to make sure it still works the same even
6 ; in the presence of the select instructions.
7 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 -verify-machineinstrs | FileCheck %s
10 define i32 @f1(i32 %x) {
11 ; CHECK-LABEL: f1:
12 ; CHECK: chi %r2, 0
13 ; CHECK: lhi %r2, 0
14 ; CHECK: lochilh %r2, 42
15 ; CHECK: br %r14
16   %cond = icmp ne i32 %x, 0
17   %res = select i1 %cond, i32 42, i32 0
18   ret i32 %res
21 define i32 @f2(i32 %x, i32 %y) {
22 ; CHECK-LABEL: f2:
23 ; CHECK: chi %r2, 0
24 ; CHECK: lochilh %r3, 42
25 ; CHECK: br %r14
26   %cond = icmp ne i32 %x, 0
27   %res = select i1 %cond, i32 42, i32 %y
28   ret i32 %res
31 define i32 @f3(i32 %x, i32 %y) {
32 ; CHECK-LABEL: f3:
33 ; CHECK: chi %r2, 0
34 ; CHECK: lochie %r3, 42
35 ; CHECK: br %r14
36   %cond = icmp ne i32 %x, 0
37   %res = select i1 %cond, i32 %y, i32 42
38   ret i32 %res
41 define i64 @f4(i64 %x) {
42 ; CHECK-LABEL: f4:
43 ; CHECK: cghi %r2, 0
44 ; CHECK: lghi %r2, 0
45 ; CHECK: locghilh %r2, 42
46 ; CHECK: br %r14
47   %cond = icmp ne i64 %x, 0
48   %res = select i1 %cond, i64 42, i64 0
49   ret i64 %res
52 define i64 @f5(i64 %x, i64 %y) {
53 ; CHECK-LABEL: f5:
54 ; CHECK: cghi %r2, 0
55 ; CHECK: locghilh %r3, 42
56 ; CHECK: br %r14
57   %cond = icmp ne i64 %x, 0
58   %res = select i1 %cond, i64 42, i64 %y
59   ret i64 %res
62 define i64 @f6(i64 %x, i64 %y) {
63 ; CHECK-LABEL: f6:
64 ; CHECK: cghi %r2, 0
65 ; CHECK: locghie %r3, 42
66 ; CHECK: br %r14
67   %cond = icmp ne i64 %x, 0
68   %res = select i1 %cond, i64 %y, i64 42
69   ret i64 %res
72 ; Check that we also get LOCHI as a result of early if-conversion.
73 define i32 @f7(i32 %x, i32 %y) {
74 ; CHECK-LABEL: f7:
75 ; CHECK: chi %r2, 0
76 ; CHECK: lochie %r3, 42
77 ; CHECK: br %r14
78 entry:
79   %cond = icmp ne i32 %x, 0
80   br i1 %cond, label %if.then, label %return
82 if.then:
83   br label %return
85 return:
86   %res = phi i32 [ %y, %if.then ], [ 42, %entry ]
87   ret i32 %res
90 ; ... and the same for LOCGHI.
91 define i64 @f8(i64 %x, i64 %y) {
92 ; CHECK-LABEL: f8:
93 ; CHECK: cghi %r2, 0
94 ; CHECK: locghie %r3, 42
95 ; CHECK: br %r14
96 entry:
97   %cond = icmp ne i64 %x, 0
98   br i1 %cond, label %if.then, label %return
100 if.then:
101   br label %return
103 return:
104   %res = phi i64 [ %y, %if.then ], [ 42, %entry ]
105   ret i64 %res
108 ; Check that inverting the condition works as well.
109 define i32 @f9(i32 %x, i32 %y) {
110 ; CHECK-LABEL: f9:
111 ; CHECK: chi %r2, 0
112 ; CHECK: lochilh %r3, 42
113 ; CHECK: br %r14
114 entry:
115   %cond = icmp ne i32 %x, 0
116   br i1 %cond, label %if.then, label %return
118 if.then:
119   br label %return
121 return:
122   %res = phi i32 [ 42, %if.then ], [ %y, %entry ]
123   ret i32 %res
126 ; ... and the same for LOCGHI.
127 define i64 @f10(i64 %x, i64 %y) {
128 ; CHECK-LABEL: f10:
129 ; CHECK: cghi %r2, 0
130 ; CHECK: locghilh %r3, 42
131 ; CHECK: br %r14
132 entry:
133   %cond = icmp ne i64 %x, 0
134   br i1 %cond, label %if.then, label %return
136 if.then:
137   br label %return
139 return:
140   %res = phi i64 [ 42, %if.then ], [ %y, %entry ]
141   ret i64 %res