blob: 3b89504bbc02effb2539fb2e19224ffe6c7e92b4 [file] [log] [blame]
Alex Bradburyffc435e2017-11-21 08:11:03 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3; RUN: | FileCheck %s -check-prefix=RV32I
4
5; TODO: check the generated instructions for the equivalent of seqz, snez,
6; sltz, sgtz map to something simple
7
8define i32 @icmp_eq(i32 %a, i32 %b) nounwind {
9; RV32I-LABEL: icmp_eq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000010; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000011; RV32I-NEXT: xor a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +000012; RV32I-NEXT: seqz a0, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000013; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000014 %1 = icmp eq i32 %a, %b
15 %2 = zext i1 %1 to i32
16 ret i32 %2
17}
18
Alex Bradbury1cc2d0b2018-11-09 14:47:36 +000019define i32 @icmp_eqz(i32 %a) nounwind {
20; RV32I-LABEL: icmp_eqz:
21; RV32I: # %bb.0:
22; RV32I-NEXT: seqz a0, a0
23; RV32I-NEXT: ret
24 %1 = icmp eq i32 %a, 0
25 %2 = zext i1 %1 to i32
26 ret i32 %2
27}
28
Alex Bradburyffc435e2017-11-21 08:11:03 +000029define i32 @icmp_ne(i32 %a, i32 %b) nounwind {
30; RV32I-LABEL: icmp_ne:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000031; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000032; RV32I-NEXT: xor a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +000033; RV32I-NEXT: snez a0, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000034; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000035 %1 = icmp ne i32 %a, %b
36 %2 = zext i1 %1 to i32
37 ret i32 %2
38}
39
Alex Bradbury1cc2d0b2018-11-09 14:47:36 +000040define i32 @icmp_nez(i32 %a) nounwind {
41; RV32I-LABEL: icmp_nez:
42; RV32I: # %bb.0:
43; RV32I-NEXT: snez a0, a0
44; RV32I-NEXT: ret
45 %1 = icmp ne i32 %a, 0
46 %2 = zext i1 %1 to i32
47 ret i32 %2
48}
49
Alex Bradburyffc435e2017-11-21 08:11:03 +000050define i32 @icmp_ugt(i32 %a, i32 %b) nounwind {
51; RV32I-LABEL: icmp_ugt:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000052; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000053; RV32I-NEXT: sltu a0, a1, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000054; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000055 %1 = icmp ugt i32 %a, %b
56 %2 = zext i1 %1 to i32
57 ret i32 %2
58}
59
60define i32 @icmp_uge(i32 %a, i32 %b) nounwind {
61; RV32I-LABEL: icmp_uge:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000062; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000063; RV32I-NEXT: sltu a0, a0, a1
64; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000065; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000066 %1 = icmp uge i32 %a, %b
67 %2 = zext i1 %1 to i32
68 ret i32 %2
69}
70
71define i32 @icmp_ult(i32 %a, i32 %b) nounwind {
72; RV32I-LABEL: icmp_ult:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000073; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000074; RV32I-NEXT: sltu a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +000075; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000076 %1 = icmp ult i32 %a, %b
77 %2 = zext i1 %1 to i32
78 ret i32 %2
79}
80
81define i32 @icmp_ule(i32 %a, i32 %b) nounwind {
82; RV32I-LABEL: icmp_ule:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000083; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000084; RV32I-NEXT: sltu a0, a1, a0
85; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000086; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000087 %1 = icmp ule i32 %a, %b
88 %2 = zext i1 %1 to i32
89 ret i32 %2
90}
91
92define i32 @icmp_sgt(i32 %a, i32 %b) nounwind {
93; RV32I-LABEL: icmp_sgt:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000094; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000095; RV32I-NEXT: slt a0, a1, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000096; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000097 %1 = icmp sgt i32 %a, %b
98 %2 = zext i1 %1 to i32
99 ret i32 %2
100}
101
102define i32 @icmp_sge(i32 %a, i32 %b) nounwind {
103; RV32I-LABEL: icmp_sge:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000104; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000105; RV32I-NEXT: slt a0, a0, a1
106; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000107; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000108 %1 = icmp sge i32 %a, %b
109 %2 = zext i1 %1 to i32
110 ret i32 %2
111}
112
113define i32 @icmp_slt(i32 %a, i32 %b) nounwind {
114; RV32I-LABEL: icmp_slt:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000115; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000116; RV32I-NEXT: slt a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000117; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000118 %1 = icmp slt i32 %a, %b
119 %2 = zext i1 %1 to i32
120 ret i32 %2
121}
122
123define i32 @icmp_sle(i32 %a, i32 %b) nounwind {
124; RV32I-LABEL: icmp_sle:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000125; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000126; RV32I-NEXT: slt a0, a1, a0
127; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000128; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000129 %1 = icmp sle i32 %a, %b
130 %2 = zext i1 %1 to i32
131 ret i32 %2
132}
133
134; TODO: check variants with an immediate?