// Find the type plane in the module map
ValueMap::iterator MI = mMap.find(V);
- return MI == mMap.end() ? -1 : MI->second;
+ return MI == mMap.end() ? -1 : (int)MI->second;
}
initialize();
ValueMap::iterator FI = fMap.find(V);
- return FI == fMap.end() ? -1 : FI->second;
+ return FI == fMap.end() ? -1 : (int)FI->second;
}
Result += "{ ";
for (StructType::element_iterator I = STy->element_begin(),
E = STy->element_end(); I != E; ++I) {
- if (I != STy->element_begin())
- Result += ", ";
calcTypeName(*I, TypeStack, TypeNames, Result);
+ if (next(I) != STy->element_end())
+ Result += ',';
+ Result += ' ';
}
- Result += " }";
+ Result += '}';
if (STy->isPacked())
Result += '>';
break;
// Print the type
printType(Operand->getType());
// Print parameter attributes list
- if (Attrs != ParamAttr::None)
- Out << ' ' << ParamAttr::getAsString(Attrs);
+ if (Attrs != Attribute::None)
+ Out << ' ' << Attribute::getAsString(Attrs);
Out << ' ';
// Print the operand
WriteAsOperandInternal(Out, Operand, TypeNames, &Machine);
case CallingConv::Cold: Out << "coldcc "; break;
case CallingConv::X86_StdCall: Out << "x86_stdcallcc "; break;
case CallingConv::X86_FastCall: Out << "x86_fastcallcc "; break;
- case CallingConv::X86_SSECall: Out << "x86_ssecallcc "; break;
default: Out << "cc" << F->getCallingConv() << " "; break;
}
const FunctionType *FT = F->getFunctionType();
- const PAListPtr &Attrs = F->getParamAttrs();
+ const AttrListPtr &Attrs = F->getAttributes();
+ Attributes RetAttrs = Attrs.getRetAttributes();
+ if (RetAttrs != Attribute::None)
+ Out << Attribute::getAsString(Attrs.getRetAttributes()) << ' ';
printType(F->getReturnType());
Out << ' ';
if (F->hasName())
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.getParamAttrs(Idx));
+ printArgument(I, Attrs.getParamAttributes(Idx));
Idx++;
}
} else {
// Output type...
printType(FT->getParamType(i));
- Attributes ArgAttrs = Attrs.getParamAttrs(i+1);
- if (ArgAttrs != ParamAttr::None)
- Out << ' ' << ParamAttr::getAsString(ArgAttrs);
+ Attributes ArgAttrs = Attrs.getParamAttributes(i+1);
+ if (ArgAttrs != Attribute::None)
+ Out << ' ' << Attribute::getAsString(ArgAttrs);
}
}
Out << "..."; // Output varargs portion of signature!
}
Out << ')';
- Attributes RetAttrs = Attrs.getParamAttrs(0);
- if (RetAttrs != ParamAttr::None)
- Out << ' ' << ParamAttr::getAsString(Attrs.getParamAttrs(0));
+ Attributes FnAttrs = Attrs.getFnAttributes();
+ if (FnAttrs != Attribute::None)
+ Out << ' ' << Attribute::getAsString(Attrs.getFnAttributes());
if (F->hasSection())
Out << " section \"" << F->getSection() << '"';
if (F->getAlignment())
if (F->isDeclaration()) {
Out << "\n";
} else {
-
- bool insideNotes = false;
- if (F->hasNote(ParamAttr::FN_NOTE_AlwaysInline)) {
- Out << "notes(";
- insideNotes = true;
- Out << "inline=always";
- }
- if (F->hasNote(ParamAttr::FN_NOTE_NoInline)) {
- if (insideNotes)
- Out << ",";
- else {
- Out << "notes(";
- insideNotes = true;
- }
- Out << "inline=never";
- }
- if (F->hasNote(ParamAttr::FN_NOTE_OptimizeForSize)) {
- if (insideNotes)
- Out << ",";
- else {
- Out << "notes(";
- insideNotes = true;
- }
- Out << "opt_size";
- }
- if (insideNotes)
- Out << ")";
-
Out << " {";
// Output all of its basic blocks... for the function
printType(Arg->getType());
// Output parameter attributes list
- if (Attrs != ParamAttr::None)
- Out << ' ' << ParamAttr::getAsString(Attrs);
+ if (Attrs != Attribute::None)
+ Out << ' ' << Attribute::getAsString(Attrs);
// Output name, if available...
if (Arg->hasName()) {
case CallingConv::Cold: Out << " coldcc"; break;
case CallingConv::X86_StdCall: Out << " x86_stdcallcc"; break;
case CallingConv::X86_FastCall: Out << " x86_fastcallcc"; break;
- case CallingConv::X86_SSECall: Out << " x86_ssecallcc"; break;
default: Out << " cc" << CI->getCallingConv(); break;
}
const PointerType *PTy = cast<PointerType>(Operand->getType());
const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
const Type *RetTy = FTy->getReturnType();
- const PAListPtr &PAL = CI->getParamAttrs();
+ const AttrListPtr &PAL = CI->getAttributes();
+
+ if (PAL.getRetAttributes() != Attribute::None)
+ Out << ' ' << Attribute::getAsString(PAL.getRetAttributes());
// If possible, print out the short form of the call instruction. We can
// only do this if the first argument is a pointer to a nonvararg function,
for (unsigned op = 1, Eop = I.getNumOperands(); op < Eop; ++op) {
if (op > 1)
Out << ", ";
- writeParamOperand(I.getOperand(op), PAL.getParamAttrs(op));
+ writeParamOperand(I.getOperand(op), PAL.getParamAttributes(op));
}
Out << ')';
- if (PAL.getParamAttrs(0) != ParamAttr::None)
- Out << ' ' << ParamAttr::getAsString(PAL.getParamAttrs(0));
+ 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());
const Type *RetTy = FTy->getReturnType();
- const PAListPtr &PAL = II->getParamAttrs();
+ const AttrListPtr &PAL = II->getAttributes();
// Print the calling convention being used.
switch (II->getCallingConv()) {
case CallingConv::Cold: Out << " coldcc"; break;
case CallingConv::X86_StdCall: Out << " x86_stdcallcc"; break;
case CallingConv::X86_FastCall: Out << " x86_fastcallcc"; break;
- case CallingConv::X86_SSECall: Out << " x86_ssecallcc"; break;
default: Out << " cc" << II->getCallingConv(); break;
}
+ if (PAL.getRetAttributes() != Attribute::None)
+ Out << ' ' << Attribute::getAsString(PAL.getRetAttributes());
+
// If possible, print out the short form of the invoke instruction. We can
// only do this if the first argument is a pointer to a nonvararg function,
// and if the return type is not a pointer to a function.
for (unsigned op = 3, Eop = I.getNumOperands(); op < Eop; ++op) {
if (op > 3)
Out << ", ";
- writeParamOperand(I.getOperand(op), PAL.getParamAttrs(op-2));
+ writeParamOperand(I.getOperand(op), PAL.getParamAttributes(op-2));
}
Out << ')';
- if (PAL.getParamAttrs(0) != ParamAttr::None)
- Out << ' ' << ParamAttr::getAsString(PAL.getParamAttrs(0));
+ if (PAL.getFnAttributes() != Attribute::None)
+ Out << ' ' << Attribute::getAsString(PAL.getFnAttributes());
+
Out << "\n\t\t\tto ";
writeOperand(II->getNormalDest(), true);
Out << " unwind ";
AssemblyWriter W(OS, SlotTable, GV->getParent(), 0);
W.write(GV);
} else if (const Constant *C = dyn_cast<Constant>(this)) {
- OS << ' ' << C->getType()->getDescription() << ' ';
+ OS << C->getType()->getDescription() << ' ';
std::map<const Type *, std::string> TypeTable;
WriteConstantInt(OS, C, TypeTable, 0);
} else if (const Argument *A = dyn_cast<Argument>(this)) {
// Type::dump - allow easy printing of Types from the debugger.
void Type::dump() const { print(errs()); errs() << '\n'; errs().flush(); }
+// Type::dump - allow easy printing of Types from the debugger.
+// This one uses type names from the given context module
+void Type::dump(const Module *Context) const {
+ WriteTypeSymbolic(errs(), this, Context);
+ errs() << '\n';
+ errs().flush();
+}
+
// Module::dump() - Allow printing of Modules from the debugger.
void Module::dump() const { print(errs(), 0); errs().flush(); }