|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 |
1 | 2 | ; RUN: llc < %s | FileCheck %s |
2 | 3 |
|
3 | 4 | target datalayout = "E-p:256:256-i256:256:256-S256-a:256:256" |
4 | 5 | target triple = "eravm" |
5 | 6 |
|
6 | 7 | ; CHECK-LABEL: srem |
7 | 8 | define i256 @srem(i256 %rs1, i256 %rs2) nounwind { |
8 | | -; CHECK: div.s! @CPI0_0[0], [[REG2:r[0-9]+]], [[REG2]], [[REG3:r[0-9]+]] |
9 | | -; CHECK-NEXT: sub @CPI0_0[0], [[REG3:r[0-9]+]], [[REG4:r[0-9]+]] |
10 | | -; CHECK-NEXT: add.eq [[REG3]], r0, [[REG4]] |
11 | | -; CHECK-NEXT: div.s! @CPI0_0[0], [[REG1:r[0-9]+]], [[REG3]], [[REG5:r[0-9]+]] |
12 | | -; CHECK-NEXT: sub @CPI0_0[0], [[REG5]], [[REG2]] |
13 | | -; CHECK-NEXT: add.eq [[REG5]], r0, [[REG2]] |
14 | | -; CHECK-NEXT: div [[REG2]], [[REG4]], [[REG3]], [[REG2]] |
15 | | -; CHECK-NEXT: and! @CPI0_0[0], [[REG1]], [[REG1]] |
16 | | -; CHECK-NEXT: sub 0, [[REG2]], [[REG1]] |
17 | | -; CHECK-NEXT: add.eq [[REG2]], r0, [[REG1]] |
18 | | -; CHECK-NEXT: sub! [[REG2]], r0, [[REG3]] |
19 | | -; CHECK-NEXT: add.ne [[REG1]], r0, [[REG2]] |
| 9 | +; CHECK-LABEL: srem: |
| 10 | +; CHECK: ; %bb.0: |
| 11 | +; CHECK-NEXT: div.s! @CPI0_0[0], r2, r2, r3 |
| 12 | +; CHECK-NEXT: sub @CPI0_0[0], r3, r4 |
| 13 | +; CHECK-NEXT: add.eq r3, r0, r4 |
| 14 | +; CHECK-NEXT: div.s! @CPI0_0[0], r1, r3, r5 |
| 15 | +; CHECK-NEXT: sub @CPI0_0[0], r5, r2 |
| 16 | +; CHECK-NEXT: add.eq r5, r0, r2 |
| 17 | +; CHECK-NEXT: div r2, r4, r3, r2 |
| 18 | +; CHECK-NEXT: and! @CPI0_0[0], r1, r1 |
| 19 | +; CHECK-NEXT: sub 0, r2, r1 |
| 20 | +; CHECK-NEXT: add.eq r2, r0, r1 |
| 21 | +; CHECK-NEXT: sub! r2, r0, r3 |
| 22 | +; CHECK-NEXT: add.ne r1, r0, r2 |
| 23 | +; CHECK-NEXT: add r2, r0, r1 |
| 24 | +; CHECK-NEXT: ret |
20 | 25 | %res = srem i256 %rs1, %rs2 |
21 | 26 | ret i256 %res |
22 | 27 | } |
23 | 28 |
|
24 | 29 | ; CHECK-LABEL: sdiv |
25 | 30 | define i256 @sdiv(i256 %rs1, i256 %rs2) nounwind { |
26 | | -; CHECK: div.s! @CPI{{[0-9]+}}_0[0], [[REGsdiv2:r[0-9]+]], [[REGsdiv2]], [[REGsdiv3:r[0-9]+]] |
27 | | -; CHECK-NEXT: sub @CPI{{[0-9]+}}_0[0], [[REGsdiv3]], [[REGsdiv5:r[0-9]+]] |
28 | | -; CHECK-NEXT: add.eq [[REGsdiv3]], r0, [[REGsdiv5]] |
29 | | -; CHECK-NEXT: div.s! @CPI{{[0-9]+}}_0[0], [[REGsdiv1:r[0-9]+]], [[REGsdiv1]], [[REGsdiv3]] |
30 | | -; CHECK-NEXT: xor [[REGsdiv1]], [[REGsdiv2]], [[REGsdiv2]] |
31 | | -; CHECK-NEXT: sub @CPI{{[0-9]+}}_0[0], [[REGsdiv3]], [[REGsdiv1]] |
32 | | -; CHECK-NEXT: add.eq [[REGsdiv3]], r0, [[REGsdiv1]] |
33 | | -; CHECK-NEXT: div [[REGsdiv1]], [[REGsdiv5]], [[REGsdiv1]], [[REGsdiv3]] |
34 | | -; CHECK-NEXT: shl.s! 255, [[REGsdiv2]], [[REGsdiv2]] |
35 | | -; CHECK-NEXT: sub [[REGsdiv2]], [[REGsdiv1]], [[REGsdiv3]] |
36 | | -; CHECK-NEXT: or [[REGsdiv3]], [[REGsdiv2]], [[REGsdiv2]] |
37 | | -; CHECK-NEXT: add.eq [[REGsdiv1]], r0, [[REGsdiv2]] |
38 | | -; CHECK-NEXT: sub! [[REGsdiv1]], r0, [[REGsdiv3]] |
39 | | -; CHECK-NEXT: add.ne [[REGsdiv2]], r0, [[REGsdiv1]] |
| 31 | +; CHECK-LABEL: sdiv: |
| 32 | +; CHECK: ; %bb.0: |
| 33 | +; CHECK-NEXT: div.s! @CPI1_0[0], r2, r2, r3 |
| 34 | +; CHECK-NEXT: sub @CPI1_0[0], r3, r5 |
| 35 | +; CHECK-NEXT: add.eq r3, r0, r5 |
| 36 | +; CHECK-NEXT: div.s! @CPI1_0[0], r1, r1, r3 |
| 37 | +; CHECK-NEXT: xor r1, r2, r2 |
| 38 | +; CHECK-NEXT: sub @CPI1_0[0], r3, r1 |
| 39 | +; CHECK-NEXT: add.eq r3, r0, r1 |
| 40 | +; CHECK-NEXT: div r1, r5, r1, r3 |
| 41 | +; CHECK-NEXT: shl.s! 255, r2, r2 |
| 42 | +; CHECK-NEXT: sub r2, r1, r3 |
| 43 | +; CHECK-NEXT: or r3, r2, r2 |
| 44 | +; CHECK-NEXT: add.eq r1, r0, r2 |
| 45 | +; CHECK-NEXT: sub! r1, r0, r3 |
| 46 | +; CHECK-NEXT: add.ne r2, r0, r1 |
| 47 | +; CHECK-NEXT: ret |
40 | 48 | %res = sdiv i256 %rs1, %rs2 |
41 | 49 | ret i256 %res |
42 | 50 | } |
43 | 51 |
|
44 | 52 | ; CHECK-LABEL: sdivrem |
45 | 53 | define i256 @sdivrem(i256 %rs1, i256 %rs2) nounwind { |
46 | | -; CHECK: div.s! @CPI{{[0-9]+}}_0[0], [[REGsdivrem2:r[0-9]+]], [[REGsdivrem2]], [[REGsdivrem3:r[0-9]+]] |
47 | | -; CHECK-NEXT: sub @CPI{{[0-9]+}}_0[0], [[REGsdivrem3]], [[REGsdivrem5:r[0-9]+]] |
48 | | -; CHECK-NEXT: add.eq [[REGsdivrem3]], r0, [[REGsdivrem5]] |
49 | | -; CHECK-NEXT: div.s! @CPI{{[0-9]+}}_0[0], [[REGsdivrem1:r[0-9]+]], [[REGsdivrem3]], [[REGsdivrem6:r[0-9]+]] |
50 | | -; CHECK-NEXT: xor [[REGsdivrem3]], [[REGsdivrem2]], [[REGsdivrem2]] |
51 | | -; CHECK-NEXT: sub @CPI{{[0-9]+}}_0[0], [[REGsdivrem6]], [[REGsdivrem3]] |
52 | | -; CHECK-NEXT: add.eq [[REGsdivrem6]], r0, [[REGsdivrem3]] |
53 | | -; CHECK-NEXT: div [[REGsdivrem3]], [[REGsdivrem5]], [[REGsdivrem4:r[0-9]+]], [[REGsdivrem3]] |
54 | | -; CHECK-NEXT: shl.s! 255, [[REGsdivrem2]], [[REGsdivrem2]] |
55 | | -; CHECK-NEXT: sub [[REGsdivrem2]], [[REGsdivrem4]], [[REGsdivrem5]] |
56 | | -; CHECK-NEXT: or [[REGsdivrem5]], [[REGsdivrem2]], [[REGsdivrem2]] |
57 | | -; CHECK-NEXT: add.eq [[REGsdivrem4]], r0, [[REGsdivrem2]] |
58 | | -; CHECK-NEXT: and! @CPI{{[0-9]+}}_0[0], [[REGsdivrem1]], [[REGsdivrem1]] |
59 | | -; CHECK-NEXT: sub 0, [[REGsdivrem3]], [[REGsdivrem1]] |
60 | | -; CHECK-NEXT: add.eq [[REGsdivrem3]], r0, [[REGsdivrem1]] |
61 | | -; CHECK-NEXT: sub! [[REGsdivrem3]], r0, [[REGsdivrem5]] |
62 | | -; CHECK-NEXT: add.ne [[REGsdivrem1]], r0, [[REGsdivrem3]] |
63 | | -; CHECK-NEXT: sub! [[REGsdivrem4]], r0, [[REGsdivrem1]] |
64 | | -; CHECK-NEXT: add.ne [[REGsdivrem2]], r0, [[REGsdivrem4]] |
65 | | -; CHECK-NEXT: add [[REGsdivrem3]], [[REGsdivrem4]], [[REGsdivrem1]] |
| 54 | +; CHECK-LABEL: sdivrem: |
| 55 | +; CHECK: ; %bb.0: |
| 56 | +; CHECK-NEXT: div.s! @CPI2_0[0], r2, r2, r3 |
| 57 | +; CHECK-NEXT: sub @CPI2_0[0], r3, r5 |
| 58 | +; CHECK-NEXT: add.eq r3, r0, r5 |
| 59 | +; CHECK-NEXT: div.s! @CPI2_0[0], r1, r3, r6 |
| 60 | +; CHECK-NEXT: xor r3, r2, r2 |
| 61 | +; CHECK-NEXT: sub @CPI2_0[0], r6, r3 |
| 62 | +; CHECK-NEXT: add.eq r6, r0, r3 |
| 63 | +; CHECK-NEXT: div r3, r5, r4, r3 |
| 64 | +; CHECK-NEXT: shl.s! 255, r2, r2 |
| 65 | +; CHECK-NEXT: sub r2, r4, r5 |
| 66 | +; CHECK-NEXT: or r5, r2, r2 |
| 67 | +; CHECK-NEXT: add.eq r4, r0, r2 |
| 68 | +; CHECK-NEXT: and! @CPI2_0[0], r1, r1 |
| 69 | +; CHECK-NEXT: sub 0, r3, r1 |
| 70 | +; CHECK-NEXT: add.eq r3, r0, r1 |
| 71 | +; CHECK-NEXT: sub! r3, r0, r5 |
| 72 | +; CHECK-NEXT: add.ne r1, r0, r3 |
| 73 | +; CHECK-NEXT: sub! r4, r0, r1 |
| 74 | +; CHECK-NEXT: add.ne r2, r0, r4 |
| 75 | +; CHECK-NEXT: add r3, r4, r1 |
| 76 | +; CHECK-NEXT: ret |
66 | 77 | %res1 = srem i256 %rs1, %rs2 |
67 | 78 | %res2 = sdiv i256 %rs1, %rs2 |
68 | 79 | %res = add i256 %res1, %res2 |
|
0 commit comments