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