[asan] insert __asan_loadN/__asan_storeN as out-lined asan checks, llvm part
[oota-llvm.git] / test / CodeGen / ARM64 / SafeDivRemIntrinsics-Opts.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 %divovf32 = type { i32, i1 }
5
6 declare %divovf32 @llvm.safe.sdiv.i32(i32, i32) nounwind readnone
7 declare %divovf32 @llvm.safe.udiv.i32(i32, i32) nounwind readnone
8
9 ; CHECK-LABEL: sdiv32_results_unused
10 ; CHECK: entry
11 ; CHECK-NEXT: ret
12 define void @sdiv32_results_unused(i32 %x, i32 %y) {
13 entry:
14   %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
15   ret void
16 }
17
18 ; CHECK-LABEL: sdiv32_div_result_unused
19 ; CHECK-NOT: sdiv{{[     ]}}
20 define i1 @sdiv32_div_result_unused(i32 %x, i32 %y) {
21 entry:
22   %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
23   %bit = extractvalue %divovf32 %divr, 1
24   ret i1 %bit
25 }
26
27 ; CHECK-LABEL: sdiv32_flag_result_unused
28 ; CHECK-NOT: cb
29 ; CHECK: sdiv{{[         ]}}
30 define i32 @sdiv32_flag_result_unused(i32 %x, i32 %y) {
31 entry:
32   %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
33   %div = extractvalue %divovf32 %divr, 0
34   ret i32 %div
35 }
36
37 ; CHECK-LABEL: sdiv32_result_returned
38 ; CHECK: sdiv{{[         ]}}
39 define %divovf32 @sdiv32_result_returned(i32 %x, i32 %y) {
40 entry:
41   %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
42   ret %divovf32 %divr
43 }
44
45 ; CHECK-LABEL: sdiv32_trap_relinked
46 ; CHECK-NOT: %div.divmin 
47 ; CHECK-NOT: %div.divz 
48 define i32 @sdiv32_trap_relinked(i32 %x, i32 %y) {
49 entry:
50   %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
51   %div = extractvalue %divovf32 %divr, 0
52   %bit = extractvalue %divovf32 %divr, 1
53   br i1 %bit, label %trap.bb, label %ok.bb
54 trap.bb:
55   ret i32 7
56 ok.bb:
57   ret i32 %div
58 }
59
60 ; CHECK-LABEL: udiv32_results_unused
61 ; CHECK: entry
62 ; CHECK-NEXT: ret
63 define void @udiv32_results_unused(i32 %x, i32 %y) {
64 entry:
65   %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
66   ret void
67 }
68
69 ; CHECK-LABEL: udiv32_div_result_unused
70 ; CHECK-NOT: udiv{{[     ]}}
71 define i1 @udiv32_div_result_unused(i32 %x, i32 %y) {
72 entry:
73   %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
74   %bit = extractvalue %divovf32 %divr, 1
75   ret i1 %bit
76 }
77
78 ; CHECK-LABEL: udiv32_flag_result_unused
79 ; CHECK-NOT: cb
80 ; CHECK: udiv{{[         ]}}
81 define i32 @udiv32_flag_result_unused(i32 %x, i32 %y) {
82 entry:
83   %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
84   %div = extractvalue %divovf32 %divr, 0
85   ret i32 %div
86 }
87
88 ; CHECK-LABEL: udiv32_result_returned
89 ; CHECK: udiv{{[         ]}}
90 define %divovf32 @udiv32_result_returned(i32 %x, i32 %y) {
91 entry:
92   %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
93   ret %divovf32 %divr
94 }
95
96 ; CHECK-LABEL: udiv32_trap_relinked
97 ; CHECK-NOT: %div.divz 
98 define i32 @udiv32_trap_relinked(i32 %x, i32 %y) {
99 entry:
100   %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
101   %div = extractvalue %divovf32 %divr, 0
102   %bit = extractvalue %divovf32 %divr, 1
103   br i1 %bit, label %trap.bb, label %ok.bb
104 trap.bb:
105   ret i32 7
106 ok.bb:
107   ret i32 %div
108 }
109
110 !llvm.ident = !{!0}
111
112 !0 = metadata !{metadata !"clang version 3.5.0 "}