@@ -15327,13 +15327,21 @@ uint64x1_t test_vsra_n_u64(uint64x1_t a, uint64x1_t b) {
15327
15327
// LLVM: ret <1 x i64> [[TMP4]]
15328
15328
}
15329
15329
15330
- // NYI-LABEL: @test_vrsrad_n_s64(
15331
- // NYI: [[TMP0:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 %b, i64 -63)
15332
- // NYI: [[TMP1:%.*]] = add i64 %a, [[TMP0]]
15333
- // NYI: ret i64 [[TMP1]]
15334
- // int64_t test_vrsrad_n_s64(int64_t a, int64_t b) {
15335
- // return (int64_t)vrsrad_n_s64(a, b, 63);
15336
- // }
15330
+ int64_t test_vrsrad_n_s64(int64_t a, int64_t b) {
15331
+ return (int64_t)vrsrad_n_s64(a, b, 63);
15332
+
15333
+ // CIR-LABEL: vrsrad_n_s64
15334
+ // CIR: [[TMP0:%.*]] = cir.const #cir.int<63> : !s32i
15335
+ // CIR: [[TMP1:%.*]] = cir.unary(minus, [[TMP0]]) : !s32i, !s32i
15336
+ // CIR: [[TMP2:%.*]] = cir.cast(integral, [[TMP1]] : !s32i), !s64i
15337
+ // CIR: [[TMP3:%.*]] = cir.llvm.intrinsic "aarch64.neon.srshl" {{.*}}, [[TMP2]] : (!s64i, !s64i) -> !s64i
15338
+ // CIR: [[TMP4:%.*]] = cir.binop(add, {{.*}}, [[TMP3]]) : !s64i
15339
+
15340
+ // LLVM-LABEL: @test_vrsrad_n_s64(
15341
+ // LLVM: [[TMP0:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 %1, i64 -63)
15342
+ // LLVM: [[TMP1:%.*]] = add i64 %0, [[TMP0]]
15343
+ // LLVM: ret i64 [[TMP1]]
15344
+ }
15337
15345
15338
15346
int64x1_t test_vrsra_n_s64(int64x1_t a, int64x1_t b) {
15339
15347
return vrsra_n_s64(a, b, 1);
@@ -15355,13 +15363,21 @@ int64x1_t test_vrsra_n_s64(int64x1_t a, int64x1_t b) {
15355
15363
// LLVM: ret <1 x i64> [[TMP3]]
15356
15364
}
15357
15365
15358
- // NYI-LABEL: @test_vrsrad_n_u64(
15359
- // NYI: [[TMP0:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 %b, i64 -63)
15360
- // NYI: [[TMP1:%.*]] = add i64 %a, [[TMP0]]
15361
- // NYI: ret i64 [[TMP1]]
15362
- // uint64_t test_vrsrad_n_u64(uint64_t a, uint64_t b) {
15363
- // return (uint64_t)vrsrad_n_u64(a, b, 63);
15364
- // }
15366
+ uint64_t test_vrsrad_n_u64(uint64_t a, uint64_t b) {
15367
+ return (uint64_t)vrsrad_n_u64(a, b, 63);
15368
+
15369
+ // CIR-LABEL:vrsrad_n_u64
15370
+ // CIR: [[TMP0:%.*]] = cir.const #cir.int<63> : !s32i
15371
+ // CIR: [[TMP1:%.*]] = cir.unary(minus, [[TMP0]]) : !s32i, !s32i
15372
+ // CIR: [[TMP2:%.*]] = cir.cast(integral, [[TMP1]] : !s32i), !u64i
15373
+ // CIR: [[TMP3:%.*]] = cir.llvm.intrinsic "aarch64.neon.urshl" {{.*}}, [[TMP2]] : (!u64i, !u64i) -> !u64i
15374
+ // CIR: [[TMP4:%.*]] = cir.binop(add, {{.*}}, [[TMP3]]) : !u64i
15375
+
15376
+ // LLVM-LABEL: @test_vrsrad_n_u64(
15377
+ // LLVM: [[TMP0:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 %1, i64 -63)
15378
+ // LLVM: [[TMP1:%.*]] = add i64 %0, [[TMP0]]
15379
+ // LLVM: ret i64 [[TMP1]]
15380
+ }
15365
15381
15366
15382
uint64x1_t test_vrsra_n_u64(uint64x1_t a, uint64x1_t b) {
15367
15383
return vrsra_n_u64(a, b, 1);
0 commit comments