Add elementtype attributes for llvm.arm.ldrex/strex intrinsics
These intrinsics (and a few more, but there are the only ones exposed by stdarch) require an elementtype attribute in LLVM 15.
This commit is contained in:
parent
ff693dc7b8
commit
f653d3ab30
3 changed files with 41 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
|||
#include "llvm/IR/GlobalVariable.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/Intrinsics.h"
|
||||
#include "llvm/IR/IntrinsicsARM.h"
|
||||
#include "llvm/IR/Mangler.h"
|
||||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/Object/COFFImportFile.h"
|
||||
|
@ -300,6 +301,14 @@ extern "C" LLVMAttributeRef LLVMRustCreateStructRetAttr(LLVMContextRef C, LLVMTy
|
|||
return wrap(Attribute::getWithStructRetType(*unwrap(C), unwrap(Ty)));
|
||||
}
|
||||
|
||||
extern "C" LLVMAttributeRef LLVMRustCreateElementTypeAttr(LLVMContextRef C, LLVMTypeRef Ty) {
|
||||
#if LLVM_VERSION_GE(15, 0)
|
||||
return wrap(Attribute::get(*unwrap(C), Attribute::ElementType, unwrap(Ty)));
|
||||
#else
|
||||
report_fatal_error("Should not be needed on LLVM < 15");
|
||||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMAttributeRef LLVMRustCreateUWTableAttr(LLVMContextRef C, bool Async) {
|
||||
#if LLVM_VERSION_LT(15, 0)
|
||||
return wrap(Attribute::get(*unwrap(C), Attribute::UWTable));
|
||||
|
@ -1943,3 +1952,16 @@ extern "C" LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx) {
|
|||
return wrap(unwrap<Constant>(C)->getAggregateElement(Idx));
|
||||
}
|
||||
#endif
|
||||
|
||||
extern "C" int32_t LLVMRustGetElementTypeArgIndex(LLVMValueRef CallSite) {
|
||||
#if LLVM_VERSION_GE(15, 0)
|
||||
auto *CB = unwrap<CallBase>(CallSite);
|
||||
switch (CB->getIntrinsicID()) {
|
||||
case Intrinsic::arm_ldrex:
|
||||
return 0;
|
||||
case Intrinsic::arm_strex:
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue