blob: e1154948812a824b86ab2bab7ea42cd2ff2a1e9d [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
19define i32 @icmp_ne(i32 %a, i32 %b) nounwind {
20; RV32I-LABEL: icmp_ne:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000021; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000022; RV32I-NEXT: xor a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +000023; RV32I-NEXT: snez a0, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000024; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000025 %1 = icmp ne i32 %a, %b
26 %2 = zext i1 %1 to i32
27 ret i32 %2
28}
29
30define i32 @icmp_ugt(i32 %a, i32 %b) nounwind {
31; RV32I-LABEL: icmp_ugt:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000032; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000033; RV32I-NEXT: sltu a0, a1, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000034; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000035 %1 = icmp ugt i32 %a, %b
36 %2 = zext i1 %1 to i32
37 ret i32 %2
38}
39
40define i32 @icmp_uge(i32 %a, i32 %b) nounwind {
41; RV32I-LABEL: icmp_uge:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000042; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000043; RV32I-NEXT: sltu a0, a0, a1
44; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000045; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000046 %1 = icmp uge i32 %a, %b
47 %2 = zext i1 %1 to i32
48 ret i32 %2
49}
50
51define i32 @icmp_ult(i32 %a, i32 %b) nounwind {
52; RV32I-LABEL: icmp_ult:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000053; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000054; RV32I-NEXT: sltu a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +000055; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000056 %1 = icmp ult i32 %a, %b
57 %2 = zext i1 %1 to i32
58 ret i32 %2
59}
60
61define i32 @icmp_ule(i32 %a, i32 %b) nounwind {
62; RV32I-LABEL: icmp_ule:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000063; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000064; RV32I-NEXT: sltu a0, a1, a0
65; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000066; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000067 %1 = icmp ule i32 %a, %b
68 %2 = zext i1 %1 to i32
69 ret i32 %2
70}
71
72define i32 @icmp_sgt(i32 %a, i32 %b) nounwind {
73; RV32I-LABEL: icmp_sgt:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000074; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000075; RV32I-NEXT: slt a0, a1, a0
Alex Bradbury59136ff2017-12-15 09:47:01 +000076; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000077 %1 = icmp sgt i32 %a, %b
78 %2 = zext i1 %1 to i32
79 ret i32 %2
80}
81
82define i32 @icmp_sge(i32 %a, i32 %b) nounwind {
83; RV32I-LABEL: icmp_sge:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000084; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000085; RV32I-NEXT: slt a0, a0, a1
86; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +000087; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000088 %1 = icmp sge i32 %a, %b
89 %2 = zext i1 %1 to i32
90 ret i32 %2
91}
92
93define i32 @icmp_slt(i32 %a, i32 %b) nounwind {
94; RV32I-LABEL: icmp_slt:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000095; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +000096; RV32I-NEXT: slt a0, a0, a1
Alex Bradbury59136ff2017-12-15 09:47:01 +000097; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +000098 %1 = icmp slt i32 %a, %b
99 %2 = zext i1 %1 to i32
100 ret i32 %2
101}
102
103define i32 @icmp_sle(i32 %a, i32 %b) nounwind {
104; RV32I-LABEL: icmp_sle:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000105; RV32I: # %bb.0:
Alex Bradburyffc435e2017-11-21 08:11:03 +0000106; RV32I-NEXT: slt a0, a1, a0
107; RV32I-NEXT: xori a0, a0, 1
Alex Bradbury59136ff2017-12-15 09:47:01 +0000108; RV32I-NEXT: ret
Alex Bradburyffc435e2017-11-21 08:11:03 +0000109 %1 = icmp sle i32 %a, %b
110 %2 = zext i1 %1 to i32
111 ret i32 %2
112}
113
114; TODO: check variants with an immediate?