xref: /llvm-project/llvm/test/CodeGen/ARM/ldexp.ll (revision 39a0aa5876c20ef245fc4065b9f512008fac91a6)
1; RUN: llc -mtriple=armv7-linux < %s -o - | FileCheck -check-prefix=LINUX %s
2; RUN: llc -mtriple=thumbv7-windows-msvc -mattr=+thumb-mode < %s -o - | FileCheck -check-prefix=WINDOWS %s
3
4define double @testExp(double %val, i32 %a) {
5; LINUX:    b ldexp{{$}}
6; WINDOWS:  b.w ldexp{{$}}
7entry:
8  %call = tail call fast double @ldexp(double %val, i32 %a)
9  ret double %call
10}
11
12declare double @ldexp(double, i32) memory(none)
13
14define double @testExpIntrinsic(double %val, i32 %a) {
15; LINUX:    b ldexp{{$}}
16; WINDOWS:  b.w ldexp{{$}}
17entry:
18  %call = tail call fast double @llvm.ldexp.f64(double %val, i32 %a)
19  ret double %call
20}
21
22define float @testExpf(float %val, i32 %a) {
23; LINUX:    b ldexpf
24; WINDOWS:  b.w ldexpf
25entry:
26  %call = tail call fast float @ldexpf(float %val, i32 %a)
27  ret float %call
28}
29
30define float @testExpfIntrinsic(float %val, i32 %a) {
31; LINUX:    b ldexpf
32; WINDOWS:  bl ldexp{{$}}
33entry:
34  %call = tail call fast float @llvm.ldexp.f32(float %val, i32 %a)
35  ret float %call
36}
37
38declare float @ldexpf(float, i32) memory(none)
39
40define fp128 @testExpl(fp128 %val, i32 %a) {
41; LINUX:    bl ldexpl
42; WINDOWS:    b.w ldexpl
43entry:
44  %call = tail call fast fp128 @ldexpl(fp128 %val, i32 %a)
45  ret fp128 %call
46}
47
48declare fp128 @ldexpl(fp128, i32) memory(none)
49
50define half @testExpf16(half %val, i32 %a) {
51; LINUX: bl ldexpf
52; WINDOWS: bl ldexp{{$}}
53entry:
54  %0 = tail call fast half @llvm.ldexp.f16.i32(half %val, i32 %a)
55  ret half %0
56}
57
58declare half @llvm.ldexp.f16.i32(half, i32) memory(none)
59