xref: /aosp_15_r20/external/llvm/test/Analysis/Lint/check-zero-divide.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -lint -disable-output %s 2>&1 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv(<2 x i32> %a) nounwind {
4*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 5, i32 8>
5*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
6*9880d681SAndroid Build Coastguard Worker}
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_srem(<2 x i32> %a) nounwind {
9*9880d681SAndroid Build Coastguard Worker  %b = srem <2 x i32> %a, <i32 5, i32 8>
10*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_udiv(<2 x i32> %a) nounwind {
14*9880d681SAndroid Build Coastguard Worker  %b = udiv <2 x i32> %a, <i32 5, i32 8>
15*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_urem(<2 x i32> %a) nounwind {
19*9880d681SAndroid Build Coastguard Worker  %b = urem <2 x i32> %a, <i32 5, i32 8>
20*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine i32 @use_sdiv_by_zero(i32 %a) nounwind {
24*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv i32 %a, 0
26*9880d681SAndroid Build Coastguard Worker  %b = sdiv i32 %a, 0
27*9880d681SAndroid Build Coastguard Worker  ret i32 %b
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine i32 @use_sdiv_by_zeroinitializer(i32 %a) nounwind {
31*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv i32 %a, 0
33*9880d681SAndroid Build Coastguard Worker  %b = sdiv i32 %a, zeroinitializer
34*9880d681SAndroid Build Coastguard Worker   ret i32 %b
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv_by_zero_x(<2 x i32> %a) nounwind {
38*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv <2 x i32> %a, <i32 0, i32 5>
40*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 0, i32 5>
41*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv_by_zero_y(<2 x i32> %a) nounwind {
45*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  %b = sdiv <2 x i32> %a, <i32 4, i32 0>
47*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 4, i32 0>
48*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv_by_zero_xy(<2 x i32> %a) nounwind {
52*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv <2 x i32> %a, zeroinitializer
54*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 0, i32 0>
55*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv_by_undef_x(<2 x i32> %a) nounwind {
59*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv <2 x i32> %a, <i32 undef, i32 5>
61*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 undef, i32 5>
62*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
63*9880d681SAndroid Build Coastguard Worker}
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv_by_undef_y(<2 x i32> %a) nounwind {
66*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv <2 x i32> %a, <i32 5, i32 undef>
68*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 5, i32 undef>
69*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @use_vector_sdiv_by_undef_xy(<2 x i32> %a) nounwind {
73*9880d681SAndroid Build Coastguard Worker; CHECK: Undefined behavior: Division by zero
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %b = sdiv <2 x i32> %a, undef
75*9880d681SAndroid Build Coastguard Worker  %b = sdiv <2 x i32> %a, <i32 undef, i32 undef>
76*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %b
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79