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