Error Adding Intrinsics

I would like to add an intrinsic function based on the function declaration and call in the LLVM IR.

declare void @llvm.Tensilica.AO.STORE.I0.p0_TIE_nnp_AO(_TIE_nnp_AO, _TIE_nnp_AO* nocapture, i32) #1

I understand that adding the clang builtin is not necessary when compiling from the IR level but I am running into the following error while defining the intrinsic in the .td file.

llvm-project/llvm/include/llvm/IR/ error: Cannot access field 'LOAD' of value '"int_AO"'
  def int_AO.LOAD.I0.p0_TIE_nnp_AO : Intrinsic<[llvm__TIE_nnp_AO_ty], [llvm_ptr_TIE_nnp_AO_ty, llvm_i32_ty], [ImmArg<ArgIndex<1>>]>;

Here is my definition of the intrinsic,

let TargetPrefix = "Tensilica" in {
  def int_Tensilica.AO.LOAD.I0.p0_TIE_nnp_AO : Intrinsic<[llvm__TIE_nnp_AO_ty], [llvm_ptr_TIE_nnp_AO_ty, llvm_i32_ty], [ImmArg<ArgIndex<1>>]>;
  def int_Tensilica.AO.STORE.I0.p0_TIE_nnp_AO : Intrinsic<[], [llvm__TIE_nnp_AO_ty, llvm_ptr_TIE_nnp_AO_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>;

I think the issue is related to how the function is declared in the IR but I don’t understand the exact reason for the error.

Is it the dots? says

// Intrinsic class - This is used to define one LLVM intrinsic.  The name of the
// intrinsic definition should start with "int_", then match the LLVM intrinsic
// name with the "llvm." prefix removed, and all "."s turned into "_"s.  For
// example, llvm.bswap.i16 -> int_bswap_i16.

Yup, that seems to have done the trick! However, I just want to clarify whether I am correct regarding the necessity of the builtin of the intrinsic to be added. If we are compiling at the IR level, will the compiler know the functioning of the intrinsic?