mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Remove support for 1.0 style varargs
amusing of course, because we will have to go back to those semantics soon git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21654 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fe3706a12b
commit
abc73b3e5d
@ -240,7 +240,6 @@ cast { RET_TOK(OtherOpVal, Cast, CAST); }
|
|||||||
select { RET_TOK(OtherOpVal, Select, SELECT); }
|
select { RET_TOK(OtherOpVal, Select, SELECT); }
|
||||||
shl { RET_TOK(OtherOpVal, Shl, SHL); }
|
shl { RET_TOK(OtherOpVal, Shl, SHL); }
|
||||||
shr { RET_TOK(OtherOpVal, Shr, SHR); }
|
shr { RET_TOK(OtherOpVal, Shr, SHR); }
|
||||||
va_arg { return VA_ARG; /* FIXME: OBSOLETE */}
|
|
||||||
vanext { RET_TOK(OtherOpVal, VANext, VANEXT); }
|
vanext { RET_TOK(OtherOpVal, VANext, VANEXT); }
|
||||||
vaarg { RET_TOK(OtherOpVal, VAArg , VAARG); }
|
vaarg { RET_TOK(OtherOpVal, VAArg , VAARG); }
|
||||||
|
|
||||||
|
@ -732,7 +732,6 @@ Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
|
|||||||
llvmAsmin = F;
|
llvmAsmin = F;
|
||||||
CurFilename = Filename;
|
CurFilename = Filename;
|
||||||
llvmAsmlineno = 1; // Reset the current line number...
|
llvmAsmlineno = 1; // Reset the current line number...
|
||||||
ObsoleteVarArgs = false;
|
|
||||||
|
|
||||||
// Allocate a new module to read
|
// Allocate a new module to read
|
||||||
CurModule.CurrentModule = new Module(Filename);
|
CurModule.CurrentModule = new Module(Filename);
|
||||||
@ -741,67 +740,6 @@ Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
|
|||||||
|
|
||||||
Module *Result = ParserResult;
|
Module *Result = ParserResult;
|
||||||
|
|
||||||
// Check to see if they called va_start but not va_arg..
|
|
||||||
if (!ObsoleteVarArgs)
|
|
||||||
if (Function *F = Result->getNamedFunction("llvm.va_start"))
|
|
||||||
if (F->arg_size() == 1) {
|
|
||||||
std::cerr << "WARNING: this file uses obsolete features. "
|
|
||||||
<< "Assemble and disassemble to update it.\n";
|
|
||||||
ObsoleteVarArgs = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ObsoleteVarArgs) {
|
|
||||||
// If the user is making use of obsolete varargs intrinsics, adjust them for
|
|
||||||
// the user.
|
|
||||||
if (Function *F = Result->getNamedFunction("llvm.va_start")) {
|
|
||||||
assert(F->arg_size() == 1 && "Obsolete va_start takes 1 argument!");
|
|
||||||
|
|
||||||
const Type *RetTy = F->getFunctionType()->getParamType(0);
|
|
||||||
RetTy = cast<PointerType>(RetTy)->getElementType();
|
|
||||||
Function *NF = Result->getOrInsertFunction("llvm.va_start", RetTy, 0);
|
|
||||||
|
|
||||||
while (!F->use_empty()) {
|
|
||||||
CallInst *CI = cast<CallInst>(F->use_back());
|
|
||||||
Value *V = new CallInst(NF, "", CI);
|
|
||||||
new StoreInst(V, CI->getOperand(1), CI);
|
|
||||||
CI->getParent()->getInstList().erase(CI);
|
|
||||||
}
|
|
||||||
Result->getFunctionList().erase(F);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Function *F = Result->getNamedFunction("llvm.va_end")) {
|
|
||||||
assert(F->arg_size() == 1 && "Obsolete va_end takes 1 argument!");
|
|
||||||
const Type *ArgTy = F->getFunctionType()->getParamType(0);
|
|
||||||
ArgTy = cast<PointerType>(ArgTy)->getElementType();
|
|
||||||
Function *NF = Result->getOrInsertFunction("llvm.va_end", Type::VoidTy,
|
|
||||||
ArgTy, 0);
|
|
||||||
|
|
||||||
while (!F->use_empty()) {
|
|
||||||
CallInst *CI = cast<CallInst>(F->use_back());
|
|
||||||
Value *V = new LoadInst(CI->getOperand(1), "", CI);
|
|
||||||
new CallInst(NF, V, "", CI);
|
|
||||||
CI->getParent()->getInstList().erase(CI);
|
|
||||||
}
|
|
||||||
Result->getFunctionList().erase(F);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Function *F = Result->getNamedFunction("llvm.va_copy")) {
|
|
||||||
assert(F->arg_size() == 2 && "Obsolete va_copy takes 2 argument!");
|
|
||||||
const Type *ArgTy = F->getFunctionType()->getParamType(0);
|
|
||||||
ArgTy = cast<PointerType>(ArgTy)->getElementType();
|
|
||||||
Function *NF = Result->getOrInsertFunction("llvm.va_copy", ArgTy,
|
|
||||||
ArgTy, 0);
|
|
||||||
|
|
||||||
while (!F->use_empty()) {
|
|
||||||
CallInst *CI = cast<CallInst>(F->use_back());
|
|
||||||
Value *V = new CallInst(NF, CI->getOperand(2), "", CI);
|
|
||||||
new StoreInst(V, CI->getOperand(1), CI);
|
|
||||||
CI->getParent()->getInstList().erase(CI);
|
|
||||||
}
|
|
||||||
Result->getFunctionList().erase(F);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
llvmAsmin = stdin; // F is about to go away, don't use it anymore...
|
llvmAsmin = stdin; // F is about to go away, don't use it anymore...
|
||||||
ParserResult = 0;
|
ParserResult = 0;
|
||||||
|
|
||||||
@ -915,7 +853,6 @@ Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
|
|||||||
// Other Operators
|
// Other Operators
|
||||||
%type <OtherOpVal> ShiftOps
|
%type <OtherOpVal> ShiftOps
|
||||||
%token <OtherOpVal> PHI_TOK CALL CAST SELECT SHL SHR VAARG VANEXT
|
%token <OtherOpVal> PHI_TOK CALL CAST SELECT SHL SHR VAARG VANEXT
|
||||||
%token VA_ARG // FIXME: OBSOLETE
|
|
||||||
|
|
||||||
%start Module
|
%start Module
|
||||||
%%
|
%%
|
||||||
@ -1986,29 +1923,6 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
|
|||||||
ThrowException("select value types should match!");
|
ThrowException("select value types should match!");
|
||||||
$$ = new SelectInst($2, $4, $6);
|
$$ = new SelectInst($2, $4, $6);
|
||||||
}
|
}
|
||||||
| VA_ARG ResolvedVal ',' Types {
|
|
||||||
// FIXME: This is emulation code for an obsolete syntax. This should be
|
|
||||||
// removed at some point.
|
|
||||||
if (!ObsoleteVarArgs) {
|
|
||||||
std::cerr << "WARNING: this file uses obsolete features. "
|
|
||||||
<< "Assemble and disassemble to update it.\n";
|
|
||||||
ObsoleteVarArgs = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// First, load the valist...
|
|
||||||
Instruction *CurVAList = new LoadInst($2, "");
|
|
||||||
CurBB->getInstList().push_back(CurVAList);
|
|
||||||
|
|
||||||
// Emit the vaarg instruction.
|
|
||||||
$$ = new VAArgInst(CurVAList, *$4);
|
|
||||||
|
|
||||||
// Now we must advance the pointer and update it in memory.
|
|
||||||
Instruction *TheVANext = new VANextInst(CurVAList, *$4);
|
|
||||||
CurBB->getInstList().push_back(TheVANext);
|
|
||||||
|
|
||||||
CurBB->getInstList().push_back(new StoreInst(TheVANext, $2));
|
|
||||||
delete $4;
|
|
||||||
}
|
|
||||||
| VAARG ResolvedVal ',' Types {
|
| VAARG ResolvedVal ',' Types {
|
||||||
$$ = new VAArgInst($2, *$4);
|
$$ = new VAArgInst($2, *$4);
|
||||||
delete $4;
|
delete $4;
|
||||||
|
Loading…
Reference in New Issue
Block a user