summaryrefslogtreecommitdiff
path: root/test/CodeGen/ARM/tail-call-builtin.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/ARM/tail-call-builtin.ll')
-rw-r--r--test/CodeGen/ARM/tail-call-builtin.ll37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/CodeGen/ARM/tail-call-builtin.ll b/test/CodeGen/ARM/tail-call-builtin.ll
new file mode 100644
index 0000000000000..c829cc52462ee
--- /dev/null
+++ b/test/CodeGen/ARM/tail-call-builtin.ll
@@ -0,0 +1,37 @@
+; RUN: llc -mtriple=thumbv7-linux-gnueabihf %s -o - | FileCheck %s
+
+define i64 @test_mismatched_call(double %in) {
+; CHECK-LABEL: test_mismatched_call:
+; CHECK: bl floor
+; CHECK: vmov r0, r1, d0
+
+ %val = tail call double @floor(double %in)
+ %res = bitcast double %val to i64
+ ret i64 %res
+}
+
+define double @test_matched_call(double %in) {
+; CHECK-LABEL: test_matched_call:
+; CHECK: b floor
+
+ %val = tail call double @floor(double %in)
+ ret double %val
+}
+
+define void @test_irrelevant_call(double %in) {
+; CHECK-LABEL: test_irrelevant_call:
+; CHECK-NOT: bl floor
+
+ %val = tail call double @floor(double %in)
+ ret void
+}
+
+define arm_aapcscc double @test_callingconv(double %in) {
+; CHECK: test_callingconv:
+; CHECK: bl floor
+
+ %val = tail call double @floor(double %in)
+ ret double %val
+}
+
+declare double @floor(double) nounwind readonly