xref: /aosp_15_r20/external/llvm/test/CodeGen/SPARC/rem.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparcv9 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1:
4*9880d681SAndroid Build Coastguard Worker; CHECK:        sdivx %o0, %o1, %o2
5*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   mulx %o2, %o1, %o1
6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   retl
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   sub %o0, %o1, %o0
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine i64 @test1(i64 %X, i64 %Y) {
10*9880d681SAndroid Build Coastguard Worker        %tmp1 = srem i64 %X, %Y
11*9880d681SAndroid Build Coastguard Worker        ret i64 %tmp1
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2:
15*9880d681SAndroid Build Coastguard Worker; CHECK:        udivx %o0, %o1, %o2
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   mulx %o2, %o1, %o1
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   retl
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   sub %o0, %o1, %o0
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine i64 @test2(i64 %X, i64 %Y) {
21*9880d681SAndroid Build Coastguard Worker        %tmp1 = urem i64 %X, %Y
22*9880d681SAndroid Build Coastguard Worker        ret i64 %tmp1
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; PR18150
26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3
27*9880d681SAndroid Build Coastguard Worker; CHECK:       sethi 2545, [[R0:%[gilo][0-7]]]
28*9880d681SAndroid Build Coastguard Worker; CHECK:       or    [[R0]], 379, [[R1:%[gilo][0-7]]]
29*9880d681SAndroid Build Coastguard Worker; CHECK:       mulx  %o0, [[R1]], [[R2:%[gilo][0-7]]]
30*9880d681SAndroid Build Coastguard Worker; CHECK:       udivx [[R2]], 1021, [[R3:%[gilo][0-7]]]
31*9880d681SAndroid Build Coastguard Worker; CHECK:       mulx  [[R3]], 1021, [[R4:%[gilo][0-7]]]
32*9880d681SAndroid Build Coastguard Worker; CHECK:       sub   [[R2]], [[R4]], %o0
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine i64 @test3(i64 %b) {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %b, 2606459
37*9880d681SAndroid Build Coastguard Worker  %rem = urem i64 %mul, 1021
38*9880d681SAndroid Build Coastguard Worker  ret i64 %rem
39*9880d681SAndroid Build Coastguard Worker}
40