Skip to content

Commit dfc8854

Browse files
committed
[LoongArch][NFC] Pre-commit tests for [x]vadda.{b/h/w/d}
1 parent cfb4f29 commit dfc8854

File tree

2 files changed

+214
-0
lines changed
  • llvm/test/CodeGen/LoongArch

2 files changed

+214
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
4+
5+
define void @vadda_b(ptr %res, ptr %a, ptr %b) nounwind {
6+
; CHECK-LABEL: vadda_b:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: xvld $xr0, $a1, 0
9+
; CHECK-NEXT: xvld $xr1, $a2, 0
10+
; CHECK-NEXT: xvneg.b $xr2, $xr0
11+
; CHECK-NEXT: xvmax.b $xr0, $xr0, $xr2
12+
; CHECK-NEXT: xvneg.b $xr2, $xr1
13+
; CHECK-NEXT: xvmax.b $xr1, $xr1, $xr2
14+
; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1
15+
; CHECK-NEXT: xvst $xr0, $a0, 0
16+
; CHECK-NEXT: ret
17+
entry:
18+
%va = load <32 x i8>, ptr %a
19+
%vb = load <32 x i8>, ptr %b
20+
%conda = icmp slt <32 x i8> %va, zeroinitializer
21+
%nega = sub <32 x i8> zeroinitializer, %va
22+
%absa = select <32 x i1> %conda, <32 x i8> %nega, <32 x i8> %va
23+
%condb = icmp slt <32 x i8> %vb, zeroinitializer
24+
%negb = sub <32 x i8> zeroinitializer, %vb
25+
%absb = select <32 x i1> %condb, <32 x i8> %negb, <32 x i8> %vb
26+
%add = add <32 x i8> %absa, %absb
27+
store <32 x i8> %add, ptr %res
28+
ret void
29+
}
30+
31+
define void @vadda_h(ptr %res, ptr %a, ptr %b) nounwind {
32+
; CHECK-LABEL: vadda_h:
33+
; CHECK: # %bb.0: # %entry
34+
; CHECK-NEXT: xvld $xr0, $a1, 0
35+
; CHECK-NEXT: xvld $xr1, $a2, 0
36+
; CHECK-NEXT: xvneg.h $xr2, $xr0
37+
; CHECK-NEXT: xvmax.h $xr0, $xr0, $xr2
38+
; CHECK-NEXT: xvneg.h $xr2, $xr1
39+
; CHECK-NEXT: xvmax.h $xr1, $xr1, $xr2
40+
; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1
41+
; CHECK-NEXT: xvst $xr0, $a0, 0
42+
; CHECK-NEXT: ret
43+
entry:
44+
%va = load <16 x i16>, ptr %a
45+
%vb = load <16 x i16>, ptr %b
46+
%conda = icmp slt <16 x i16> %va, zeroinitializer
47+
%nega = sub <16 x i16> zeroinitializer, %va
48+
%absa = select <16 x i1> %conda, <16 x i16> %nega, <16 x i16> %va
49+
%condb = icmp slt <16 x i16> %vb, zeroinitializer
50+
%negb = sub <16 x i16> zeroinitializer, %vb
51+
%absb = select <16 x i1> %condb, <16 x i16> %negb, <16 x i16> %vb
52+
%add = add <16 x i16> %absa, %absb
53+
store <16 x i16> %add, ptr %res
54+
ret void
55+
}
56+
57+
define void @vadda_w(ptr %res, ptr %a, ptr %b) nounwind {
58+
; CHECK-LABEL: vadda_w:
59+
; CHECK: # %bb.0: # %entry
60+
; CHECK-NEXT: xvld $xr0, $a1, 0
61+
; CHECK-NEXT: xvld $xr1, $a2, 0
62+
; CHECK-NEXT: xvneg.w $xr2, $xr0
63+
; CHECK-NEXT: xvmax.w $xr0, $xr0, $xr2
64+
; CHECK-NEXT: xvneg.w $xr2, $xr1
65+
; CHECK-NEXT: xvmax.w $xr1, $xr1, $xr2
66+
; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1
67+
; CHECK-NEXT: xvst $xr0, $a0, 0
68+
; CHECK-NEXT: ret
69+
entry:
70+
%va = load <8 x i32>, ptr %a
71+
%vb = load <8 x i32>, ptr %b
72+
%conda = icmp slt <8 x i32> %va, zeroinitializer
73+
%nega = sub <8 x i32> zeroinitializer, %va
74+
%absa = select <8 x i1> %conda, <8 x i32> %nega, <8 x i32> %va
75+
%condb = icmp slt <8 x i32> %vb, zeroinitializer
76+
%negb = sub <8 x i32> zeroinitializer, %vb
77+
%absb = select <8 x i1> %condb, <8 x i32> %negb, <8 x i32> %vb
78+
%add = add <8 x i32> %absa, %absb
79+
store <8 x i32> %add, ptr %res
80+
ret void
81+
}
82+
83+
define void @vadda_d(ptr %res, ptr %a, ptr %b) nounwind {
84+
; CHECK-LABEL: vadda_d:
85+
; CHECK: # %bb.0: # %entry
86+
; CHECK-NEXT: xvld $xr0, $a1, 0
87+
; CHECK-NEXT: xvld $xr1, $a2, 0
88+
; CHECK-NEXT: xvneg.d $xr2, $xr0
89+
; CHECK-NEXT: xvmax.d $xr0, $xr0, $xr2
90+
; CHECK-NEXT: xvneg.d $xr2, $xr1
91+
; CHECK-NEXT: xvmax.d $xr1, $xr1, $xr2
92+
; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1
93+
; CHECK-NEXT: xvst $xr0, $a0, 0
94+
; CHECK-NEXT: ret
95+
entry:
96+
%va = load <4 x i64>, ptr %a
97+
%vb = load <4 x i64>, ptr %b
98+
%conda = icmp slt <4 x i64> %va, zeroinitializer
99+
%nega = sub <4 x i64> zeroinitializer, %va
100+
%absa = select <4 x i1> %conda, <4 x i64> %nega, <4 x i64> %va
101+
%condb = icmp slt <4 x i64> %vb, zeroinitializer
102+
%negb = sub <4 x i64> zeroinitializer, %vb
103+
%absb = select <4 x i1> %condb, <4 x i64> %negb, <4 x i64> %vb
104+
%add = add <4 x i64> %absa, %absb
105+
store <4 x i64> %add, ptr %res
106+
ret void
107+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s
4+
5+
define void @vadda_b(ptr %res, ptr %a, ptr %b) nounwind {
6+
; CHECK-LABEL: vadda_b:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: vld $vr0, $a1, 0
9+
; CHECK-NEXT: vld $vr1, $a2, 0
10+
; CHECK-NEXT: vneg.b $vr2, $vr0
11+
; CHECK-NEXT: vmax.b $vr0, $vr0, $vr2
12+
; CHECK-NEXT: vneg.b $vr2, $vr1
13+
; CHECK-NEXT: vmax.b $vr1, $vr1, $vr2
14+
; CHECK-NEXT: vadd.b $vr0, $vr0, $vr1
15+
; CHECK-NEXT: vst $vr0, $a0, 0
16+
; CHECK-NEXT: ret
17+
entry:
18+
%va = load <16 x i8>, ptr %a
19+
%vb = load <16 x i8>, ptr %b
20+
%conda = icmp slt <16 x i8> %va, zeroinitializer
21+
%nega = sub <16 x i8> zeroinitializer, %va
22+
%absa = select <16 x i1> %conda, <16 x i8> %nega, <16 x i8> %va
23+
%condb = icmp slt <16 x i8> %vb, zeroinitializer
24+
%negb = sub <16 x i8> zeroinitializer, %vb
25+
%absb = select <16 x i1> %condb, <16 x i8> %negb, <16 x i8> %vb
26+
%add = add <16 x i8> %absa, %absb
27+
store <16 x i8> %add, ptr %res
28+
ret void
29+
}
30+
31+
define void @vadda_h(ptr %res, ptr %a, ptr %b) nounwind {
32+
; CHECK-LABEL: vadda_h:
33+
; CHECK: # %bb.0: # %entry
34+
; CHECK-NEXT: vld $vr0, $a1, 0
35+
; CHECK-NEXT: vld $vr1, $a2, 0
36+
; CHECK-NEXT: vneg.h $vr2, $vr0
37+
; CHECK-NEXT: vmax.h $vr0, $vr0, $vr2
38+
; CHECK-NEXT: vneg.h $vr2, $vr1
39+
; CHECK-NEXT: vmax.h $vr1, $vr1, $vr2
40+
; CHECK-NEXT: vadd.h $vr0, $vr0, $vr1
41+
; CHECK-NEXT: vst $vr0, $a0, 0
42+
; CHECK-NEXT: ret
43+
entry:
44+
%va = load <8 x i16>, ptr %a
45+
%vb = load <8 x i16>, ptr %b
46+
%conda = icmp slt <8 x i16> %va, zeroinitializer
47+
%nega = sub <8 x i16> zeroinitializer, %va
48+
%absa = select <8 x i1> %conda, <8 x i16> %nega, <8 x i16> %va
49+
%condb = icmp slt <8 x i16> %vb, zeroinitializer
50+
%negb = sub <8 x i16> zeroinitializer, %vb
51+
%absb = select <8 x i1> %condb, <8 x i16> %negb, <8 x i16> %vb
52+
%add = add <8 x i16> %absa, %absb
53+
store <8 x i16> %add, ptr %res
54+
ret void
55+
}
56+
57+
define void @vadda_w(ptr %res, ptr %a, ptr %b) nounwind {
58+
; CHECK-LABEL: vadda_w:
59+
; CHECK: # %bb.0: # %entry
60+
; CHECK-NEXT: vld $vr0, $a1, 0
61+
; CHECK-NEXT: vld $vr1, $a2, 0
62+
; CHECK-NEXT: vneg.w $vr2, $vr0
63+
; CHECK-NEXT: vmax.w $vr0, $vr0, $vr2
64+
; CHECK-NEXT: vneg.w $vr2, $vr1
65+
; CHECK-NEXT: vmax.w $vr1, $vr1, $vr2
66+
; CHECK-NEXT: vadd.w $vr0, $vr0, $vr1
67+
; CHECK-NEXT: vst $vr0, $a0, 0
68+
; CHECK-NEXT: ret
69+
entry:
70+
%va = load <4 x i32>, ptr %a
71+
%vb = load <4 x i32>, ptr %b
72+
%conda = icmp slt <4 x i32> %va, zeroinitializer
73+
%nega = sub <4 x i32> zeroinitializer, %va
74+
%absa = select <4 x i1> %conda, <4 x i32> %nega, <4 x i32> %va
75+
%condb = icmp slt <4 x i32> %vb, zeroinitializer
76+
%negb = sub <4 x i32> zeroinitializer, %vb
77+
%absb = select <4 x i1> %condb, <4 x i32> %negb, <4 x i32> %vb
78+
%add = add <4 x i32> %absa, %absb
79+
store <4 x i32> %add, ptr %res
80+
ret void
81+
}
82+
83+
define void @vadda_d(ptr %res, ptr %a, ptr %b) nounwind {
84+
; CHECK-LABEL: vadda_d:
85+
; CHECK: # %bb.0: # %entry
86+
; CHECK-NEXT: vld $vr0, $a1, 0
87+
; CHECK-NEXT: vld $vr1, $a2, 0
88+
; CHECK-NEXT: vneg.d $vr2, $vr0
89+
; CHECK-NEXT: vmax.d $vr0, $vr0, $vr2
90+
; CHECK-NEXT: vneg.d $vr2, $vr1
91+
; CHECK-NEXT: vmax.d $vr1, $vr1, $vr2
92+
; CHECK-NEXT: vadd.d $vr0, $vr0, $vr1
93+
; CHECK-NEXT: vst $vr0, $a0, 0
94+
; CHECK-NEXT: ret
95+
entry:
96+
%va = load <2 x i64>, ptr %a
97+
%vb = load <2 x i64>, ptr %b
98+
%conda = icmp slt <2 x i64> %va, zeroinitializer
99+
%nega = sub <2 x i64> zeroinitializer, %va
100+
%absa = select <2 x i1> %conda, <2 x i64> %nega, <2 x i64> %va
101+
%condb = icmp slt <2 x i64> %vb, zeroinitializer
102+
%negb = sub <2 x i64> zeroinitializer, %vb
103+
%absb = select <2 x i1> %condb, <2 x i64> %negb, <2 x i64> %vb
104+
%add = add <2 x i64> %absa, %absb
105+
store <2 x i64> %add, ptr %res
106+
ret void
107+
}

0 commit comments

Comments
 (0)