Skip to content

Commit 5e7f7a4

Browse files
authored
ARM: Add fp128 ldexp tests (#166619)
1 parent 6986f12 commit 5e7f7a4

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc -mtriple=armv7-unknown-linux < %s | FileCheck -check-prefix=LINUX %s
3+
4+
define fp128 @testExpl(fp128 %val, i32 %a) {
5+
; LINUX-LABEL: testExpl:
6+
; LINUX: @ %bb.0:
7+
; LINUX-NEXT: push {r11, lr}
8+
; LINUX-NEXT: sub sp, sp, #8
9+
; LINUX-NEXT: ldr r12, [sp, #16]
10+
; LINUX-NEXT: str r12, [sp]
11+
; LINUX-NEXT: bl ldexpl
12+
; LINUX-NEXT: add sp, sp, #8
13+
; LINUX-NEXT: pop {r11, pc}
14+
%call = tail call fp128 @ldexpl(fp128 %val, i32 %a)
15+
ret fp128 %call
16+
}
17+
18+
declare fp128 @ldexpl(fp128, i32) memory(none)
19+
20+
define fp128 @test_ldexp_f128_i32(fp128 %val, i32 %a) {
21+
; LINUX-LABEL: test_ldexp_f128_i32:
22+
; LINUX: @ %bb.0:
23+
; LINUX-NEXT: push {r11, lr}
24+
; LINUX-NEXT: sub sp, sp, #8
25+
; LINUX-NEXT: ldr r12, [sp, #16]
26+
; LINUX-NEXT: str r12, [sp]
27+
; LINUX-NEXT: bl ldexpl
28+
; LINUX-NEXT: add sp, sp, #8
29+
; LINUX-NEXT: pop {r11, pc}
30+
%call = tail call fp128 @llvm.ldexp.f128.i32(fp128 %val, i32 %a)
31+
ret fp128 %call
32+
}
33+
34+
define <2 x fp128> @test_ldexp_v2f128_v2i32(<2 x fp128> %val, <2 x i32> %a) {
35+
; LINUX-LABEL: test_ldexp_v2f128_v2i32:
36+
; LINUX: @ %bb.0:
37+
; LINUX-NEXT: push {r4, r5, r6, lr}
38+
; LINUX-NEXT: vpush {d8}
39+
; LINUX-NEXT: sub sp, sp, #8
40+
; LINUX-NEXT: mov r5, r3
41+
; LINUX-NEXT: add r3, sp, #40
42+
; LINUX-NEXT: mov r6, r2
43+
; LINUX-NEXT: mov r4, r0
44+
; LINUX-NEXT: ldm r3, {r0, r1, r2, r3}
45+
; LINUX-NEXT: vldr d8, [sp, #56]
46+
; LINUX-NEXT: vst1.32 {d8[1]}, [sp:32]
47+
; LINUX-NEXT: bl ldexpl
48+
; LINUX-NEXT: ldr r12, [sp, #32]
49+
; LINUX-NEXT: vst1.32 {d8[0]}, [sp:32]
50+
; LINUX-NEXT: ldr lr, [sp, #36]
51+
; LINUX-NEXT: str r0, [r4, #16]
52+
; LINUX-NEXT: mov r0, r6
53+
; LINUX-NEXT: str r1, [r4, #20]
54+
; LINUX-NEXT: mov r1, r5
55+
; LINUX-NEXT: str r2, [r4, #24]
56+
; LINUX-NEXT: mov r2, r12
57+
; LINUX-NEXT: str r3, [r4, #28]
58+
; LINUX-NEXT: mov r3, lr
59+
; LINUX-NEXT: bl ldexpl
60+
; LINUX-NEXT: stm r4, {r0, r1, r2, r3}
61+
; LINUX-NEXT: add sp, sp, #8
62+
; LINUX-NEXT: vpop {d8}
63+
; LINUX-NEXT: pop {r4, r5, r6, pc}
64+
%call = tail call <2 x fp128> @llvm.ldexp.v2f128.v2i32(<2 x fp128> %val, <2 x i32> %a)
65+
ret <2 x fp128> %call
66+
}

0 commit comments

Comments
 (0)