xref: /llvm-project/llvm/test/CodeGen/ARM/tail-call-builtin.ll (revision a7ade33d163f1aee55abfec1877fe34fc4271229)
1b49a8a9dSTim Northover; RUN: llc -mtriple=thumbv7-linux-gnueabihf %s -o - | FileCheck %s
2b49a8a9dSTim Northover
3*a7ade33dSSaleem Abdulrasooldefine i64 @test_mismatched_call(double %in) {
4b49a8a9dSTim Northover; CHECK-LABEL: test_mismatched_call:
5a6519b1dSSaleem Abdulrasool; CHECK: bl floor
6*a7ade33dSSaleem Abdulrasool; CHECK: vmov r0, r1, d0
7b49a8a9dSTim Northover
8*a7ade33dSSaleem Abdulrasool  %val = tail call double @floor(double %in)
9b49a8a9dSTim Northover  %res = bitcast double %val to i64
10b49a8a9dSTim Northover  ret i64 %res
11b49a8a9dSTim Northover}
12b49a8a9dSTim Northover
13*a7ade33dSSaleem Abdulrasooldefine double @test_matched_call(double %in) {
14b49a8a9dSTim Northover; CHECK-LABEL: test_matched_call:
15*a7ade33dSSaleem Abdulrasool; CHECK: b floor
16b49a8a9dSTim Northover
17*a7ade33dSSaleem Abdulrasool  %val = tail call double @floor(double %in)
18b49a8a9dSTim Northover  ret double %val
19b49a8a9dSTim Northover}
20b49a8a9dSTim Northover
21*a7ade33dSSaleem Abdulrasooldefine void @test_irrelevant_call(double %in) {
22b49a8a9dSTim Northover; CHECK-LABEL: test_irrelevant_call:
23b49a8a9dSTim Northover; CHECK-NOT: bl floor
24b49a8a9dSTim Northover
25*a7ade33dSSaleem Abdulrasool  %val = tail call double @floor(double %in)
26b49a8a9dSTim Northover  ret void
27b49a8a9dSTim Northover}
28b49a8a9dSTim Northover
29*a7ade33dSSaleem Abdulrasooldefine arm_aapcscc double @test_callingconv(double %in) {
30b49a8a9dSTim Northover; CHECK: test_callingconv:
31b49a8a9dSTim Northover; CHECK: bl floor
32b49a8a9dSTim Northover
33*a7ade33dSSaleem Abdulrasool  %val = tail call double @floor(double %in)
34b49a8a9dSTim Northover  ret double %val
35b49a8a9dSTim Northover}
36b49a8a9dSTim Northover
37*a7ade33dSSaleem Abdulrasooldeclare double @floor(double) nounwind readonly
38