Skip to content

Commit 9877225

Browse files
vladimirradosavljevicakiramenai
authored andcommitted
[EraVM] Add pre-commit tests for Fold arithmetic and bitwise instructions to select
Signed-off-by: Vladimir Radosavljevic <[email protected]>
1 parent f774aaf commit 9877225

10 files changed

+1077
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2+
; RUN: llc -O3 --disable-eravm-scalar-opt-passes < %s | FileCheck %s
3+
4+
target datalayout = "E-p:256:256-i256:256:256-S32-a:256:256"
5+
target triple = "eravm"
6+
7+
define i256 @test_large_imm1(i256 %a) {
8+
; CHECK-LABEL: test_large_imm1:
9+
; CHECK: ; %bb.0:
10+
; CHECK-NEXT: and @CPI0_0[0], r1, r2
11+
; CHECK-NEXT: sub.s! @CPI0_1[0], r1, r3
12+
; CHECK-NEXT: add.ge r1, r0, r2
13+
; CHECK-NEXT: add r2, r0, r1
14+
; CHECK-NEXT: ret
15+
%and = and i256 26959946660873538059280334323183841250350249843923952699046031785980, %a
16+
%cmp = icmp ult i256 %a, -26959946660873538059280334323183841250350249843923952699046031785985
17+
%select = select i1 %cmp, i256 %and, i256 %a
18+
ret i256 %select
19+
}
20+
21+
define i256 @test_large_imm2(i256 %a) {
22+
; CHECK-LABEL: test_large_imm2:
23+
; CHECK: ; %bb.0:
24+
; CHECK-NEXT: and @CPI1_0[0], r1, r2
25+
; CHECK-NEXT: sub.s! @CPI1_1[0], r1, r3
26+
; CHECK-NEXT: add.ge r2, r0, r1
27+
; CHECK-NEXT: ret
28+
%and = and i256 26959946660873538059280334323183841250350249843923952699046031785980, %a
29+
%cmp = icmp ult i256 %a, -26959946660873538059280334323183841250350249843923952699046031785985
30+
%select = select i1 %cmp, i256 %a, i256 %and
31+
ret i256 %select
32+
}
33+
34+
define i256 @test_small_imm1(i256 %a) {
35+
; CHECK-LABEL: test_small_imm1:
36+
; CHECK: ; %bb.0:
37+
; CHECK-NEXT: and 10, r1, r2
38+
; CHECK-NEXT: sub.s! @CPI2_0[0], r1, r3
39+
; CHECK-NEXT: add.ge r1, r0, r2
40+
; CHECK-NEXT: add r2, r0, r1
41+
; CHECK-NEXT: ret
42+
%and = and i256 10, %a
43+
%cmp = icmp ult i256 %a, -5
44+
%select = select i1 %cmp, i256 %and, i256 %a
45+
ret i256 %select
46+
}
47+
48+
define i256 @test_small_imm2(i256 %a) {
49+
; CHECK-LABEL: test_small_imm2:
50+
; CHECK: ; %bb.0:
51+
; CHECK-NEXT: and 10, r1, r2
52+
; CHECK-NEXT: sub.s! @CPI3_0[0], r1, r3
53+
; CHECK-NEXT: add.ge r2, r0, r1
54+
; CHECK-NEXT: ret
55+
%and = and i256 10, %a
56+
%cmp = icmp ult i256 %a, -5
57+
%select = select i1 %cmp, i256 %a, i256 %and
58+
ret i256 %select
59+
}
60+
61+
define i256 @test_reg1(i256 %a, i256 %b) {
62+
; CHECK-LABEL: test_reg1:
63+
; CHECK: ; %bb.0:
64+
; CHECK-NEXT: and r1, r2, r3
65+
; CHECK-NEXT: sub! r1, r2, r2
66+
; CHECK-NEXT: add.ge r1, r0, r3
67+
; CHECK-NEXT: add r3, r0, r1
68+
; CHECK-NEXT: ret
69+
%and = and i256 %a, %b
70+
%cmp = icmp ult i256 %a, %b
71+
%select = select i1 %cmp, i256 %and, i256 %a
72+
ret i256 %select
73+
}
74+
75+
define i256 @test_reg2(i256 %a, i256 %b) {
76+
; CHECK-LABEL: test_reg2:
77+
; CHECK: ; %bb.0:
78+
; CHECK-NEXT: and r1, r2, r3
79+
; CHECK-NEXT: sub! r1, r2, r2
80+
; CHECK-NEXT: add.ge r3, r0, r1
81+
; CHECK-NEXT: ret
82+
%and = and i256 %a, %b
83+
%cmp = icmp ult i256 %a, %b
84+
%select = select i1 %cmp, i256 %a, i256 %and
85+
ret i256 %select
86+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2+
; RUN: llc -O3 --disable-eravm-scalar-opt-passes < %s | FileCheck %s
3+
4+
target datalayout = "E-p:256:256-i256:256:256-S32-a:256:256"
5+
target triple = "eravm"
6+
7+
define i256 @test_large_imm1(i256 %a) {
8+
; CHECK-LABEL: test_large_imm1:
9+
; CHECK: ; %bb.0:
10+
; CHECK-NEXT: div.s @CPI0_0[0], r1, r2, r3
11+
; CHECK-NEXT: sub.s! @CPI0_1[0], r1, r3
12+
; CHECK-NEXT: add.ge r1, r0, r2
13+
; CHECK-NEXT: add r2, r0, r1
14+
; CHECK-NEXT: ret
15+
%div = udiv i256 %a, 26959946660873538059280334323183841250350249843923952699046031785980
16+
%cmp = icmp ult i256 %a, -26959946660873538059280334323183841250350249843923952699046031785985
17+
%select = select i1 %cmp, i256 %div, i256 %a
18+
ret i256 %select
19+
}
20+
21+
define i256 @test_large_imm2(i256 %a) {
22+
; CHECK-LABEL: test_large_imm2:
23+
; CHECK: ; %bb.0:
24+
; CHECK-NEXT: div.s @CPI1_0[0], r1, r2, r3
25+
; CHECK-NEXT: sub.s! @CPI1_1[0], r1, r3
26+
; CHECK-NEXT: add.ge r2, r0, r1
27+
; CHECK-NEXT: ret
28+
%div = udiv i256 %a, 26959946660873538059280334323183841250350249843923952699046031785980
29+
%cmp = icmp ult i256 %a, -26959946660873538059280334323183841250350249843923952699046031785985
30+
%select = select i1 %cmp, i256 %a, i256 %div
31+
ret i256 %select
32+
}
33+
34+
define i256 @test_small_imm1(i256 %a) {
35+
; CHECK-LABEL: test_small_imm1:
36+
; CHECK: ; %bb.0:
37+
; CHECK-NEXT: div.s 10, r1, r2, r3
38+
; CHECK-NEXT: sub.s! @CPI2_0[0], r1, r3
39+
; CHECK-NEXT: add.ge r1, r0, r2
40+
; CHECK-NEXT: add r2, r0, r1
41+
; CHECK-NEXT: ret
42+
%div = udiv i256 %a, 10
43+
%cmp = icmp ult i256 %a, -5
44+
%select = select i1 %cmp, i256 %div, i256 %a
45+
ret i256 %select
46+
}
47+
48+
define i256 @test_small_imm2(i256 %a) {
49+
; CHECK-LABEL: test_small_imm2:
50+
; CHECK: ; %bb.0:
51+
; CHECK-NEXT: div.s 10, r1, r2, r3
52+
; CHECK-NEXT: sub.s! @CPI3_0[0], r1, r3
53+
; CHECK-NEXT: add.ge r2, r0, r1
54+
; CHECK-NEXT: ret
55+
%div = udiv i256 %a, 10
56+
%cmp = icmp ult i256 %a, -5
57+
%select = select i1 %cmp, i256 %a, i256 %div
58+
ret i256 %select
59+
}
60+
61+
define i256 @test_reg1(i256 %a, i256 %b) {
62+
; CHECK-LABEL: test_reg1:
63+
; CHECK: ; %bb.0:
64+
; CHECK-NEXT: div r1, r2, r3, r4
65+
; CHECK-NEXT: sub! r1, r2, r2
66+
; CHECK-NEXT: add.ge r1, r0, r3
67+
; CHECK-NEXT: add r3, r0, r1
68+
; CHECK-NEXT: ret
69+
%div = udiv i256 %a, %b
70+
%cmp = icmp ult i256 %a, %b
71+
%select = select i1 %cmp, i256 %div, i256 %a
72+
ret i256 %select
73+
}
74+
75+
define i256 @test_reg2(i256 %a, i256 %b) {
76+
; CHECK-LABEL: test_reg2:
77+
; CHECK: ; %bb.0:
78+
; CHECK-NEXT: div r1, r2, r3, r4
79+
; CHECK-NEXT: sub! r1, r2, r2
80+
; CHECK-NEXT: add.ge r3, r0, r1
81+
; CHECK-NEXT: ret
82+
%div = udiv i256 %a, %b
83+
%cmp = icmp ult i256 %a, %b
84+
%select = select i1 %cmp, i256 %a, i256 %div
85+
ret i256 %select
86+
}

0 commit comments

Comments
 (0)