Index: clang/lib/Basic/Targets/AArch64.cpp =================================================================== --- clang/lib/Basic/Targets/AArch64.cpp +++ clang/lib/Basic/Targets/AArch64.cpp @@ -1164,7 +1164,11 @@ // SVE predicate registers "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", - "p11", "p12", "p13", "p14", "p15" + "p11", "p12", "p13", "p14", "p15", + + // SVE predicate-as-counter registers + "pn0", "pn1", "pn2", "pn3", "pn4", "pn5", "pn6", "pn7", "pn8", + "pn9", "pn10", "pn11", "pn12", "pn13", "pn14", "pn15" }; ArrayRef AArch64TargetInfo::getGCCRegNames() const { Index: clang/test/CodeGen/aarch64-sve-inline-asm.c =================================================================== --- clang/test/CodeGen/aarch64-sve-inline-asm.c +++ clang/test/CodeGen/aarch64-sve-inline-asm.c @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +sve2p1 \ +// RUN: -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK void test_sve_asm(void) { asm volatile( @@ -9,5 +10,13 @@ : : : "z0", "z31", "p0", "p15"); + // CHECK-LABEL: @test_sve_asm // CHECK: "~{z0},~{z31},~{p0},~{p15}" } + +void test_sve2p1_asm(void) { + register __SVCount_t x2 asm("pn0"); + asm("ptrue pn8.b" ::: "pn8"); + // CHECK-LABEL: @test_sve2p1_asm + // CHECK: "~{pn8}" +}