; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" ; ; RDFFR ; define @rdffr() #0 { ; CHECK-LABEL: rdffr: ; CHECK: // %bb.0: ; CHECK-NEXT: rdffr p0.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.rdffr() ret %out } define @rdffr_z( %pg) #0 { ; CHECK-LABEL: rdffr_z: ; CHECK: // %bb.0: ; CHECK-NEXT: rdffr p0.b, p0/z ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.rdffr.z( %pg) ret %out } ; Test that rdffr.z followed by ptest optimizes to flags-setting rdffrs. define i1 @rdffr_z_ptest( %pg) #0 { ; CHECK-LABEL: rdffr_z_ptest: ; CHECK: // %bb.0: ; CHECK-NEXT: rdffrs p0.b, p0/z ; CHECK-NEXT: cset w0, ne ; CHECK-NEXT: ret %rdffr = call @llvm.aarch64.sve.rdffr.z( %pg) %out = call i1 @llvm.aarch64.sve.ptest.any.nxv16i1( %pg, %rdffr) ret i1 %out } ; ; SETFFR ; define void @set_ffr() #0 { ; CHECK-LABEL: set_ffr: ; CHECK: // %bb.0: ; CHECK-NEXT: setffr ; CHECK-NEXT: ret call void @llvm.aarch64.sve.setffr() ret void } ; ; WRFFR ; define void @wrffr( %a) #0 { ; CHECK-LABEL: wrffr: ; CHECK: // %bb.0: ; CHECK-NEXT: wrffr p0.b ; CHECK-NEXT: ret call void @llvm.aarch64.sve.wrffr( %a) ret void } declare @llvm.aarch64.sve.rdffr() declare @llvm.aarch64.sve.rdffr.z() declare void @llvm.aarch64.sve.setffr() declare void @llvm.aarch64.sve.wrffr() declare i1 @llvm.aarch64.sve.ptest.any.nxv16i1(, ) attributes #0 = { "target-features"="+sve" }