xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fast-isel-divrem.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i686-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine i8 @test_sdiv8(i8 %dividend, i8 %divisor) nounwind {
5*9880d681SAndroid Build Coastguard Workerentry:
6*9880d681SAndroid Build Coastguard Worker  %result = sdiv i8 %dividend, %divisor
7*9880d681SAndroid Build Coastguard Worker  ret i8 %result
8*9880d681SAndroid Build Coastguard Worker}
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sdiv8:
11*9880d681SAndroid Build Coastguard Worker; CHECK: movsbw
12*9880d681SAndroid Build Coastguard Worker; CHECK: idivb
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine i8 @test_srem8(i8 %dividend, i8 %divisor) nounwind {
15*9880d681SAndroid Build Coastguard Workerentry:
16*9880d681SAndroid Build Coastguard Worker  %result = srem i8 %dividend, %divisor
17*9880d681SAndroid Build Coastguard Worker  ret i8 %result
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srem8:
21*9880d681SAndroid Build Coastguard Worker; CHECK: movsbw
22*9880d681SAndroid Build Coastguard Worker; CHECK: idivb
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine i8 @test_udiv8(i8 %dividend, i8 %divisor) nounwind {
25*9880d681SAndroid Build Coastguard Workerentry:
26*9880d681SAndroid Build Coastguard Worker  %result = udiv i8 %dividend, %divisor
27*9880d681SAndroid Build Coastguard Worker  ret i8 %result
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_udiv8:
31*9880d681SAndroid Build Coastguard Worker; CHECK: movzbw
32*9880d681SAndroid Build Coastguard Worker; CHECK: divb
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine i8 @test_urem8(i8 %dividend, i8 %divisor) nounwind {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker  %result = urem i8 %dividend, %divisor
37*9880d681SAndroid Build Coastguard Worker  ret i8 %result
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_urem8:
41*9880d681SAndroid Build Coastguard Worker; CHECK: movzbw
42*9880d681SAndroid Build Coastguard Worker; CHECK: divb
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine i16 @test_sdiv16(i16 %dividend, i16 %divisor) nounwind {
45*9880d681SAndroid Build Coastguard Workerentry:
46*9880d681SAndroid Build Coastguard Worker  %result = sdiv i16 %dividend, %divisor
47*9880d681SAndroid Build Coastguard Worker  ret i16 %result
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sdiv16:
51*9880d681SAndroid Build Coastguard Worker; CHECK: cwtd
52*9880d681SAndroid Build Coastguard Worker; CHECK: idivw
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine i16 @test_srem16(i16 %dividend, i16 %divisor) nounwind {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker  %result = srem i16 %dividend, %divisor
57*9880d681SAndroid Build Coastguard Worker  ret i16 %result
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srem16:
61*9880d681SAndroid Build Coastguard Worker; CHECK: cwtd
62*9880d681SAndroid Build Coastguard Worker; CHECK: idivw
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerdefine i16 @test_udiv16(i16 %dividend, i16 %divisor) nounwind {
65*9880d681SAndroid Build Coastguard Workerentry:
66*9880d681SAndroid Build Coastguard Worker  %result = udiv i16 %dividend, %divisor
67*9880d681SAndroid Build Coastguard Worker  ret i16 %result
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_udiv16:
71*9880d681SAndroid Build Coastguard Worker; CHECK: xorl
72*9880d681SAndroid Build Coastguard Worker; CHECK: divw
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdefine i16 @test_urem16(i16 %dividend, i16 %divisor) nounwind {
75*9880d681SAndroid Build Coastguard Workerentry:
76*9880d681SAndroid Build Coastguard Worker  %result = urem i16 %dividend, %divisor
77*9880d681SAndroid Build Coastguard Worker  ret i16 %result
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_urem16:
81*9880d681SAndroid Build Coastguard Worker; CHECK: xorl
82*9880d681SAndroid Build Coastguard Worker; CHECK: divw
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sdiv32(i32 %dividend, i32 %divisor) nounwind {
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker  %result = sdiv i32 %dividend, %divisor
87*9880d681SAndroid Build Coastguard Worker  ret i32 %result
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sdiv32:
91*9880d681SAndroid Build Coastguard Worker; CHECK: cltd
92*9880d681SAndroid Build Coastguard Worker; CHECK: idivl
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdefine i32 @test_srem32(i32 %dividend, i32 %divisor) nounwind {
95*9880d681SAndroid Build Coastguard Workerentry:
96*9880d681SAndroid Build Coastguard Worker  %result = srem i32 %dividend, %divisor
97*9880d681SAndroid Build Coastguard Worker  ret i32 %result
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srem32:
101*9880d681SAndroid Build Coastguard Worker; CHECK: cltd
102*9880d681SAndroid Build Coastguard Worker; CHECK: idivl
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerdefine i32 @test_udiv32(i32 %dividend, i32 %divisor) nounwind {
105*9880d681SAndroid Build Coastguard Workerentry:
106*9880d681SAndroid Build Coastguard Worker  %result = udiv i32 %dividend, %divisor
107*9880d681SAndroid Build Coastguard Worker  ret i32 %result
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_udiv32:
111*9880d681SAndroid Build Coastguard Worker; CHECK: xorl
112*9880d681SAndroid Build Coastguard Worker; CHECK: divl
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerdefine i32 @test_urem32(i32 %dividend, i32 %divisor) nounwind {
115*9880d681SAndroid Build Coastguard Workerentry:
116*9880d681SAndroid Build Coastguard Worker  %result = urem i32 %dividend, %divisor
117*9880d681SAndroid Build Coastguard Worker  ret i32 %result
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_urem32:
121*9880d681SAndroid Build Coastguard Worker; CHECK: xorl
122*9880d681SAndroid Build Coastguard Worker; CHECK: divl
123