blob: 5313215f118f1d78ea159a893879a98c07115324 [file] [log] [blame]
Richard Sandifordf722a8e302013-10-16 11:10:55 +00001; Test SETCC for every integer condition.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5; Test CC in { 0 }, with 3 don't care.
6define i32 @f1(i32 %a, i32 %b) {
7; CHECK-LABEL: f1:
8; CHECK: ipm %r2
9; CHECK-NEXT: afi %r2, -268435456
10; CHECK-NEXT: srl %r2, 31
11; CHECK: br %r14
12 %cond = icmp eq i32 %a, %b
13 %res = zext i1 %cond to i32
14 ret i32 %res
15}
16
17; Test CC in { 1 }, with 3 don't care.
18define i32 @f2(i32 %a, i32 %b) {
19; CHECK-LABEL: f2:
20; CHECK: ipm [[REG:%r[0-5]]]
21; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 36
22; CHECK: br %r14
23 %cond = icmp slt i32 %a, %b
24 %res = zext i1 %cond to i32
25 ret i32 %res
26}
27
28; Test CC in { 0, 1 }, with 3 don't care.
29define i32 @f3(i32 %a, i32 %b) {
30; CHECK-LABEL: f3:
31; CHECK: ipm %r2
32; CHECK-NEXT: afi %r2, -536870912
33; CHECK-NEXT: srl %r2, 31
34; CHECK: br %r14
35 %cond = icmp sle i32 %a, %b
36 %res = zext i1 %cond to i32
37 ret i32 %res
38}
39
40; Test CC in { 2 }, with 3 don't care.
41define i32 @f4(i32 %a, i32 %b) {
42; CHECK-LABEL: f4:
43; CHECK: ipm [[REG:%r[0-5]]]
44; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 35
45; CHECK: br %r14
46 %cond = icmp sgt i32 %a, %b
47 %res = zext i1 %cond to i32
48 ret i32 %res
49}
50
51; Test CC in { 0, 2 }, with 3 don't care.
52define i32 @f5(i32 %a, i32 %b) {
53; CHECK-LABEL: f5:
54; CHECK: ipm [[REG:%r[0-5]]]
55; CHECK-NEXT: xilf [[REG]], 4294967295
56; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 36
57; CHECK: br %r14
58 %cond = icmp sge i32 %a, %b
59 %res = zext i1 %cond to i32
60 ret i32 %res
61}
62
63; Test CC in { 1, 2 }, with 3 don't care.
64define i32 @f6(i32 %a, i32 %b) {
65; CHECK-LABEL: f6:
66; CHECK: ipm %r2
67; CHECK-NEXT: afi %r2, 1879048192
68; CHECK-NEXT: srl %r2, 31
69; CHECK: br %r14
70 %cond = icmp ne i32 %a, %b
71 %res = zext i1 %cond to i32
72 ret i32 %res
73}