mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 18:24:23 +00:00
rotate CallInst operands, i.e. move callee to the back
of the operand array the motivation for this patch are laid out in my mail to llvm-commits: more efficient access to operands and callee, faster callgraph-construction, smaller compiler binary git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101364 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -2886,7 +2886,7 @@ void CWriter::visitCallInst(CallInst &I) {
|
||||
bool hasByVal = I.hasByValArgument();
|
||||
bool isStructRet = I.hasStructRetAttr();
|
||||
if (isStructRet) {
|
||||
writeOperandDeref(I.getOperand(1));
|
||||
writeOperandDeref(I.getOperand(0));
|
||||
Out << " = ";
|
||||
}
|
||||
|
||||
@ -2942,7 +2942,7 @@ void CWriter::visitCallInst(CallInst &I) {
|
||||
|
||||
unsigned NumDeclaredParams = FTy->getNumParams();
|
||||
|
||||
CallSite::arg_iterator AI = I.op_begin()+1, AE = I.op_end();
|
||||
CallInst::op_iterator AI = I.op_begin(), AE = I.op_end() - 1;
|
||||
unsigned ArgNo = 0;
|
||||
if (isStructRet) { // Skip struct return argument.
|
||||
++AI;
|
||||
@ -2996,7 +2996,7 @@ bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||
Out << "0; ";
|
||||
|
||||
Out << "va_start(*(va_list*)";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ", ";
|
||||
// Output the last argument to the enclosing function.
|
||||
if (I.getParent()->getParent()->arg_empty())
|
||||
@ -3006,9 +3006,9 @@ bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::vaend:
|
||||
if (!isa<ConstantPointerNull>(I.getOperand(1))) {
|
||||
if (!isa<ConstantPointerNull>(I.getOperand(0))) {
|
||||
Out << "0; va_end(*(va_list*)";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ')';
|
||||
} else {
|
||||
Out << "va_end(*(va_list*)0)";
|
||||
@ -3017,47 +3017,47 @@ bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||
case Intrinsic::vacopy:
|
||||
Out << "0; ";
|
||||
Out << "va_copy(*(va_list*)";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ", *(va_list*)";
|
||||
writeOperand(I.getOperand(2));
|
||||
writeOperand(I.getOperand(1));
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::returnaddress:
|
||||
Out << "__builtin_return_address(";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::frameaddress:
|
||||
Out << "__builtin_frame_address(";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::powi:
|
||||
Out << "__builtin_powi(";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ", ";
|
||||
writeOperand(I.getOperand(2));
|
||||
writeOperand(I.getOperand(1));
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::setjmp:
|
||||
Out << "setjmp(*(jmp_buf*)";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::longjmp:
|
||||
Out << "longjmp(*(jmp_buf*)";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ", ";
|
||||
writeOperand(I.getOperand(2));
|
||||
writeOperand(I.getOperand(1));
|
||||
Out << ')';
|
||||
return true;
|
||||
case Intrinsic::prefetch:
|
||||
Out << "LLVM_PREFETCH((const void *)";
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ", ";
|
||||
writeOperand(I.getOperand(1));
|
||||
Out << ", ";
|
||||
writeOperand(I.getOperand(2));
|
||||
Out << ", ";
|
||||
writeOperand(I.getOperand(3));
|
||||
Out << ")";
|
||||
return true;
|
||||
case Intrinsic::stacksave:
|
||||
@ -3074,7 +3074,7 @@ bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||
printType(Out, I.getType());
|
||||
Out << ')';
|
||||
// Multiple GCC builtins multiplex onto this intrinsic.
|
||||
switch (cast<ConstantInt>(I.getOperand(3))->getZExtValue()) {
|
||||
switch (cast<ConstantInt>(I.getOperand(2))->getZExtValue()) {
|
||||
default: llvm_unreachable("Invalid llvm.x86.sse.cmp!");
|
||||
case 0: Out << "__builtin_ia32_cmpeq"; break;
|
||||
case 1: Out << "__builtin_ia32_cmplt"; break;
|
||||
@ -3095,9 +3095,9 @@ bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||
Out << 'd';
|
||||
|
||||
Out << "(";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ", ";
|
||||
writeOperand(I.getOperand(2));
|
||||
writeOperand(I.getOperand(1));
|
||||
Out << ")";
|
||||
return true;
|
||||
case Intrinsic::ppc_altivec_lvsl:
|
||||
@ -3105,7 +3105,7 @@ bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||
printType(Out, I.getType());
|
||||
Out << ')';
|
||||
Out << "__builtin_altivec_lvsl(0, (void*)";
|
||||
writeOperand(I.getOperand(1));
|
||||
writeOperand(I.getOperand(0));
|
||||
Out << ")";
|
||||
return true;
|
||||
}
|
||||
@ -3218,7 +3218,7 @@ void CWriter::visitInlineAsm(CallInst &CI) {
|
||||
DestVal = ResultVals[ValueCount].first;
|
||||
DestValNo = ResultVals[ValueCount].second;
|
||||
} else
|
||||
DestVal = CI.getOperand(ValueCount-ResultVals.size()+1);
|
||||
DestVal = CI.getOperand(ValueCount-ResultVals.size());
|
||||
|
||||
if (I->isEarlyClobber)
|
||||
C = "&"+C;
|
||||
@ -3252,7 +3252,7 @@ void CWriter::visitInlineAsm(CallInst &CI) {
|
||||
}
|
||||
|
||||
assert(ValueCount >= ResultVals.size() && "Input can't refer to result");
|
||||
Value *SrcVal = CI.getOperand(ValueCount-ResultVals.size()+1);
|
||||
Value *SrcVal = CI.getOperand(ValueCount-ResultVals.size());
|
||||
|
||||
Out << "\"" << C << "\"(";
|
||||
if (!I->isIndirect)
|
||||
|
Reference in New Issue
Block a user