Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: test/NaCl/ARM/divrem-guards-complex.ll

Issue 14607004: Insert denominator zero checks for NaCl (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Add more complex control flow test. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/NaCl/ARM/divrem-guards.ll ('k') | tools/opt/opt.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 ; RUN: opt < %s -insert-divide-check -S | FileCheck -check-prefix=OPT %s
2
3 declare void @foo()
4
5 ; Check for multiple divs that occur one block.
6 define i32 @twodivs_one_block(i32 %x, i32 %y) #0 {
7 entry:
8 call void @foo()
9 br label %divblock
10 divblock:
11 %div1 = sdiv i32 %x, %y
12 %div2 = sdiv i32 %x, %y
13 ; OPT: %0 = icmp eq i32 %y, 0
14 ; OPT-NEXT: br i1 %0, label %divrem.by.zero, label %guarded.divrem
15 ; OPT: guarded.divrem:
16 ; OPT-NEXT: sdiv
17 ; OPT: %1 = icmp eq i32 %y, 0
18 ; OPT-NEXT: br i1 %1, label %divrem.by.zero1, label %guarded.divrem2
19 ; OPT: guarded.divrem2:
20 ; OPT-NEXT: sdiv
21 ; OPT-NEXT: add
22 ; OPT: divrem.by.zero:
23 ; OPT-NEXT: call void @llvm.trap()
24 ; OPT-NEXT: unreachable
25 ; OPT: divrem.by.zero1:
26 ; OPT-NEXT: call void @llvm.trap()
27 ; OPT-NEXT: unreachable
28 %sum = add i32 %div1, %div2
29 ret i32 %sum
30 }
31
32 define i32 @twodivs_three_blocks(i32 %x, i32 %y) #0 {
33 entry:
34 call void @foo()
35 br label %divblock
36 divblock:
37 %div1 = sdiv i32 %x, %y
38 ; OPT: %0 = icmp eq i32 %y, 0
39 ; OPT-NEXT: br i1 %0, label %divrem.by.zero, label %guarded.divrem
40 ; OPT: guarded.divrem:
41 ; OPT-NEXT: sdiv
42 ; OPT-NEXT: br label %exitblock
43 br label %exitblock
44 exitblock:
45 call void @foo()
46 %div2 = sdiv i32 %x, %y
47 ; OPT: %1 = icmp eq i32 %y, 0
48 ; OPT-NEXT: br i1 %1, label %divrem.by.zero1, label %guarded.divrem2
49 ; OPT: guarded.divrem2:
50 ; OPT-NEXT: sdiv
51 ; OPT-NEXT: add
52 ; OPT: divrem.by.zero:
53 ; OPT-NEXT: call void @llvm.trap()
54 ; OPT-NEXT: unreachable
55 ; OPT: divrem.by.zero1:
56 ; OPT-NEXT: call void @llvm.trap()
57 ; OPT-NEXT: unreachable
58 %sum = add i32 %div1, %div2
59 ret i32 %sum
60 }
61
62 ; Check for divs that occur in blocks with multiple predecessors.
63 define i32 @onediv_two_predecessors(i32 %x, i32 %y) #0 {
64 entry:
65 call void @foo()
66 br label %divblock
67 divblock:
68 %x1 = phi i32 [%x, %entry], [%x2, %divblock]
69 %div1 = sdiv i32 %x, %y
70 ; OPT: %0 = icmp eq i32 %y, 0
71 ; OPT-NEXT: br i1 %0, label %divrem.by.zero, label %guarded.divrem
72 ; OPT: guarded.divrem:
73 ; OPT-NEXT: sdiv
74 ; OPT-NEXT: sub
75 ; OPT: divrem.by.zero:
76 ; OPT-NEXT: call void @llvm.trap()
77 ; OPT-NEXT: unreachable
78 %x2 = sub i32 %x1, 1
79 %p = icmp ne i32 %x2, 0
80 br i1 %p, label %divblock, label %exitblock
81 exitblock:
82 call void @foo()
83 ret i32 %div1
84 }
85
OLDNEW
« no previous file with comments | « test/NaCl/ARM/divrem-guards.ll ('k') | tools/opt/opt.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698