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