File tree Expand file tree Collapse file tree 5 files changed +68
-9
lines changed Expand file tree Collapse file tree 5 files changed +68
-9
lines changed Original file line number Diff line number Diff line change @@ -118,7 +118,9 @@ class BPFTargetLowering : public TargetLowering {
118
118
return Op.size () >= 8 ? MVT::i64 : MVT::i32 ;
119
119
}
120
120
121
- bool isIntDivCheap (EVT VT, AttributeList Attr) const override { return true ; }
121
+ bool isIntDivCheap (EVT VT, AttributeList Attr) const override {
122
+ return false ;
123
+ }
122
124
123
125
bool shouldConvertConstantLoadToIntImm (const APInt &Imm,
124
126
Type *Ty) const override {
Original file line number Diff line number Diff line change @@ -200,7 +200,7 @@ entry:
200
200
define dso_local i32 @div_i (i32 %a ) local_unnamed_addr #0 {
201
201
entry:
202
202
%div = udiv i32 %a , 15
203
- ; CHECK: w{{[0-9]+}} /= 15
203
+ ; CHECK-NOT : w{{[0-9]+}} /= 15
204
204
ret i32 %div
205
205
}
206
206
@@ -216,7 +216,7 @@ entry:
216
216
define dso_local i32 @rem_i (i32 %a ) local_unnamed_addr #0 {
217
217
entry:
218
218
%rem = urem i32 %a , 15
219
- ; CHECK: w{{[0-9]+}} %= 15
219
+ ; CHECK-NOT : w{{[0-9]+}} %= 15
220
220
ret i32 %rem
221
221
}
222
222
Original file line number Diff line number Diff line change 2
2
; RUN: FileCheck %s < %t1
3
3
; CHECK: unsupported signed division
4
4
5
- define i32 @test (i32 %len ) {
6
- %1 = sdiv i32 %len , 15
7
- ret i32 %1
5
+ define i64 @test (i64 %len ) {
6
+ %1 = sdiv i64 %len , 15
7
+ ret i64 %1
8
8
}
Original file line number Diff line number Diff line change
1
+ ; RUN: llc -march=bpfel -mcpu=v1 < %s | FileCheck --check-prefix=CHECK-V1 %s
2
+ ; RUN: llc -march=bpfel -mcpu=v4 < %s | FileCheck --check-prefix=CHECK-V4 %s
3
+
4
+ target triple = "bpf"
5
+
6
+ ; struct S {
7
+ ; int var[3];
8
+ ; };
9
+ ; int foo1 (struct S *a, struct S *b)
10
+ ; {
11
+ ; return a - b;
12
+ ; }
13
+ define dso_local i32 @foo1 (ptr noundef %a , ptr noundef %b ) local_unnamed_addr {
14
+ entry:
15
+ %sub.ptr.lhs.cast = ptrtoint ptr %a to i64
16
+ %sub.ptr.rhs.cast = ptrtoint ptr %b to i64
17
+ %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast , %sub.ptr.rhs.cast
18
+ %sub.ptr.div = sdiv exact i64 %sub.ptr.sub , 12
19
+ %conv = trunc i64 %sub.ptr.div to i32
20
+ ret i32 %conv
21
+ }
22
+ ; CHECK-V1: r0 = r1
23
+ ; CHECK-V1: r0 -= r2
24
+ ; CHECK-V1: r0 s>>= 2
25
+ ; CHECK-V1: r1 = -6148914691236517205 ll
26
+ ; CHECK-V1: r0 *= r1
27
+ ; CHECK-V1: exit
28
+
29
+ ; CHECK-V4: r0 = r1
30
+ ; CHECK-V4: r0 -= r2
31
+ ; CHECK-V4: r0 >>= 2
32
+ ; CHECK-V4: w0 *= -1431655765
33
+ ; CHECK-V4: exit
34
+
35
+ define dso_local noundef range(i32 -143165576 , 143165577 ) i32 @foo2 (i32 noundef %a ) local_unnamed_addr {
36
+ entry:
37
+ %div = sdiv i32 %a , 15
38
+ ret i32 %div
39
+ }
40
+ ; CHECK-V1-NOT: r[[#]] s/= 15
41
+ ; CHECK-V4-NOT: w[[#]] s/= 15
42
+
43
+ define dso_local noundef range(i32 -14 , 15 ) i32 @foo3 (i32 noundef %a ) local_unnamed_addr {
44
+ entry:
45
+ %rem = srem i32 %a , 15
46
+ ret i32 %rem
47
+ }
48
+ ; CHECK-V1-NOT: r[[#]] s%= 15
49
+ ; CHECK-V4-NOT: w[[#]] s%= 15
50
+
51
+ define dso_local i64 @foo4 (i64 noundef %a ) local_unnamed_addr {
52
+ entry:
53
+ %div = udiv exact i64 %a , 15
54
+ ret i64 %div
55
+ }
56
+ ; CHECK-V1-NOT: r[[#]] /= 15
57
+ ; CHECK-V4-NOT: w[[#]] /= 15
Original file line number Diff line number Diff line change 2
2
; RUN: FileCheck %s < %t1
3
3
; CHECK: unsupported signed division
4
4
5
- define i32 @test (i32 %len ) {
6
- %1 = srem i32 %len , 15
7
- ret i32 %1
5
+ define i64 @test (i64 %len ) {
6
+ %1 = srem i64 %len , 15
7
+ ret i64 %1
8
8
}
You can’t perform that action at this time.
0 commit comments