@@ -36,6 +36,29 @@ entry:
36
36
ret half %c
37
37
}
38
38
39
+ define fp128 @powi_fp128 (fp128 %a , i32 %b ) {
40
+ ; CHECK-LABEL: powi_fp128:
41
+ ; CHECK: // %bb.0: // %entry
42
+ ; CHECK-NEXT: b __powitf2
43
+ entry:
44
+ %c = call fp128 @llvm.powi.fp128.i32 (fp128 %a , i32 %b )
45
+ ret fp128 %c
46
+ }
47
+
48
+ define <1 x double > @powi_v1f64 (<1 x double > %a , i32 %b ) {
49
+ ; CHECK-LABEL: powi_v1f64:
50
+ ; CHECK: // %bb.0: // %entry
51
+ ; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
52
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
53
+ ; CHECK-NEXT: .cfi_offset w30, -16
54
+ ; CHECK-NEXT: bl __powidf2
55
+ ; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
56
+ ; CHECK-NEXT: ret
57
+ entry:
58
+ %c = call <1 x double > @llvm.powi.v1f64.i32 (<1 x double > %a , i32 %b )
59
+ ret <1 x double > %c
60
+ }
61
+
39
62
define <2 x double > @powi_v2f64 (<2 x double > %a , i32 %b ) {
40
63
; CHECK-SD-LABEL: powi_v2f64:
41
64
; CHECK-SD: // %bb.0: // %entry
@@ -1406,9 +1429,56 @@ entry:
1406
1429
ret <16 x half > %c
1407
1430
}
1408
1431
1432
+ define <2 x fp128 > @powi_v2fp128 (<2 x fp128 > %a , i32 %b ) {
1433
+ ; CHECK-SD-LABEL: powi_v2fp128:
1434
+ ; CHECK-SD: // %bb.0: // %entry
1435
+ ; CHECK-SD-NEXT: sub sp, sp, #48
1436
+ ; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
1437
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
1438
+ ; CHECK-SD-NEXT: .cfi_offset w19, -8
1439
+ ; CHECK-SD-NEXT: .cfi_offset w30, -16
1440
+ ; CHECK-SD-NEXT: mov w19, w0
1441
+ ; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1442
+ ; CHECK-SD-NEXT: bl __powitf2
1443
+ ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
1444
+ ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1445
+ ; CHECK-SD-NEXT: mov w0, w19
1446
+ ; CHECK-SD-NEXT: bl __powitf2
1447
+ ; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
1448
+ ; CHECK-SD-NEXT: mov v1.16b, v0.16b
1449
+ ; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1450
+ ; CHECK-SD-NEXT: add sp, sp, #48
1451
+ ; CHECK-SD-NEXT: ret
1452
+ ;
1453
+ ; CHECK-GI-LABEL: powi_v2fp128:
1454
+ ; CHECK-GI: // %bb.0: // %entry
1455
+ ; CHECK-GI-NEXT: sub sp, sp, #48
1456
+ ; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill
1457
+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 48
1458
+ ; CHECK-GI-NEXT: .cfi_offset w19, -8
1459
+ ; CHECK-GI-NEXT: .cfi_offset w30, -16
1460
+ ; CHECK-GI-NEXT: str q1, [sp, #16] // 16-byte Folded Spill
1461
+ ; CHECK-GI-NEXT: mov w19, w0
1462
+ ; CHECK-GI-NEXT: bl __powitf2
1463
+ ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
1464
+ ; CHECK-GI-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
1465
+ ; CHECK-GI-NEXT: mov w0, w19
1466
+ ; CHECK-GI-NEXT: bl __powitf2
1467
+ ; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload
1468
+ ; CHECK-GI-NEXT: mov v1.16b, v0.16b
1469
+ ; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1470
+ ; CHECK-GI-NEXT: add sp, sp, #48
1471
+ ; CHECK-GI-NEXT: ret
1472
+ entry:
1473
+ %c = call <2 x fp128 > @llvm.powi.v2fp128.i32 (<2 x fp128 > %a , i32 %b )
1474
+ ret <2 x fp128 > %c
1475
+ }
1476
+
1477
+ declare <1 x double > @llvm.powi.v1f64.i32 (<1 x double >, i32 )
1409
1478
declare <16 x half > @llvm.powi.v16f16.i32 (<16 x half >, i32 )
1410
1479
declare <2 x double > @llvm.powi.v2f64.i32 (<2 x double >, i32 )
1411
1480
declare <2 x float > @llvm.powi.v2f32.i32 (<2 x float >, i32 )
1481
+ declare <2 x fp128 > @llvm.powi.v2fp128.i32 (<2 x fp128 >, i32 )
1412
1482
declare <3 x double > @llvm.powi.v3f64.i32 (<3 x double >, i32 )
1413
1483
declare <3 x float > @llvm.powi.v3f32.i32 (<3 x float >, i32 )
1414
1484
declare <4 x double > @llvm.powi.v4f64.i32 (<4 x double >, i32 )
@@ -1419,4 +1489,5 @@ declare <8 x float> @llvm.powi.v8f32.i32(<8 x float>, i32)
1419
1489
declare <8 x half > @llvm.powi.v8f16.i32 (<8 x half >, i32 )
1420
1490
declare double @llvm.powi.f64.i32 (double , i32 )
1421
1491
declare float @llvm.powi.f32.i32 (float , i32 )
1492
+ declare fp128 @llvm.powi.fp128.i32 (fp128 , i32 )
1422
1493
declare half @llvm.powi.f16.i32 (half , i32 )
0 commit comments