[asan] insert __asan_loadN/__asan_storeN as out-lined asan checks, llvm part
[oota-llvm.git] / test / CodeGen / ARM64 / SafeDivRemIntrinsics.ll
1 ; RUN: llc < %s -march=arm64 | FileCheck %s
2 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
3
4 %divovf8  = type { i8, i1 }
5 %divovf16 = type { i16, i1 }
6 %divovf32 = type { i32, i1 }
7 %divovf64 = type { i64, i1 }
8
9 declare %divovf8  @llvm.safe.sdiv.i8(i8, i8) nounwind readnone
10 declare %divovf16 @llvm.safe.sdiv.i16(i16, i16) nounwind readnone
11 declare %divovf32 @llvm.safe.sdiv.i32(i32, i32) nounwind readnone
12 declare %divovf64 @llvm.safe.sdiv.i64(i64, i64) nounwind readnone
13
14 declare %divovf8  @llvm.safe.srem.i8(i8, i8) nounwind readnone
15 declare %divovf16 @llvm.safe.srem.i16(i16, i16) nounwind readnone
16 declare %divovf32 @llvm.safe.srem.i32(i32, i32) nounwind readnone
17 declare %divovf64 @llvm.safe.srem.i64(i64, i64) nounwind readnone
18
19 declare %divovf8  @llvm.safe.udiv.i8(i8, i8) nounwind readnone
20 declare %divovf16 @llvm.safe.udiv.i16(i16, i16) nounwind readnone
21 declare %divovf32 @llvm.safe.udiv.i32(i32, i32) nounwind readnone
22 declare %divovf64 @llvm.safe.udiv.i64(i64, i64) nounwind readnone
23
24 declare %divovf8  @llvm.safe.urem.i8(i8, i8) nounwind readnone
25 declare %divovf16 @llvm.safe.urem.i16(i16, i16) nounwind readnone
26 declare %divovf32 @llvm.safe.urem.i32(i32, i32) nounwind readnone
27 declare %divovf64 @llvm.safe.urem.i64(i64, i64) nounwind readnone
28
29 ; CHECK-LABEL: sdiv8
30 ; CHECK: sdiv{{[        ]}} 
31 define %divovf8 @sdiv8(i8 %x, i8 %y) {
32 entry:
33   %divr = call %divovf8 @llvm.safe.sdiv.i8(i8 %x, i8 %y)
34   ret %divovf8 %divr
35 }
36 ; CHECK-LABEL: sdiv16
37 ; CHECK: sdiv{{[        ]}} 
38 define %divovf16 @sdiv16(i16 %x, i16 %y) {
39 entry:
40   %divr = call %divovf16 @llvm.safe.sdiv.i16(i16 %x, i16 %y)
41   ret %divovf16 %divr
42 }
43 ; CHECK-LABEL: sdiv32
44 ; CHECK: sdiv{{[        ]}} 
45 define %divovf32 @sdiv32(i32 %x, i32 %y) {
46 entry:
47   %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
48   ret %divovf32 %divr
49 }
50 ; CHECK-LABEL: sdiv64
51 ; CHECK: sdiv{{[        ]}} 
52 define %divovf64 @sdiv64(i64 %x, i64 %y) {
53 entry:
54   %divr = call %divovf64 @llvm.safe.sdiv.i64(i64 %x, i64 %y)
55   ret %divovf64 %divr
56 }
57 ; CHECK-LABEL: udiv8
58 ; CHECK: udiv{{[        ]}} 
59 define %divovf8 @udiv8(i8 %x, i8 %y) {
60 entry:
61   %divr = call %divovf8 @llvm.safe.udiv.i8(i8 %x, i8 %y)
62   ret %divovf8 %divr
63 }
64 ; CHECK-LABEL: udiv16
65 ; CHECK: udiv{{[        ]}} 
66 define %divovf16 @udiv16(i16 %x, i16 %y) {
67 entry:
68   %divr = call %divovf16 @llvm.safe.udiv.i16(i16 %x, i16 %y)
69   ret %divovf16 %divr
70 }
71 ; CHECK-LABEL: udiv32
72 ; CHECK: udiv{{[        ]}} 
73 define %divovf32 @udiv32(i32 %x, i32 %y) {
74 entry:
75   %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
76   ret %divovf32 %divr
77 }
78 ; CHECK-LABEL: udiv64
79 ; CHECK: udiv{{[        ]}} 
80 define %divovf64 @udiv64(i64 %x, i64 %y) {
81 entry:
82   %divr = call %divovf64 @llvm.safe.udiv.i64(i64 %x, i64 %y)
83   ret %divovf64 %divr
84 }
85 ; CHECK-LABEL: srem8
86 ; CHECK: sdiv{{[        ]}} 
87 ; CHECK: msub{{[        ]}} 
88 define %divovf8 @srem8(i8 %x, i8 %y) {
89 entry:
90   %remr = call %divovf8 @llvm.safe.srem.i8(i8 %x, i8 %y)
91   ret %divovf8 %remr
92 }
93 ; CHECK-LABEL: srem16
94 ; CHECK: sdiv{{[        ]}} 
95 ; CHECK: msub{{[        ]}} 
96 define %divovf16 @srem16(i16 %x, i16 %y) {
97 entry:
98   %remr = call %divovf16 @llvm.safe.srem.i16(i16 %x, i16 %y)
99   ret %divovf16 %remr
100 }
101 ; CHECK-LABEL: srem32
102 ; CHECK: sdiv{{[        ]}} 
103 ; CHECK: msub{{[        ]}} 
104 define %divovf32 @srem32(i32 %x, i32 %y) {
105 entry:
106   %remr = call %divovf32 @llvm.safe.srem.i32(i32 %x, i32 %y)
107   ret %divovf32 %remr
108 }
109 ; CHECK-LABEL: srem64
110 ; CHECK: sdiv{{[        ]}} 
111 ; CHECK: msub{{[        ]}} 
112 define %divovf64 @srem64(i64 %x, i64 %y) {
113 entry:
114   %remr = call %divovf64 @llvm.safe.srem.i64(i64 %x, i64 %y)
115   ret %divovf64 %remr
116 }
117 ; CHECK-LABEL: urem8
118 ; CHECK: udiv{{[        ]}} 
119 ; CHECK: msub{{[        ]}} 
120 define %divovf8 @urem8(i8 %x, i8 %y) {
121 entry:
122   %remr = call %divovf8 @llvm.safe.urem.i8(i8 %x, i8 %y)
123   ret %divovf8 %remr
124 }
125 ; CHECK-LABEL: urem16
126 ; CHECK: udiv{{[        ]}} 
127 ; CHECK: msub{{[        ]}} 
128 define %divovf16 @urem16(i16 %x, i16 %y) {
129 entry:
130   %remr = call %divovf16 @llvm.safe.urem.i16(i16 %x, i16 %y)
131   ret %divovf16 %remr
132 }
133 ; CHECK-LABEL: urem32
134 ; CHECK: udiv{{[        ]}} 
135 ; CHECK: msub{{[        ]}} 
136 define %divovf32 @urem32(i32 %x, i32 %y) {
137 entry:
138   %remr = call %divovf32 @llvm.safe.urem.i32(i32 %x, i32 %y)
139   ret %divovf32 %remr
140 }
141 ; CHECK-LABEL: urem64
142 ; CHECK: udiv{{[        ]}} 
143 ; CHECK: msub{{[        ]}} 
144 define %divovf64 @urem64(i64 %x, i64 %y) {
145 entry:
146   %remr = call %divovf64 @llvm.safe.urem.i64(i64 %x, i64 %y)
147   ret %divovf64 %remr
148 }
149
150 !llvm.ident = !{!0}
151
152 !0 = metadata !{metadata !"clang version 3.5.0 "}