diff options
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 28 | ||||
-rw-r--r-- | lib/VMCore/Attributes.cpp | 6 | ||||
-rw-r--r-- | lib/VMCore/Function.cpp | 2 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 2 |
4 files changed, 26 insertions, 12 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index b1ce257..e186985 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -1374,7 +1374,7 @@ void AssemblyWriter::printFunction(const Function *F) { I != E; ++I) { // Insert commas as we go... the first arg doesn't get a comma if (I != F->arg_begin()) Out << ", "; - printArgument(I, Attrs.getAttributes(Idx)); + printArgument(I, Attrs.getParamAttributes(Idx)); Idx++; } } else { @@ -1386,7 +1386,7 @@ void AssemblyWriter::printFunction(const Function *F) { // Output type... printType(FT->getParamType(i)); - Attributes ArgAttrs = Attrs.getAttributes(i+1); + Attributes ArgAttrs = Attrs.getParamAttributes(i+1); if (ArgAttrs != Attribute::None) Out << ' ' << Attribute::getAsString(ArgAttrs); } @@ -1398,9 +1398,12 @@ void AssemblyWriter::printFunction(const Function *F) { Out << "..."; // Output varargs portion of signature! } Out << ')'; - Attributes RetAttrs = Attrs.getAttributes(0); + Attributes RetAttrs = Attrs.getRetAttributes(); if (RetAttrs != Attribute::None) - Out << ' ' << Attribute::getAsString(Attrs.getAttributes(0)); + Out << ' ' << Attribute::getAsString(Attrs.getRetAttributes()); + Attributes FnAttrs = Attrs.getFnAttributes(); + if (FnAttrs != Attribute::None) + Out << ' ' << Attribute::getAsString(Attrs.getFnAttributes()); if (F->hasSection()) Out << " section \"" << F->getSection() << '"'; if (F->getAlignment()) @@ -1660,11 +1663,13 @@ void AssemblyWriter::printInstruction(const Instruction &I) { for (unsigned op = 1, Eop = I.getNumOperands(); op < Eop; ++op) { if (op > 1) Out << ", "; - writeParamOperand(I.getOperand(op), PAL.getAttributes(op)); + writeParamOperand(I.getOperand(op), PAL.getParamAttributes(op)); } Out << ')'; - if (PAL.getAttributes(0) != Attribute::None) - Out << ' ' << Attribute::getAsString(PAL.getAttributes(0)); + if (PAL.getRetAttributes() != Attribute::None) + Out << ' ' << Attribute::getAsString(PAL.getRetAttributes()); + if (PAL.getFnAttributes() != Attribute::None) + Out << ' ' << Attribute::getAsString(PAL.getFnAttributes()); } else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I)) { const PointerType *PTy = cast<PointerType>(Operand->getType()); const FunctionType *FTy = cast<FunctionType>(PTy->getElementType()); @@ -1699,12 +1704,15 @@ void AssemblyWriter::printInstruction(const Instruction &I) { for (unsigned op = 3, Eop = I.getNumOperands(); op < Eop; ++op) { if (op > 3) Out << ", "; - writeParamOperand(I.getOperand(op), PAL.getAttributes(op-2)); + writeParamOperand(I.getOperand(op), PAL.getParamAttributes(op-2)); } Out << ')'; - if (PAL.getAttributes(0) != Attribute::None) - Out << ' ' << Attribute::getAsString(PAL.getAttributes(0)); + if (PAL.getRetAttributes() != Attribute::None) + Out << ' ' << Attribute::getAsString(PAL.getRetAttributes()); + if (PAL.getFnAttributes() != Attribute::None) + Out << ' ' << Attribute::getAsString(PAL.getFnAttributes()); + Out << "\n\t\t\tto "; writeOperand(II->getNormalDest(), true); Out << " unwind "; diff --git a/lib/VMCore/Attributes.cpp b/lib/VMCore/Attributes.cpp index b2f2150..433b79d 100644 --- a/lib/VMCore/Attributes.cpp +++ b/lib/VMCore/Attributes.cpp @@ -47,6 +47,12 @@ std::string Attribute::getAsString(Attributes Attrs) { Result += "readnone "; if (Attrs & Attribute::ReadOnly) Result += "readonly "; + if (Attrs & Attribute::OptimizeForSize) + Result += "optsize "; + if (Attrs & Attribute::NoInline) + Result += "noinline "; + if (Attrs & Attribute::AlwaysInline) + Result += "alwaysinline "; if (Attrs & Attribute::Alignment) { Result += "align "; Result += utostr((Attrs & Attribute::Alignment) >> 16); diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index f16042b..ddc6ace 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -365,7 +365,7 @@ AttrListPtr Intrinsic::getAttributes(ID id) { // Intrinsics cannot throw exceptions. Attr |= Attribute::NoUnwind; - AttributeWithIndex PAWI = AttributeWithIndex::get(0, Attr); + AttributeWithIndex PAWI = AttributeWithIndex::get(~0, Attr); return AttrListPtr::get(&PAWI, 1); } diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 3f950be..42d76ef 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -975,7 +975,7 @@ void Verifier::VerifyCallSite(CallSite CS) { if (FTy->isVarArg()) // Check attributes on the varargs part. for (unsigned Idx = 1 + FTy->getNumParams(); Idx <= CS.arg_size(); ++Idx) { - Attributes Attr = Attrs.getAttributes(Idx); + Attributes Attr = Attrs.getParamAttributes(Idx); VerifyAttrs(Attr, CS.getArgument(Idx-1)->getType(), false, I); |