1 ; RUN: llc < %s | FileCheck %s
2 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
4 %divovf8 = type { i8, i1 }
5 %divovf16 = type { i16, i1 }
6 %divovf32 = type { i32, i1 }
7 %divovf64 = type { i64, i1 }
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
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
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
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
31 define %divovf8 @sdiv8(i8 %x, i8 %y) {
33 %divr = call %divovf8 @llvm.safe.sdiv.i8(i8 %x, i8 %y)
38 define %divovf16 @sdiv16(i16 %x, i16 %y) {
40 %divr = call %divovf16 @llvm.safe.sdiv.i16(i16 %x, i16 %y)
45 define %divovf32 @sdiv32(i32 %x, i32 %y) {
47 %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y)
52 define %divovf64 @sdiv64(i64 %x, i64 %y) {
54 %divr = call %divovf64 @llvm.safe.sdiv.i64(i64 %x, i64 %y)
58 ; CHECK: {{[ ]}}divb{{[ ]}}
59 define %divovf8 @udiv8(i8 %x, i8 %y) {
61 %divr = call %divovf8 @llvm.safe.udiv.i8(i8 %x, i8 %y)
65 ; CHECK: {{[ ]}}divw{{[ ]}}
66 define %divovf16 @udiv16(i16 %x, i16 %y) {
68 %divr = call %divovf16 @llvm.safe.udiv.i16(i16 %x, i16 %y)
72 ; CHECK: {{[ ]}}divl{{[ ]}}
73 define %divovf32 @udiv32(i32 %x, i32 %y) {
75 %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y)
79 ; CHECK: {{[ ]}}divq{{[ ]}}
80 define %divovf64 @udiv64(i64 %x, i64 %y) {
82 %divr = call %divovf64 @llvm.safe.udiv.i64(i64 %x, i64 %y)
87 define %divovf8 @srem8(i8 %x, i8 %y) {
89 %remr = call %divovf8 @llvm.safe.srem.i8(i8 %x, i8 %y)
94 define %divovf16 @srem16(i16 %x, i16 %y) {
96 %remr = call %divovf16 @llvm.safe.srem.i16(i16 %x, i16 %y)
100 ; CHECK: idivl{{[ ]}}
101 define %divovf32 @srem32(i32 %x, i32 %y) {
103 %remr = call %divovf32 @llvm.safe.srem.i32(i32 %x, i32 %y)
106 ; CHECK-LABEL: srem64
107 ; CHECK: idivq{{[ ]}}
108 define %divovf64 @srem64(i64 %x, i64 %y) {
110 %remr = call %divovf64 @llvm.safe.srem.i64(i64 %x, i64 %y)
114 ; CHECK: {{[ ]}}divb{{[ ]}}
115 define %divovf8 @urem8(i8 %x, i8 %y) {
117 %remr = call %divovf8 @llvm.safe.urem.i8(i8 %x, i8 %y)
120 ; CHECK-LABEL: urem16
121 ; CHECK: {{[ ]}}divw{{[ ]}}
122 define %divovf16 @urem16(i16 %x, i16 %y) {
124 %remr = call %divovf16 @llvm.safe.urem.i16(i16 %x, i16 %y)
127 ; CHECK-LABEL: urem32
128 ; CHECK: {{[ ]}}divl{{[ ]}}
129 define %divovf32 @urem32(i32 %x, i32 %y) {
131 %remr = call %divovf32 @llvm.safe.urem.i32(i32 %x, i32 %y)
134 ; CHECK-LABEL: urem64
135 ; CHECK: {{[ ]}}divq{{[ ]}}
136 define %divovf64 @urem64(i64 %x, i64 %y) {
138 %remr = call %divovf64 @llvm.safe.urem.i64(i64 %x, i64 %y)
144 !0 = metadata !{metadata !"clang version 3.5.0 "}