aboutsummaryrefslogtreecommitdiffstats
path: root/lib/VMCore
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VMCore')
-rw-r--r--lib/VMCore/AsmWriter.cpp28
-rw-r--r--lib/VMCore/Attributes.cpp6
-rw-r--r--lib/VMCore/Function.cpp2
-rw-r--r--lib/VMCore/Verifier.cpp2
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);