mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
[opaque pointer type] Avoid using PointerType::getElementType when parsing IR
A few calls are left in for error checking - but I'm commenting those out & trying to build some IR tests (aiming for Argument Promotion to start with). When I get any of these tests passing I may add flag to disable the checking so I can add tests that pass with the assertion in place. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234206 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1ea24954c6
commit
af1023588e
@ -66,6 +66,7 @@ private:
|
||||
mutable ArgumentListType ArgumentList; ///< The formal arguments
|
||||
ValueSymbolTable *SymTab; ///< Symbol table of args/instructions
|
||||
AttributeSet AttributeSets; ///< Parameter attributes
|
||||
FunctionType *Ty;
|
||||
|
||||
/*
|
||||
* Value::SubclassData
|
||||
|
@ -180,7 +180,12 @@ public:
|
||||
unsigned Align, Instruction *InsertBefore = nullptr);
|
||||
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
|
||||
unsigned Align, BasicBlock *InsertAtEnd);
|
||||
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile,
|
||||
LoadInst(Value *Ptr, const Twine &NameStr, bool isVolatile, unsigned Align,
|
||||
AtomicOrdering Order, SynchronizationScope SynchScope = CrossThread,
|
||||
Instruction *InsertBefore = nullptr)
|
||||
: LoadInst(cast<PointerType>(Ptr->getType())->getElementType(), Ptr,
|
||||
NameStr, isVolatile, Align, Order, SynchScope, InsertBefore) {}
|
||||
LoadInst(Type *Ty, Value *Ptr, const Twine &NameStr, bool isVolatile,
|
||||
unsigned Align, AtomicOrdering Order,
|
||||
SynchronizationScope SynchScope = CrossThread,
|
||||
Instruction *InsertBefore = nullptr);
|
||||
|
@ -5279,7 +5279,7 @@ int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
Lex.Lex();
|
||||
}
|
||||
|
||||
Type *Ty = nullptr;
|
||||
Type *Ty;
|
||||
LocTy ExplicitTypeLoc = Lex.getLoc();
|
||||
if (ParseType(Ty) ||
|
||||
ParseToken(lltok::comma, "expected comma after load's type") ||
|
||||
@ -5288,8 +5288,7 @@ int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
ParseOptionalCommaAlign(Alignment, AteExtraComma))
|
||||
return true;
|
||||
|
||||
if (!Val->getType()->isPointerTy() ||
|
||||
!cast<PointerType>(Val->getType())->getElementType()->isFirstClassType())
|
||||
if (!Val->getType()->isPointerTy() || !Ty->isFirstClassType())
|
||||
return Error(Loc, "load operand must be a pointer to a first class type");
|
||||
if (isAtomic && !Alignment)
|
||||
return Error(Loc, "atomic load must have explicit non-zero alignment");
|
||||
@ -5300,7 +5299,7 @@ int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS) {
|
||||
return Error(ExplicitTypeLoc,
|
||||
"explicit pointee type doesn't match operand's pointee type");
|
||||
|
||||
Inst = new LoadInst(Val, "", isVolatile, Alignment, Ordering, Scope);
|
||||
Inst = new LoadInst(Ty, Val, "", isVolatile, Alignment, Ordering, Scope);
|
||||
return AteExtraComma ? InstExtraComma : InstNormal;
|
||||
}
|
||||
|
||||
|
@ -215,9 +215,7 @@ LLVMContext &Function::getContext() const {
|
||||
return getType()->getContext();
|
||||
}
|
||||
|
||||
FunctionType *Function::getFunctionType() const {
|
||||
return cast<FunctionType>(getType()->getElementType());
|
||||
}
|
||||
FunctionType *Function::getFunctionType() const { return Ty; }
|
||||
|
||||
bool Function::isVarArg() const {
|
||||
return getFunctionType()->isVarArg();
|
||||
@ -242,7 +240,8 @@ void Function::eraseFromParent() {
|
||||
Function::Function(FunctionType *Ty, LinkageTypes Linkage, const Twine &name,
|
||||
Module *ParentModule)
|
||||
: GlobalObject(PointerType::getUnqual(Ty), Value::FunctionVal, nullptr, 0,
|
||||
Linkage, name) {
|
||||
Linkage, name),
|
||||
Ty(Ty) {
|
||||
assert(FunctionType::isValidReturnType(getReturnType()) &&
|
||||
"invalid return type");
|
||||
setIsMaterializable(false);
|
||||
|
@ -943,12 +943,10 @@ LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile,
|
||||
: LoadInst(Ptr, Name, isVolatile, Align, NotAtomic, CrossThread, InsertAE) {
|
||||
}
|
||||
|
||||
LoadInst::LoadInst(Value *Ptr, const Twine &Name, bool isVolatile,
|
||||
LoadInst::LoadInst(Type *Ty, Value *Ptr, const Twine &Name, bool isVolatile,
|
||||
unsigned Align, AtomicOrdering Order,
|
||||
SynchronizationScope SynchScope,
|
||||
Instruction *InsertBef)
|
||||
: UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
|
||||
Load, Ptr, InsertBef) {
|
||||
SynchronizationScope SynchScope, Instruction *InsertBef)
|
||||
: UnaryInstruction(Ty, Load, Ptr, InsertBef) {
|
||||
setVolatile(isVolatile);
|
||||
setAlignment(Align);
|
||||
setAtomic(Order, SynchScope);
|
||||
|
@ -2540,9 +2540,7 @@ void Verifier::visitRangeMetadata(Instruction& I,
|
||||
void Verifier::visitLoadInst(LoadInst &LI) {
|
||||
PointerType *PTy = dyn_cast<PointerType>(LI.getOperand(0)->getType());
|
||||
Assert(PTy, "Load operand must be a pointer.", &LI);
|
||||
Type *ElTy = PTy->getElementType();
|
||||
Assert(ElTy == LI.getType(),
|
||||
"Load result type does not match pointer operand type!", &LI, ElTy);
|
||||
Type *ElTy = LI.getType();
|
||||
Assert(LI.getAlignment() <= Value::MaximumAlignment,
|
||||
"huge alignment values are unsupported", &LI);
|
||||
if (LI.isAtomic()) {
|
||||
|
Loading…
Reference in New Issue
Block a user