mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-13 23:25:06 +00:00
Document the maximum LLVM IR alignment, which is 1 << 29 or 0.5 GiB
Add verifier checks. We already check these in the assembly parser, but a frontend producing IR in memory wouldn't hit those checks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213027 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -380,6 +380,8 @@ void Verifier::visitGlobalValue(const GlobalValue &GV) {
|
||||
"Global is external, but doesn't have external or weak linkage!",
|
||||
&GV);
|
||||
|
||||
Assert1(GV.getAlignment() <= Value::MaximumAlignment,
|
||||
"huge alignment values are unsupported", &GV);
|
||||
Assert1(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV),
|
||||
"Only global variables can have appending linkage!", &GV);
|
||||
|
||||
@@ -1891,6 +1893,8 @@ void Verifier::visitLoadInst(LoadInst &LI) {
|
||||
Type *ElTy = PTy->getElementType();
|
||||
Assert2(ElTy == LI.getType(),
|
||||
"Load result type does not match pointer operand type!", &LI, ElTy);
|
||||
Assert1(LI.getAlignment() <= Value::MaximumAlignment,
|
||||
"huge alignment values are unsupported", &LI);
|
||||
if (LI.isAtomic()) {
|
||||
Assert1(LI.getOrdering() != Release && LI.getOrdering() != AcquireRelease,
|
||||
"Load cannot have Release ordering", &LI);
|
||||
@@ -1966,6 +1970,8 @@ void Verifier::visitStoreInst(StoreInst &SI) {
|
||||
Assert2(ElTy == SI.getOperand(0)->getType(),
|
||||
"Stored value type does not match pointer operand type!",
|
||||
&SI, ElTy);
|
||||
Assert1(SI.getAlignment() <= Value::MaximumAlignment,
|
||||
"huge alignment values are unsupported", &SI);
|
||||
if (SI.isAtomic()) {
|
||||
Assert1(SI.getOrdering() != Acquire && SI.getOrdering() != AcquireRelease,
|
||||
"Store cannot have Acquire ordering", &SI);
|
||||
@@ -1997,6 +2003,8 @@ void Verifier::visitAllocaInst(AllocaInst &AI) {
|
||||
&AI);
|
||||
Assert1(AI.getArraySize()->getType()->isIntegerTy(),
|
||||
"Alloca array size must have integer type", &AI);
|
||||
Assert1(AI.getAlignment() <= Value::MaximumAlignment,
|
||||
"huge alignment values are unsupported", &AI);
|
||||
|
||||
visitInstruction(AI);
|
||||
}
|
||||
|
Reference in New Issue
Block a user