xref: /llvm-project/llvm/test/CodeGen/LoongArch/ir-instruction/select-bare-int.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
1ed078c48SWANG Xuerui; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
4709e4ad0SWeining Lu
5709e4ad0SWeining Lu;; Exercise the bare integers 'select' LLVM IR: https://llvm.org/docs/LangRef.html#select-instruction
6709e4ad0SWeining Lu
7709e4ad0SWeining Ludefine i1 @bare_select_i1(i1 %a, i1 %b, i1 %c) {
8709e4ad0SWeining Lu; LA32-LABEL: bare_select_i1:
9709e4ad0SWeining Lu; LA32:       # %bb.0:
10709e4ad0SWeining Lu; LA32-NEXT:    andi $a0, $a0, 1
11709e4ad0SWeining Lu; LA32-NEXT:    masknez $a2, $a2, $a0
12709e4ad0SWeining Lu; LA32-NEXT:    maskeqz $a0, $a1, $a0
13709e4ad0SWeining Lu; LA32-NEXT:    or $a0, $a0, $a2
14ed078c48SWANG Xuerui; LA32-NEXT:    ret
15709e4ad0SWeining Lu;
16709e4ad0SWeining Lu; LA64-LABEL: bare_select_i1:
17709e4ad0SWeining Lu; LA64:       # %bb.0:
18709e4ad0SWeining Lu; LA64-NEXT:    andi $a0, $a0, 1
19709e4ad0SWeining Lu; LA64-NEXT:    masknez $a2, $a2, $a0
20709e4ad0SWeining Lu; LA64-NEXT:    maskeqz $a0, $a1, $a0
21709e4ad0SWeining Lu; LA64-NEXT:    or $a0, $a0, $a2
22ed078c48SWANG Xuerui; LA64-NEXT:    ret
23709e4ad0SWeining Lu  %res = select i1 %a, i1 %b, i1 %c
24709e4ad0SWeining Lu  ret i1 %res
25709e4ad0SWeining Lu}
26709e4ad0SWeining Lu
27709e4ad0SWeining Ludefine i8 @bare_select_i8(i1 %a, i8 %b, i8 %c) {
28709e4ad0SWeining Lu; LA32-LABEL: bare_select_i8:
29709e4ad0SWeining Lu; LA32:       # %bb.0:
30709e4ad0SWeining Lu; LA32-NEXT:    andi $a0, $a0, 1
31709e4ad0SWeining Lu; LA32-NEXT:    masknez $a2, $a2, $a0
32709e4ad0SWeining Lu; LA32-NEXT:    maskeqz $a0, $a1, $a0
33709e4ad0SWeining Lu; LA32-NEXT:    or $a0, $a0, $a2
34ed078c48SWANG Xuerui; LA32-NEXT:    ret
35709e4ad0SWeining Lu;
36709e4ad0SWeining Lu; LA64-LABEL: bare_select_i8:
37709e4ad0SWeining Lu; LA64:       # %bb.0:
38709e4ad0SWeining Lu; LA64-NEXT:    andi $a0, $a0, 1
39709e4ad0SWeining Lu; LA64-NEXT:    masknez $a2, $a2, $a0
40709e4ad0SWeining Lu; LA64-NEXT:    maskeqz $a0, $a1, $a0
41709e4ad0SWeining Lu; LA64-NEXT:    or $a0, $a0, $a2
42ed078c48SWANG Xuerui; LA64-NEXT:    ret
43709e4ad0SWeining Lu  %res = select i1 %a, i8 %b, i8 %c
44709e4ad0SWeining Lu  ret i8 %res
45709e4ad0SWeining Lu}
46709e4ad0SWeining Lu
47709e4ad0SWeining Ludefine i16 @bare_select_i16(i1 %a, i16 %b, i16 %c) {
48709e4ad0SWeining Lu; LA32-LABEL: bare_select_i16:
49709e4ad0SWeining Lu; LA32:       # %bb.0:
50709e4ad0SWeining Lu; LA32-NEXT:    andi $a0, $a0, 1
51709e4ad0SWeining Lu; LA32-NEXT:    masknez $a2, $a2, $a0
52709e4ad0SWeining Lu; LA32-NEXT:    maskeqz $a0, $a1, $a0
53709e4ad0SWeining Lu; LA32-NEXT:    or $a0, $a0, $a2
54ed078c48SWANG Xuerui; LA32-NEXT:    ret
55709e4ad0SWeining Lu;
56709e4ad0SWeining Lu; LA64-LABEL: bare_select_i16:
57709e4ad0SWeining Lu; LA64:       # %bb.0:
58709e4ad0SWeining Lu; LA64-NEXT:    andi $a0, $a0, 1
59709e4ad0SWeining Lu; LA64-NEXT:    masknez $a2, $a2, $a0
60709e4ad0SWeining Lu; LA64-NEXT:    maskeqz $a0, $a1, $a0
61709e4ad0SWeining Lu; LA64-NEXT:    or $a0, $a0, $a2
62ed078c48SWANG Xuerui; LA64-NEXT:    ret
63709e4ad0SWeining Lu  %res = select i1 %a, i16 %b, i16 %c
64709e4ad0SWeining Lu  ret i16 %res
65709e4ad0SWeining Lu}
66709e4ad0SWeining Lu
67709e4ad0SWeining Ludefine i32 @bare_select_i32(i1 %a, i32 %b, i32 %c) {
68709e4ad0SWeining Lu; LA32-LABEL: bare_select_i32:
69709e4ad0SWeining Lu; LA32:       # %bb.0:
70709e4ad0SWeining Lu; LA32-NEXT:    andi $a0, $a0, 1
71709e4ad0SWeining Lu; LA32-NEXT:    masknez $a2, $a2, $a0
72709e4ad0SWeining Lu; LA32-NEXT:    maskeqz $a0, $a1, $a0
73709e4ad0SWeining Lu; LA32-NEXT:    or $a0, $a0, $a2
74ed078c48SWANG Xuerui; LA32-NEXT:    ret
75709e4ad0SWeining Lu;
76709e4ad0SWeining Lu; LA64-LABEL: bare_select_i32:
77709e4ad0SWeining Lu; LA64:       # %bb.0:
78709e4ad0SWeining Lu; LA64-NEXT:    andi $a0, $a0, 1
79709e4ad0SWeining Lu; LA64-NEXT:    masknez $a2, $a2, $a0
80709e4ad0SWeining Lu; LA64-NEXT:    maskeqz $a0, $a1, $a0
81709e4ad0SWeining Lu; LA64-NEXT:    or $a0, $a0, $a2
82ed078c48SWANG Xuerui; LA64-NEXT:    ret
83709e4ad0SWeining Lu  %res = select i1 %a, i32 %b, i32 %c
84709e4ad0SWeining Lu  ret i32 %res
85709e4ad0SWeining Lu}
86709e4ad0SWeining Lu
87709e4ad0SWeining Ludefine i64 @bare_select_i64(i1 %a, i64 %b, i64 %c) {
88709e4ad0SWeining Lu; LA32-LABEL: bare_select_i64:
89709e4ad0SWeining Lu; LA32:       # %bb.0:
90709e4ad0SWeining Lu; LA32-NEXT:    andi $a5, $a0, 1
91709e4ad0SWeining Lu; LA32-NEXT:    masknez $a0, $a3, $a5
92709e4ad0SWeining Lu; LA32-NEXT:    maskeqz $a1, $a1, $a5
93709e4ad0SWeining Lu; LA32-NEXT:    or $a0, $a1, $a0
94709e4ad0SWeining Lu; LA32-NEXT:    masknez $a1, $a4, $a5
95709e4ad0SWeining Lu; LA32-NEXT:    maskeqz $a2, $a2, $a5
96709e4ad0SWeining Lu; LA32-NEXT:    or $a1, $a2, $a1
97ed078c48SWANG Xuerui; LA32-NEXT:    ret
98709e4ad0SWeining Lu;
99709e4ad0SWeining Lu; LA64-LABEL: bare_select_i64:
100709e4ad0SWeining Lu; LA64:       # %bb.0:
101709e4ad0SWeining Lu; LA64-NEXT:    andi $a0, $a0, 1
102709e4ad0SWeining Lu; LA64-NEXT:    masknez $a2, $a2, $a0
103709e4ad0SWeining Lu; LA64-NEXT:    maskeqz $a0, $a1, $a0
104709e4ad0SWeining Lu; LA64-NEXT:    or $a0, $a0, $a2
105ed078c48SWANG Xuerui; LA64-NEXT:    ret
106709e4ad0SWeining Lu  %res = select i1 %a, i64 %b, i64 %c
107709e4ad0SWeining Lu  ret i64 %res
108709e4ad0SWeining Lu}
1094262ae20SWang Rui
1104262ae20SWang Ruidefine i16 @bare_select_zero_i16(i1 %a, i16 %b) {
1114262ae20SWang Rui; LA32-LABEL: bare_select_zero_i16:
1124262ae20SWang Rui; LA32:       # %bb.0:
1134262ae20SWang Rui; LA32-NEXT:    andi $a0, $a0, 1
1144262ae20SWang Rui; LA32-NEXT:    masknez	$a0, $a1, $a0
1154262ae20SWang Rui; LA32-NEXT:    ret
1164262ae20SWang Rui;
1174262ae20SWang Rui; LA64-LABEL: bare_select_zero_i16:
1184262ae20SWang Rui; LA64:       # %bb.0:
1194262ae20SWang Rui; LA64-NEXT:    andi $a0, $a0, 1
1204262ae20SWang Rui; LA64-NEXT:    masknez	$a0, $a1, $a0
1214262ae20SWang Rui; LA64-NEXT:    ret
1224262ae20SWang Rui  %res = select i1 %a, i16 0, i16 %b
1234262ae20SWang Rui  ret i16 %res
1244262ae20SWang Rui}
1254262ae20SWang Rui
1264262ae20SWang Ruidefine i32 @bare_select_zero_i32(i1 %a, i32 %b) {
1274262ae20SWang Rui; LA32-LABEL: bare_select_zero_i32:
1284262ae20SWang Rui; LA32:       # %bb.0:
1294262ae20SWang Rui; LA32-NEXT:    andi $a0, $a0, 1
1304262ae20SWang Rui; LA32-NEXT:    maskeqz $a0, $a1, $a0
1314262ae20SWang Rui; LA32-NEXT:    ret
1324262ae20SWang Rui;
1334262ae20SWang Rui; LA64-LABEL: bare_select_zero_i32:
1344262ae20SWang Rui; LA64:       # %bb.0:
1354262ae20SWang Rui; LA64-NEXT:    andi $a0, $a0, 1
1364262ae20SWang Rui; LA64-NEXT:    maskeqz $a0, $a1, $a0
1374262ae20SWang Rui; LA64-NEXT:    ret
1384262ae20SWang Rui  %res = select i1 %a, i32 %b, i32 0
1394262ae20SWang Rui  ret i32 %res
1404262ae20SWang Rui}
141