mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-23 01:24:30 +00:00
llvm-c: Make LLVM{Get,Set}Alignment work on {Load,Store}Inst too
Patch by Peter Zotov Differential Revision: http://llvm-reviews.chandlerc.com/D1910 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193597 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1665,8 +1665,33 @@ const char *LLVMGetSection(LLVMValueRef Global);
|
|||||||
void LLVMSetSection(LLVMValueRef Global, const char *Section);
|
void LLVMSetSection(LLVMValueRef Global, const char *Section);
|
||||||
LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
|
LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
|
||||||
void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
|
void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
|
||||||
unsigned LLVMGetAlignment(LLVMValueRef Global);
|
|
||||||
void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes);
|
/**
|
||||||
|
* @defgroup LLVMCCoreValueWithAlignment Values with alignment
|
||||||
|
*
|
||||||
|
* Functions in this group only apply to values with alignment, i.e.
|
||||||
|
* global variables, load and store instructions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the preferred alignment of the value.
|
||||||
|
* @see llvm::LoadInst::getAlignment()
|
||||||
|
* @see llvm::StoreInst::getAlignment()
|
||||||
|
* @see llvm::GlobalValue::getAlignment()
|
||||||
|
*/
|
||||||
|
unsigned LLVMGetAlignment(LLVMValueRef V);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the preferred alignment of the value.
|
||||||
|
* @see llvm::LoadInst::setAlignment()
|
||||||
|
* @see llvm::StoreInst::setAlignment()
|
||||||
|
* @see llvm::GlobalValue::setAlignment()
|
||||||
|
*/
|
||||||
|
void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
|
* @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
|
||||||
|
@ -1240,12 +1240,30 @@ void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz) {
|
|||||||
->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
|
->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned LLVMGetAlignment(LLVMValueRef Global) {
|
/*--.. Operations on global variables, load and store instructions .........--*/
|
||||||
return unwrap<GlobalValue>(Global)->getAlignment();
|
|
||||||
|
unsigned LLVMGetAlignment(LLVMValueRef V) {
|
||||||
|
Value *P = unwrap<Value>(V);
|
||||||
|
if (GlobalValue *GV = dyn_cast<GlobalValue>(P))
|
||||||
|
return GV->getAlignment();
|
||||||
|
if (LoadInst *LI = dyn_cast<LoadInst>(P))
|
||||||
|
return LI->getAlignment();
|
||||||
|
if (StoreInst *SI = dyn_cast<StoreInst>(P))
|
||||||
|
return SI->getAlignment();
|
||||||
|
|
||||||
|
llvm_unreachable("only GlobalValue, LoadInst and StoreInst have alignment");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLVMSetAlignment(LLVMValueRef Global, unsigned Bytes) {
|
void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes) {
|
||||||
unwrap<GlobalValue>(Global)->setAlignment(Bytes);
|
Value *P = unwrap<Value>(V);
|
||||||
|
if (GlobalValue *GV = dyn_cast<GlobalValue>(P))
|
||||||
|
GV->setAlignment(Bytes);
|
||||||
|
else if (LoadInst *LI = dyn_cast<LoadInst>(P))
|
||||||
|
LI->setAlignment(Bytes);
|
||||||
|
else if (StoreInst *SI = dyn_cast<StoreInst>(P))
|
||||||
|
SI->setAlignment(Bytes);
|
||||||
|
|
||||||
|
llvm_unreachable("only GlobalValue, LoadInst and StoreInst have alignment");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--.. Operations on global variables ......................................--*/
|
/*--.. Operations on global variables ......................................--*/
|
||||||
|
Reference in New Issue
Block a user