@@ -15327,13 +15327,21 @@ uint64x1_t test_vsra_n_u64(uint64x1_t a, uint64x1_t b) {
1532715327 // LLVM: ret <1 x i64> [[TMP4]]
1532815328}
1532915329
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+ }
1533715345
1533815346int64x1_t test_vrsra_n_s64(int64x1_t a, int64x1_t b) {
1533915347 return vrsra_n_s64(a, b, 1);
@@ -15355,13 +15363,21 @@ int64x1_t test_vrsra_n_s64(int64x1_t a, int64x1_t b) {
1535515363 // LLVM: ret <1 x i64> [[TMP3]]
1535615364}
1535715365
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+ }
1536515381
1536615382uint64x1_t test_vrsra_n_u64(uint64x1_t a, uint64x1_t b) {
1536715383 return vrsra_n_u64(a, b, 1);
0 commit comments