22; RUN: llc -mtriple=aarch64-gnu-linux < %s | FileCheck -check-prefixes=CHECK %s
33; RUN: llc -mtriple=aarch64-none-linux < %s | FileCheck -check-prefixes=NO-LIBCALL %s
44
5- define { half , half } @test_sincos_f16 (half %a ) {
5+ define { half , half } @test_sincos_f16 (half %a ) nounwind {
66; CHECK-LABEL: test_sincos_f16:
77; CHECK: // %bb.0:
88; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
9- ; CHECK-NEXT: .cfi_def_cfa_offset 16
10- ; CHECK-NEXT: .cfi_offset w30, -16
119; CHECK-NEXT: fcvt s0, h0
1210; CHECK-NEXT: add x0, sp, #12
1311; CHECK-NEXT: add x1, sp, #8
@@ -21,12 +19,8 @@ define { half, half } @test_sincos_f16(half %a) {
2119; NO-LIBCALL-LABEL: test_sincos_f16:
2220; NO-LIBCALL: // %bb.0:
2321; NO-LIBCALL-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
24- ; NO-LIBCALL-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
25- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 32
26- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
27- ; NO-LIBCALL-NEXT: .cfi_offset b8, -24
28- ; NO-LIBCALL-NEXT: .cfi_offset b9, -32
2922; NO-LIBCALL-NEXT: fcvt s8, h0
23+ ; NO-LIBCALL-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
3024; NO-LIBCALL-NEXT: fmov s0, s8
3125; NO-LIBCALL-NEXT: bl sinf
3226; NO-LIBCALL-NEXT: fcvt h9, s0
@@ -42,12 +36,10 @@ define { half, half } @test_sincos_f16(half %a) {
4236 ret { half , half } %result
4337}
4438
45- define half @test_sincos_f16_only_use_sin (half %a ) {
39+ define half @test_sincos_f16_only_use_sin (half %a ) nounwind {
4640; CHECK-LABEL: test_sincos_f16_only_use_sin:
4741; CHECK: // %bb.0:
4842; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
49- ; CHECK-NEXT: .cfi_def_cfa_offset 16
50- ; CHECK-NEXT: .cfi_offset w30, -16
5143; CHECK-NEXT: fcvt s0, h0
5244; CHECK-NEXT: add x0, sp, #12
5345; CHECK-NEXT: add x1, sp, #8
@@ -60,8 +52,6 @@ define half @test_sincos_f16_only_use_sin(half %a) {
6052; NO-LIBCALL-LABEL: test_sincos_f16_only_use_sin:
6153; NO-LIBCALL: // %bb.0:
6254; NO-LIBCALL-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
63- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 16
64- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
6555; NO-LIBCALL-NEXT: fcvt s0, h0
6656; NO-LIBCALL-NEXT: bl sinf
6757; NO-LIBCALL-NEXT: fcvt h0, s0
@@ -72,12 +62,10 @@ define half @test_sincos_f16_only_use_sin(half %a) {
7262 ret half %result.0
7363}
7464
75- define half @test_sincos_f16_only_use_cos (half %a ) {
65+ define half @test_sincos_f16_only_use_cos (half %a ) nounwind {
7666; CHECK-LABEL: test_sincos_f16_only_use_cos:
7767; CHECK: // %bb.0:
7868; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
79- ; CHECK-NEXT: .cfi_def_cfa_offset 16
80- ; CHECK-NEXT: .cfi_offset w30, -16
8169; CHECK-NEXT: fcvt s0, h0
8270; CHECK-NEXT: add x0, sp, #12
8371; CHECK-NEXT: add x1, sp, #8
@@ -90,8 +78,6 @@ define half @test_sincos_f16_only_use_cos(half %a) {
9078; NO-LIBCALL-LABEL: test_sincos_f16_only_use_cos:
9179; NO-LIBCALL: // %bb.0:
9280; NO-LIBCALL-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
93- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 16
94- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
9581; NO-LIBCALL-NEXT: fcvt s0, h0
9682; NO-LIBCALL-NEXT: bl cosf
9783; NO-LIBCALL-NEXT: fcvt h0, s0
@@ -102,18 +88,16 @@ define half @test_sincos_f16_only_use_cos(half %a) {
10288 ret half %result.1
10389}
10490
105- define { <2 x half >, <2 x half > } @test_sincos_v2f16 (<2 x half > %a ) {
91+ define { <2 x half >, <2 x half > } @test_sincos_v2f16 (<2 x half > %a ) nounwind {
10692; CHECK-LABEL: test_sincos_v2f16:
10793; CHECK: // %bb.0:
10894; CHECK-NEXT: sub sp, sp, #64
109- ; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
110- ; CHECK-NEXT: .cfi_def_cfa_offset 64
111- ; CHECK-NEXT: .cfi_offset w30, -16
11295; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
11396; CHECK-NEXT: mov h1, v0.h[1]
11497; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
11598; CHECK-NEXT: add x0, sp, #36
11699; CHECK-NEXT: add x1, sp, #32
100+ ; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
117101; CHECK-NEXT: fcvt s0, h1
118102; CHECK-NEXT: bl sincosf
119103; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
@@ -160,18 +144,12 @@ define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) {
160144; NO-LIBCALL-LABEL: test_sincos_v2f16:
161145; NO-LIBCALL: // %bb.0:
162146; NO-LIBCALL-NEXT: sub sp, sp, #80
163- ; NO-LIBCALL-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill
164- ; NO-LIBCALL-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
165- ; NO-LIBCALL-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
166- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 80
167- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
168- ; NO-LIBCALL-NEXT: .cfi_offset b8, -24
169- ; NO-LIBCALL-NEXT: .cfi_offset b9, -32
170- ; NO-LIBCALL-NEXT: .cfi_offset b10, -40
171- ; NO-LIBCALL-NEXT: .cfi_offset b11, -48
172147; NO-LIBCALL-NEXT: // kill: def $d0 killed $d0 def $q0
173148; NO-LIBCALL-NEXT: mov h1, v0.h[1]
149+ ; NO-LIBCALL-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
174150; NO-LIBCALL-NEXT: str q0, [sp] // 16-byte Folded Spill
151+ ; NO-LIBCALL-NEXT: stp d11, d10, [sp, #32] // 16-byte Folded Spill
152+ ; NO-LIBCALL-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
175153; NO-LIBCALL-NEXT: fcvt s8, h1
176154; NO-LIBCALL-NEXT: fmov s0, s8
177155; NO-LIBCALL-NEXT: bl sinf
@@ -237,12 +215,10 @@ define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) {
237215 ret { <2 x half >, <2 x half > } %result
238216}
239217
240- define { float , float } @test_sincos_f32 (float %a ) {
218+ define { float , float } @test_sincos_f32 (float %a ) nounwind {
241219; CHECK-LABEL: test_sincos_f32:
242220; CHECK: // %bb.0:
243221; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
244- ; CHECK-NEXT: .cfi_def_cfa_offset 16
245- ; CHECK-NEXT: .cfi_offset w30, -16
246222; CHECK-NEXT: add x0, sp, #12
247223; CHECK-NEXT: add x1, sp, #8
248224; CHECK-NEXT: bl sincosf
@@ -254,10 +230,6 @@ define { float, float } @test_sincos_f32(float %a) {
254230; NO-LIBCALL: // %bb.0:
255231; NO-LIBCALL-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
256232; NO-LIBCALL-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
257- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 32
258- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
259- ; NO-LIBCALL-NEXT: .cfi_offset b8, -24
260- ; NO-LIBCALL-NEXT: .cfi_offset b9, -32
261233; NO-LIBCALL-NEXT: fmov s8, s0
262234; NO-LIBCALL-NEXT: bl sinf
263235; NO-LIBCALL-NEXT: fmov s9, s0
@@ -272,21 +244,15 @@ define { float, float } @test_sincos_f32(float %a) {
272244 ret { float , float } %result
273245}
274246
275- define { <3 x float >, <3 x float > } @test_sincos_v3f32 (<3 x float > %a ) {
247+ define { <3 x float >, <3 x float > } @test_sincos_v3f32 (<3 x float > %a ) nounwind {
276248; CHECK-LABEL: test_sincos_v3f32:
277249; CHECK: // %bb.0:
278250; CHECK-NEXT: sub sp, sp, #80
251+ ; CHECK-NEXT: add x0, sp, #20
252+ ; CHECK-NEXT: add x1, sp, #16
279253; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill
280254; CHECK-NEXT: stp x22, x21, [sp, #48] // 16-byte Folded Spill
281255; CHECK-NEXT: stp x20, x19, [sp, #64] // 16-byte Folded Spill
282- ; CHECK-NEXT: .cfi_def_cfa_offset 80
283- ; CHECK-NEXT: .cfi_offset w19, -8
284- ; CHECK-NEXT: .cfi_offset w20, -16
285- ; CHECK-NEXT: .cfi_offset w21, -24
286- ; CHECK-NEXT: .cfi_offset w22, -32
287- ; CHECK-NEXT: .cfi_offset w30, -48
288- ; CHECK-NEXT: add x0, sp, #20
289- ; CHECK-NEXT: add x1, sp, #16
290256; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
291257; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
292258; CHECK-NEXT: bl sincosf
@@ -319,13 +285,9 @@ define { <3 x float>, <3 x float> } @test_sincos_v3f32(<3 x float> %a) {
319285; NO-LIBCALL: // %bb.0:
320286; NO-LIBCALL-NEXT: sub sp, sp, #80
321287; NO-LIBCALL-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
322- ; NO-LIBCALL-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
323- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 80
324- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
325- ; NO-LIBCALL-NEXT: .cfi_offset b8, -24
326- ; NO-LIBCALL-NEXT: .cfi_offset b9, -32
327288; NO-LIBCALL-NEXT: mov s8, v0.s[1]
328289; NO-LIBCALL-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
290+ ; NO-LIBCALL-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
329291; NO-LIBCALL-NEXT: fmov s0, s8
330292; NO-LIBCALL-NEXT: bl sinf
331293; NO-LIBCALL-NEXT: // kill: def $s0 killed $s0 def $q0
@@ -369,19 +331,15 @@ define { <3 x float>, <3 x float> } @test_sincos_v3f32(<3 x float> %a) {
369331 ret { <3 x float >, <3 x float > } %result
370332}
371333
372- define { <2 x float >, <2 x float > } @test_sincos_v2f32 (<2 x float > %a ) {
334+ define { <2 x float >, <2 x float > } @test_sincos_v2f32 (<2 x float > %a ) nounwind {
373335; CHECK-LABEL: test_sincos_v2f32:
374336; CHECK: // %bb.0:
375337; CHECK-NEXT: sub sp, sp, #64
376- ; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill
377- ; CHECK-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill
378- ; CHECK-NEXT: .cfi_def_cfa_offset 64
379- ; CHECK-NEXT: .cfi_offset w19, -8
380- ; CHECK-NEXT: .cfi_offset w20, -16
381- ; CHECK-NEXT: .cfi_offset w30, -32
382338; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
383339; CHECK-NEXT: add x0, sp, #44
384340; CHECK-NEXT: add x1, sp, #40
341+ ; CHECK-NEXT: str x30, [sp, #32] // 8-byte Folded Spill
342+ ; CHECK-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill
385343; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
386344; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
387345; CHECK-NEXT: bl sincosf
@@ -406,13 +364,10 @@ define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) {
406364; NO-LIBCALL: // %bb.0:
407365; NO-LIBCALL-NEXT: sub sp, sp, #64
408366; NO-LIBCALL-NEXT: str d8, [sp, #48] // 8-byte Folded Spill
409- ; NO-LIBCALL-NEXT: str x30, [sp, #56] // 8-byte Folded Spill
410- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 64
411- ; NO-LIBCALL-NEXT: .cfi_offset w30, -8
412- ; NO-LIBCALL-NEXT: .cfi_offset b8, -16
413367; NO-LIBCALL-NEXT: // kill: def $d0 killed $d0 def $q0
414368; NO-LIBCALL-NEXT: mov s8, v0.s[1]
415369; NO-LIBCALL-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
370+ ; NO-LIBCALL-NEXT: str x30, [sp, #56] // 8-byte Folded Spill
416371; NO-LIBCALL-NEXT: fmov s0, s8
417372; NO-LIBCALL-NEXT: bl sinf
418373; NO-LIBCALL-NEXT: // kill: def $s0 killed $s0 def $q0
@@ -444,15 +399,13 @@ define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) {
444399 ret { <2 x float >, <2 x float > } %result
445400}
446401
447- define { double , double } @test_sincos_f64 (double %a ) {
402+ define { double , double } @test_sincos_f64 (double %a ) nounwind {
448403; CHECK-LABEL: test_sincos_f64:
449404; CHECK: // %bb.0:
450405; CHECK-NEXT: sub sp, sp, #32
451- ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
452- ; CHECK-NEXT: .cfi_def_cfa_offset 32
453- ; CHECK-NEXT: .cfi_offset w30, -16
454406; CHECK-NEXT: add x0, sp, #24
455407; CHECK-NEXT: add x1, sp, #8
408+ ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
456409; CHECK-NEXT: bl sincos
457410; CHECK-NEXT: ldr d0, [sp, #24]
458411; CHECK-NEXT: ldr d1, [sp, #8]
@@ -464,10 +417,6 @@ define { double, double } @test_sincos_f64(double %a) {
464417; NO-LIBCALL: // %bb.0:
465418; NO-LIBCALL-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
466419; NO-LIBCALL-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
467- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 32
468- ; NO-LIBCALL-NEXT: .cfi_offset w30, -16
469- ; NO-LIBCALL-NEXT: .cfi_offset b8, -24
470- ; NO-LIBCALL-NEXT: .cfi_offset b9, -32
471420; NO-LIBCALL-NEXT: fmov d8, d0
472421; NO-LIBCALL-NEXT: bl sin
473422; NO-LIBCALL-NEXT: fmov d9, d0
@@ -482,18 +431,14 @@ define { double, double } @test_sincos_f64(double %a) {
482431 ret { double , double } %result
483432}
484433
485- define { <2 x double >, <2 x double > } @test_sincos_v2f64 (<2 x double > %a ) {
434+ define { <2 x double >, <2 x double > } @test_sincos_v2f64 (<2 x double > %a ) nounwind {
486435; CHECK-LABEL: test_sincos_v2f64:
487436; CHECK: // %bb.0:
488437; CHECK-NEXT: sub sp, sp, #80
489- ; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
490- ; CHECK-NEXT: stp x20, x19, [sp, #64] // 16-byte Folded Spill
491- ; CHECK-NEXT: .cfi_def_cfa_offset 80
492- ; CHECK-NEXT: .cfi_offset w19, -8
493- ; CHECK-NEXT: .cfi_offset w20, -16
494- ; CHECK-NEXT: .cfi_offset w30, -32
495438; CHECK-NEXT: add x0, sp, #56
496439; CHECK-NEXT: add x1, sp, #40
440+ ; CHECK-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
441+ ; CHECK-NEXT: stp x20, x19, [sp, #64] // 16-byte Folded Spill
497442; CHECK-NEXT: str q0, [sp] // 16-byte Folded Spill
498443; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
499444; CHECK-NEXT: bl sincos
@@ -517,12 +462,9 @@ define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) {
517462; NO-LIBCALL: // %bb.0:
518463; NO-LIBCALL-NEXT: sub sp, sp, #64
519464; NO-LIBCALL-NEXT: str d8, [sp, #48] // 8-byte Folded Spill
520- ; NO-LIBCALL-NEXT: str x30, [sp, #56] // 8-byte Folded Spill
521- ; NO-LIBCALL-NEXT: .cfi_def_cfa_offset 64
522- ; NO-LIBCALL-NEXT: .cfi_offset w30, -8
523- ; NO-LIBCALL-NEXT: .cfi_offset b8, -16
524465; NO-LIBCALL-NEXT: mov d8, v0.d[1]
525466; NO-LIBCALL-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
467+ ; NO-LIBCALL-NEXT: str x30, [sp, #56] // 8-byte Folded Spill
526468; NO-LIBCALL-NEXT: fmov d0, d8
527469; NO-LIBCALL-NEXT: bl sin
528470; NO-LIBCALL-NEXT: // kill: def $d0 killed $d0 def $q0
0 commit comments