#include "llvm/CallingConv.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
-#include "llvm/ParamAttrsList.h"
#include "llvm/InlineAsm.h"
#include "llvm/Instruction.h"
#include "llvm/Instructions.h"
Out << (unsigned char)(nibble + '0');
else
Out << (unsigned char)(nibble - 10 + 'A');
- if (shiftcount == 0) {
+ if (shiftcount == 0 && j+4 < width) {
word = *(++p);
shiftcount = 64;
if (width-j-4 < 64)
Out << "zeroinitializer";
} else if (const ConstantArray *CA = dyn_cast<ConstantArray>(CV)) {
// As a special case, print the array as a string if it is an array of
- // ubytes or an array of sbytes with positive values.
+ // i8 with ConstantInt values.
//
const Type *ETy = CA->getType()->getElementType();
if (CA->isString()) {
printType(Operand->getType());
// Print parameter attributes list
if (Attrs != ParamAttr::None)
- Out << ' ' << ParamAttrsList::getParamAttrsText(Attrs);
+ Out << ' ' << ParamAttr::getAsString(Attrs);
// Print the operand
WriteAsOperandInternal(Out, Operand, TypeNames, &Machine);
}
Out << getLLVMName(F->getName(), GlobalPrefix);
else
Out << "@\"\"";
+ } else if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(Aliasee)) {
+ printType(GA->getType());
+ Out << " " << getLLVMName(GA->getName(), GlobalPrefix);
} else {
const ConstantExpr *CE = 0;
if ((CE = dyn_cast<ConstantExpr>(Aliasee)) &&
}
const FunctionType *FT = F->getFunctionType();
- const ParamAttrsList *Attrs = F->getParamAttrs();
+ const PAListPtr &Attrs = F->getParamAttrs();
printType(F->getReturnType()) << ' ';
if (!F->getName().empty())
Out << getLLVMName(F->getName(), GlobalPrefix);
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 ? Attrs->getParamAttrs(Idx)
- : ParamAttr::None));
+ printArgument(I, Attrs.getParamAttrs(Idx));
Idx++;
}
} else {
// Output type...
printType(FT->getParamType(i));
- ParameterAttributes ArgAttrs = ParamAttr::None;
- if (Attrs) ArgAttrs = Attrs->getParamAttrs(i+1);
+ ParameterAttributes ArgAttrs = Attrs.getParamAttrs(i+1);
if (ArgAttrs != ParamAttr::None)
- Out << ' ' << ParamAttrsList::getParamAttrsText(ArgAttrs);
+ Out << ' ' << ParamAttr::getAsString(ArgAttrs);
}
}
Out << "..."; // Output varargs portion of signature!
}
Out << ')';
- if (Attrs && Attrs->getParamAttrs(0) != ParamAttr::None)
- Out << ' ' << Attrs->getParamAttrsTextByIndex(0);
+ ParameterAttributes RetAttrs = Attrs.getParamAttrs(0);
+ if (RetAttrs != ParamAttr::None)
+ Out << ' ' << ParamAttr::getAsString(Attrs.getParamAttrs(0));
if (F->hasSection())
Out << " section \"" << F->getSection() << '"';
if (F->getAlignment())
if (F->isDeclaration()) {
Out << "\n";
} else {
- Out << " {\n";
+ Out << " {";
// Output all of its basic blocks... for the function
for (Function::const_iterator I = F->begin(), E = F->end(); I != E; ++I)
// Output parameter attributes list
if (Attrs != ParamAttr::None)
- Out << ' ' << ParamAttrsList::getParamAttrsText(Attrs);
+ Out << ' ' << ParamAttr::getAsString(Attrs);
// Output name, if available...
if (Arg->hasName())
/// printBasicBlock - This member is called for each basic block in a method.
///
void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
- if (BB->hasName()) // Print out the label if it exists...
- Out << getLLVMName(BB->getName(), LabelPrefix) << ':';
-
- if (const BasicBlock* unwindDest = BB->getUnwindDest()) {
- if (BB->hasName())
- Out << ' ';
-
- Out << "unwinds to";
- writeOperand(unwindDest, false);
- }
-
- if (!BB->hasName() && !BB->use_empty()) { // Don't print block # of no uses...
- Out << "; <label>:";
+ if (BB->hasName()) { // Print out the label if it exists...
+ Out << "\n" << getLLVMName(BB->getName(), LabelPrefix) << ':';
+ } else if (!BB->use_empty()) { // Don't print block # of no uses...
+ Out << "\n; <label>:";
int Slot = Machine.getLocalSlot(BB);
if (Slot != -1)
Out << Slot;
if (BB->getParent() == 0)
Out << "\t\t; Error: Block without parent!";
- else {
- if (BB != &BB->getParent()->getEntryBlock()) { // Not the entry block?
- // Output predecessors for the block...
- Out << "\t\t;";
- pred_const_iterator PI = pred_begin(BB), PE = pred_end(BB);
-
- if (PI == PE) {
- Out << " No predecessors!";
- } else {
- Out << " preds =";
+ else if (BB != &BB->getParent()->getEntryBlock()) { // Not the entry block?
+ // Output predecessors for the block...
+ Out << "\t\t;";
+ pred_const_iterator PI = pred_begin(BB), PE = pred_end(BB);
+
+ if (PI == PE) {
+ Out << " No predecessors!";
+ } else {
+ Out << " preds =";
+ writeOperand(*PI, false);
+ for (++PI; PI != PE; ++PI) {
+ Out << ',';
writeOperand(*PI, false);
- for (++PI; PI != PE; ++PI) {
- Out << ',';
- writeOperand(*PI, false);
- }
}
}
}
- if (BB->hasName() || !BB->use_empty() || BB->getUnwindDest() ||
- BB != &BB->getParent()->getEntryBlock())
- Out << "\n";
+ Out << "\n";
if (AnnotationWriter) AnnotationWriter->emitBasicBlockStartAnnot(BB, Out);
Out << I.getOpcodeName();
// Print out the compare instruction predicates
- if (const FCmpInst *FCI = dyn_cast<FCmpInst>(&I)) {
- Out << " " << getPredicateText(FCI->getPredicate());
- } else if (const ICmpInst *ICI = dyn_cast<ICmpInst>(&I)) {
- Out << " " << getPredicateText(ICI->getPredicate());
- }
+ if (const CmpInst *CI = dyn_cast<CmpInst>(&I))
+ Out << " " << getPredicateText(CI->getPredicate());
// Print out the type of the operands...
const Value *Operand = I.getNumOperands() ? I.getOperand(0) : 0;
const PointerType *PTy = cast<PointerType>(Operand->getType());
const FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
const Type *RetTy = FTy->getReturnType();
- const ParamAttrsList *PAL = CI->getParamAttrs();
+ const PAListPtr &PAL = CI->getParamAttrs();
// 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 ? PAL->getParamAttrs(op) :
- ParamAttr::None);
+ writeParamOperand(I.getOperand(op), PAL.getParamAttrs(op));
}
Out << " )";
- if (PAL && PAL->getParamAttrs(0) != ParamAttr::None)
- Out << ' ' << PAL->getParamAttrsTextByIndex(0);
+ if (PAL.getParamAttrs(0) != ParamAttr::None)
+ Out << ' ' << ParamAttr::getAsString(PAL.getParamAttrs(0));
} 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 ParamAttrsList *PAL = II->getParamAttrs();
+ const PAListPtr &PAL = II->getParamAttrs();
// Print the calling convention being used.
switch (II->getCallingConv()) {
for (unsigned op = 3, Eop = I.getNumOperands(); op < Eop; ++op) {
if (op > 3)
Out << ',';
- writeParamOperand(I.getOperand(op), PAL ? PAL->getParamAttrs(op-2) :
- ParamAttr::None);
+ writeParamOperand(I.getOperand(op), PAL.getParamAttrs(op-2));
}
Out << " )";
- if (PAL && PAL->getParamAttrs(0) != ParamAttr::None)
- Out << " " << PAL->getParamAttrsTextByIndex(0);
+ if (PAL.getParamAttrs(0) != ParamAttr::None)
+ Out << " " << ParamAttr::getAsString(PAL.getParamAttrs(0));
Out << "\n\t\t\tto";
writeOperand(II->getNormalDest(), true);
Out << " unwind";
// Located here because so much of the needed functionality is here.
void Type::dump() const { print(*cerr.stream()); cerr << '\n'; }
-void
-ParamAttrsList::dump() const {
- cerr << "PAL[ ";
- for (unsigned i = 0; i < attrs.size(); ++i) {
- uint16_t index = getParamIndex(i);
- ParameterAttributes attrs = getParamAttrs(index);
- cerr << "{" << index << "," << attrs << "} ";
- }
-
- cerr << "]\n";
-}
-
//===----------------------------------------------------------------------===//
// SlotMachine Implementation
//===----------------------------------------------------------------------===//