diff options
Diffstat (limited to 'test/CodeGen/ARM64/SafeDivRemIntrinsics-Opts.ll')
-rw-r--r-- | test/CodeGen/ARM64/SafeDivRemIntrinsics-Opts.ll | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/test/CodeGen/ARM64/SafeDivRemIntrinsics-Opts.ll b/test/CodeGen/ARM64/SafeDivRemIntrinsics-Opts.ll new file mode 100644 index 0000000000..c5ab293503 --- /dev/null +++ b/test/CodeGen/ARM64/SafeDivRemIntrinsics-Opts.ll @@ -0,0 +1,83 @@ +; RUN: llc < %s -march=arm64 | FileCheck %s +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" + +%divovf32 = type { i32, i1 } + +declare %divovf32 @llvm.safe.sdiv.i32(i32, i32) nounwind readnone +declare %divovf32 @llvm.safe.udiv.i32(i32, i32) nounwind readnone + +; CHECK-LABEL: sdiv32_results_unused +; CHECK: entry +; CHECK-NEXT: ret +define void @sdiv32_results_unused(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y) + ret void +} + +; CHECK-LABEL: sdiv32_div_result_unused +; CHECK-NOT: sdiv{{[ ]}} +define i1 @sdiv32_div_result_unused(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y) + %bit = extractvalue %divovf32 %divr, 1 + ret i1 %bit +} + +; CHECK-LABEL: sdiv32_flag_result_unused +; CHECK-NOT: cb +; CHECK: sdiv{{[ ]}} +define i32 @sdiv32_flag_result_unused(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y) + %div = extractvalue %divovf32 %divr, 0 + ret i32 %div +} + +; CHECK-LABEL: sdiv32_result_returned +; CHECK: sdiv{{[ ]}} +define %divovf32 @sdiv32_result_returned(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.sdiv.i32(i32 %x, i32 %y) + ret %divovf32 %divr +} + +; CHECK-LABEL: udiv32_results_unused +; CHECK: entry +; CHECK-NEXT: ret +define void @udiv32_results_unused(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y) + ret void +} + +; CHECK-LABEL: udiv32_div_result_unused +; CHECK-NOT: udiv{{[ ]}} +define i1 @udiv32_div_result_unused(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y) + %bit = extractvalue %divovf32 %divr, 1 + ret i1 %bit +} + +; CHECK-LABEL: udiv32_flag_result_unused +; CHECK-NOT: cb +; CHECK: udiv{{[ ]}} +define i32 @udiv32_flag_result_unused(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y) + %div = extractvalue %divovf32 %divr, 0 + ret i32 %div +} + +; CHECK-LABEL: udiv32_result_returned +; CHECK: udiv{{[ ]}} +define %divovf32 @udiv32_result_returned(i32 %x, i32 %y) { +entry: + %divr = call %divovf32 @llvm.safe.udiv.i32(i32 %x, i32 %y) + ret %divovf32 %divr +} + +!llvm.ident = !{!0} + +!0 = metadata !{metadata !"clang version 3.5.0 "} |