1//===-- CBackend.cpp - Library for converting LLVM code to C --------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This library converts LLVM code to C code, compilable by GCC and other C
11// compilers.
12//
13//===----------------------------------------------------------------------===//
14
15#include "CTargetMachine.h"
16#include "llvm/CallingConv.h"
17#include "llvm/Constants.h"
18#include "llvm/DerivedTypes.h"
19#include "llvm/Module.h"
20#include "llvm/Instructions.h"
21#include "llvm/Pass.h"
22#include "llvm/PassManager.h"
23#include "llvm/Intrinsics.h"
24#include "llvm/IntrinsicInst.h"
25#include "llvm/InlineAsm.h"
26#include "llvm/ADT/StringExtras.h"
27#include "llvm/ADT/SmallString.h"
28#include "llvm/ADT/STLExtras.h"
29#include "llvm/Analysis/ConstantsScanner.h"
30#include "llvm/Analysis/FindUsedTypes.h"
31#include "llvm/Analysis/LoopInfo.h"
32#include "llvm/Analysis/ValueTracking.h"
33#include "llvm/CodeGen/Passes.h"
34#include "llvm/CodeGen/IntrinsicLowering.h"
35#include "llvm/Target/Mangler.h"
36#include "llvm/Transforms/Scalar.h"
37#include "llvm/MC/MCAsmInfo.h"
38#include "llvm/MC/MCContext.h"
39#include "llvm/MC/MCInstrInfo.h"
40#include "llvm/MC/MCObjectFileInfo.h"
41#include "llvm/MC/MCRegisterInfo.h"
42#include "llvm/MC/MCSubtargetInfo.h"
43#include "llvm/MC/MCSymbol.h"
44#include "llvm/Target/TargetData.h"
45#include "llvm/Support/CallSite.h"
46#include "llvm/Support/CFG.h"
47#include "llvm/Support/ErrorHandling.h"
48#include "llvm/Support/FormattedStream.h"
49#include "llvm/Support/GetElementPtrTypeIterator.h"
50#include "llvm/Support/InstVisitor.h"
51#include "llvm/Support/MathExtras.h"
52#include "llvm/Support/TargetRegistry.h"
53#include "llvm/Support/Host.h"
54#include "llvm/Config/config.h"
55#include <algorithm>
56// Some ms header decided to define setjmp as _setjmp, undo this for this file.
57#ifdef _MSC_VER
58#undef setjmp
59#endif
60using namespace llvm;
61
62extern "C" void LLVMInitializeCBackendTarget() {
63  // Register the target.
64  RegisterTargetMachine<CTargetMachine> X(TheCBackendTarget);
65}
66
67namespace {
68  class CBEMCAsmInfo : public MCAsmInfo {
69  public:
70    CBEMCAsmInfo() {
71      GlobalPrefix = "";
72      PrivateGlobalPrefix = "";
73    }
74  };
75
76  /// CWriter - This class is the main chunk of code that converts an LLVM
77  /// module to a C translation unit.
78  class CWriter : public FunctionPass, public InstVisitor<CWriter> {
79    formatted_raw_ostream &Out;
80    IntrinsicLowering *IL;
81    Mangler *Mang;
82    LoopInfo *LI;
83    const Module *TheModule;
84    const MCAsmInfo* TAsm;
85    const MCRegisterInfo *MRI;
86    const MCObjectFileInfo *MOFI;
87    MCContext *TCtx;
88    const TargetData* TD;
89
90    std::map<const ConstantFP *, unsigned> FPConstantMap;
91    std::set<Function*> intrinsicPrototypesAlreadyGenerated;
92    std::set<const Argument*> ByValParams;
93    unsigned FPCounter;
94    unsigned OpaqueCounter;
95    DenseMap<const Value*, unsigned> AnonValueNumbers;
96    unsigned NextAnonValueNumber;
97
98    /// UnnamedStructIDs - This contains a unique ID for each struct that is
99    /// either anonymous or has no name.
100    DenseMap<StructType*, unsigned> UnnamedStructIDs;
101
102  public:
103    static char ID;
104    explicit CWriter(formatted_raw_ostream &o)
105      : FunctionPass(ID), Out(o), IL(0), Mang(0), LI(0),
106        TheModule(0), TAsm(0), MRI(0), MOFI(0), TCtx(0), TD(0),
107        OpaqueCounter(0), NextAnonValueNumber(0) {
108      initializeLoopInfoPass(*PassRegistry::getPassRegistry());
109      FPCounter = 0;
110    }
111
112    virtual const char *getPassName() const { return "C backend"; }
113
114    void getAnalysisUsage(AnalysisUsage &AU) const {
115      AU.addRequired<LoopInfo>();
116      AU.setPreservesAll();
117    }
118
119    virtual bool doInitialization(Module &M);
120
121    bool runOnFunction(Function &F) {
122     // Do not codegen any 'available_externally' functions at all, they have
123     // definitions outside the translation unit.
124     if (F.hasAvailableExternallyLinkage())
125       return false;
126
127      LI = &getAnalysis<LoopInfo>();
128
129      // Get rid of intrinsics we can't handle.
130      lowerIntrinsics(F);
131
132      // Output all floating point constants that cannot be printed accurately.
133      printFloatingPointConstants(F);
134
135      printFunction(F);
136      return false;
137    }
138
139    virtual bool doFinalization(Module &M) {
140      // Free memory...
141      delete IL;
142      delete TD;
143      delete Mang;
144      delete TCtx;
145      delete TAsm;
146      delete MRI;
147      delete MOFI;
148      FPConstantMap.clear();
149      ByValParams.clear();
150      intrinsicPrototypesAlreadyGenerated.clear();
151      UnnamedStructIDs.clear();
152      return false;
153    }
154
155    raw_ostream &printType(raw_ostream &Out, Type *Ty,
156                           bool isSigned = false,
157                           const std::string &VariableName = "",
158                           bool IgnoreName = false,
159                           const AttrListPtr &PAL = AttrListPtr());
160    raw_ostream &printSimpleType(raw_ostream &Out, Type *Ty,
161                                 bool isSigned,
162                                 const std::string &NameSoFar = "");
163
164    void printStructReturnPointerFunctionType(raw_ostream &Out,
165                                              const AttrListPtr &PAL,
166                                              PointerType *Ty);
167
168    std::string getStructName(StructType *ST);
169
170    /// writeOperandDeref - Print the result of dereferencing the specified
171    /// operand with '*'.  This is equivalent to printing '*' then using
172    /// writeOperand, but avoids excess syntax in some cases.
173    void writeOperandDeref(Value *Operand) {
174      if (isAddressExposed(Operand)) {
175        // Already something with an address exposed.
176        writeOperandInternal(Operand);
177      } else {
178        Out << "*(";
179        writeOperand(Operand);
180        Out << ")";
181      }
182    }
183
184    void writeOperand(Value *Operand, bool Static = false);
185    void writeInstComputationInline(Instruction &I);
186    void writeOperandInternal(Value *Operand, bool Static = false);
187    void writeOperandWithCast(Value* Operand, unsigned Opcode);
188    void writeOperandWithCast(Value* Operand, const ICmpInst &I);
189    bool writeInstructionCast(const Instruction &I);
190
191    void writeMemoryAccess(Value *Operand, Type *OperandType,
192                           bool IsVolatile, unsigned Alignment);
193
194  private :
195    std::string InterpretASMConstraint(InlineAsm::ConstraintInfo& c);
196
197    void lowerIntrinsics(Function &F);
198    /// Prints the definition of the intrinsic function F. Supports the
199    /// intrinsics which need to be explicitly defined in the CBackend.
200    void printIntrinsicDefinition(const Function &F, raw_ostream &Out);
201
202    void printModuleTypes();
203    void printContainedStructs(Type *Ty, SmallPtrSet<Type *, 16> &);
204    void printFloatingPointConstants(Function &F);
205    void printFloatingPointConstants(const Constant *C);
206    void printFunctionSignature(const Function *F, bool Prototype);
207
208    void printFunction(Function &);
209    void printBasicBlock(BasicBlock *BB);
210    void printLoop(Loop *L);
211
212    void printCast(unsigned opcode, Type *SrcTy, Type *DstTy);
213    void printConstant(Constant *CPV, bool Static);
214    void printConstantWithCast(Constant *CPV, unsigned Opcode);
215    bool printConstExprCast(const ConstantExpr *CE, bool Static);
216    void printConstantArray(ConstantArray *CPA, bool Static);
217    void printConstantVector(ConstantVector *CV, bool Static);
218
219    /// isAddressExposed - Return true if the specified value's name needs to
220    /// have its address taken in order to get a C value of the correct type.
221    /// This happens for global variables, byval parameters, and direct allocas.
222    bool isAddressExposed(const Value *V) const {
223      if (const Argument *A = dyn_cast<Argument>(V))
224        return ByValParams.count(A);
225      return isa<GlobalVariable>(V) || isDirectAlloca(V);
226    }
227
228    // isInlinableInst - Attempt to inline instructions into their uses to build
229    // trees as much as possible.  To do this, we have to consistently decide
230    // what is acceptable to inline, so that variable declarations don't get
231    // printed and an extra copy of the expr is not emitted.
232    //
233    static bool isInlinableInst(const Instruction &I) {
234      // Always inline cmp instructions, even if they are shared by multiple
235      // expressions.  GCC generates horrible code if we don't.
236      if (isa<CmpInst>(I))
237        return true;
238
239      // Must be an expression, must be used exactly once.  If it is dead, we
240      // emit it inline where it would go.
241      if (I.getType() == Type::getVoidTy(I.getContext()) || !I.hasOneUse() ||
242          isa<TerminatorInst>(I) || isa<CallInst>(I) || isa<PHINode>(I) ||
243          isa<LoadInst>(I) || isa<VAArgInst>(I) || isa<InsertElementInst>(I) ||
244          isa<InsertValueInst>(I))
245        // Don't inline a load across a store or other bad things!
246        return false;
247
248      // Must not be used in inline asm, extractelement, or shufflevector.
249      if (I.hasOneUse()) {
250        const Instruction &User = cast<Instruction>(*I.use_back());
251        if (isInlineAsm(User) || isa<ExtractElementInst>(User) ||
252            isa<ShuffleVectorInst>(User))
253          return false;
254      }
255
256      // Only inline instruction it if it's use is in the same BB as the inst.
257      return I.getParent() == cast<Instruction>(I.use_back())->getParent();
258    }
259
260    // isDirectAlloca - Define fixed sized allocas in the entry block as direct
261    // variables which are accessed with the & operator.  This causes GCC to
262    // generate significantly better code than to emit alloca calls directly.
263    //
264    static const AllocaInst *isDirectAlloca(const Value *V) {
265      const AllocaInst *AI = dyn_cast<AllocaInst>(V);
266      if (!AI) return 0;
267      if (AI->isArrayAllocation())
268        return 0;   // FIXME: we can also inline fixed size array allocas!
269      if (AI->getParent() != &AI->getParent()->getParent()->getEntryBlock())
270        return 0;
271      return AI;
272    }
273
274    // isInlineAsm - Check if the instruction is a call to an inline asm chunk.
275    static bool isInlineAsm(const Instruction& I) {
276      if (const CallInst *CI = dyn_cast<CallInst>(&I))
277        return isa<InlineAsm>(CI->getCalledValue());
278      return false;
279    }
280
281    // Instruction visitation functions
282    friend class InstVisitor<CWriter>;
283
284    void visitReturnInst(ReturnInst &I);
285    void visitBranchInst(BranchInst &I);
286    void visitSwitchInst(SwitchInst &I);
287    void visitIndirectBrInst(IndirectBrInst &I);
288    void visitInvokeInst(InvokeInst &I) {
289      llvm_unreachable("Lowerinvoke pass didn't work!");
290    }
291    void visitUnwindInst(UnwindInst &I) {
292      llvm_unreachable("Lowerinvoke pass didn't work!");
293    }
294    void visitResumeInst(ResumeInst &I) {
295      llvm_unreachable("DwarfEHPrepare pass didn't work!");
296    }
297    void visitUnreachableInst(UnreachableInst &I);
298
299    void visitPHINode(PHINode &I);
300    void visitBinaryOperator(Instruction &I);
301    void visitICmpInst(ICmpInst &I);
302    void visitFCmpInst(FCmpInst &I);
303
304    void visitCastInst (CastInst &I);
305    void visitSelectInst(SelectInst &I);
306    void visitCallInst (CallInst &I);
307    void visitInlineAsm(CallInst &I);
308    bool visitBuiltinCall(CallInst &I, Intrinsic::ID ID, bool &WroteCallee);
309
310    void visitAllocaInst(AllocaInst &I);
311    void visitLoadInst  (LoadInst   &I);
312    void visitStoreInst (StoreInst  &I);
313    void visitGetElementPtrInst(GetElementPtrInst &I);
314    void visitVAArgInst (VAArgInst &I);
315
316    void visitInsertElementInst(InsertElementInst &I);
317    void visitExtractElementInst(ExtractElementInst &I);
318    void visitShuffleVectorInst(ShuffleVectorInst &SVI);
319
320    void visitInsertValueInst(InsertValueInst &I);
321    void visitExtractValueInst(ExtractValueInst &I);
322
323    void visitInstruction(Instruction &I) {
324#ifndef NDEBUG
325      errs() << "C Writer does not know about " << I;
326#endif
327      llvm_unreachable(0);
328    }
329
330    void outputLValue(Instruction *I) {
331      Out << "  " << GetValueName(I) << " = ";
332    }
333
334    bool isGotoCodeNecessary(BasicBlock *From, BasicBlock *To);
335    void printPHICopiesForSuccessor(BasicBlock *CurBlock,
336                                    BasicBlock *Successor, unsigned Indent);
337    void printBranchToBlock(BasicBlock *CurBlock, BasicBlock *SuccBlock,
338                            unsigned Indent);
339    void printGEPExpression(Value *Ptr, gep_type_iterator I,
340                            gep_type_iterator E, bool Static);
341
342    std::string GetValueName(const Value *Operand);
343  };
344}
345
346char CWriter::ID = 0;
347
348
349
350static std::string CBEMangle(const std::string &S) {
351  std::string Result;
352
353  for (unsigned i = 0, e = S.size(); i != e; ++i)
354    if (isalnum(S[i]) || S[i] == '_') {
355      Result += S[i];
356    } else {
357      Result += '_';
358      Result += 'A'+(S[i]&15);
359      Result += 'A'+((S[i]>>4)&15);
360      Result += '_';
361    }
362  return Result;
363}
364
365std::string CWriter::getStructName(StructType *ST) {
366  if (!ST->isLiteral() && !ST->getName().empty())
367    return CBEMangle("l_"+ST->getName().str());
368
369  return "l_unnamed_" + utostr(UnnamedStructIDs[ST]);
370}
371
372
373/// printStructReturnPointerFunctionType - This is like printType for a struct
374/// return type, except, instead of printing the type as void (*)(Struct*, ...)
375/// print it as "Struct (*)(...)", for struct return functions.
376void CWriter::printStructReturnPointerFunctionType(raw_ostream &Out,
377                                                   const AttrListPtr &PAL,
378                                                   PointerType *TheTy) {
379  FunctionType *FTy = cast<FunctionType>(TheTy->getElementType());
380  std::string tstr;
381  raw_string_ostream FunctionInnards(tstr);
382  FunctionInnards << " (*) (";
383  bool PrintedType = false;
384
385  FunctionType::param_iterator I = FTy->param_begin(), E = FTy->param_end();
386  Type *RetTy = cast<PointerType>(*I)->getElementType();
387  unsigned Idx = 1;
388  for (++I, ++Idx; I != E; ++I, ++Idx) {
389    if (PrintedType)
390      FunctionInnards << ", ";
391    Type *ArgTy = *I;
392    if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
393      assert(ArgTy->isPointerTy());
394      ArgTy = cast<PointerType>(ArgTy)->getElementType();
395    }
396    printType(FunctionInnards, ArgTy,
397        /*isSigned=*/PAL.paramHasAttr(Idx, Attribute::SExt), "");
398    PrintedType = true;
399  }
400  if (FTy->isVarArg()) {
401    if (!PrintedType)
402      FunctionInnards << " int"; //dummy argument for empty vararg functs
403    FunctionInnards << ", ...";
404  } else if (!PrintedType) {
405    FunctionInnards << "void";
406  }
407  FunctionInnards << ')';
408  printType(Out, RetTy,
409      /*isSigned=*/PAL.paramHasAttr(0, Attribute::SExt), FunctionInnards.str());
410}
411
412raw_ostream &
413CWriter::printSimpleType(raw_ostream &Out, Type *Ty, bool isSigned,
414                         const std::string &NameSoFar) {
415  assert((Ty->isPrimitiveType() || Ty->isIntegerTy() || Ty->isVectorTy()) &&
416         "Invalid type for printSimpleType");
417  switch (Ty->getTypeID()) {
418  case Type::VoidTyID:   return Out << "void " << NameSoFar;
419  case Type::IntegerTyID: {
420    unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth();
421    if (NumBits == 1)
422      return Out << "bool " << NameSoFar;
423    else if (NumBits <= 8)
424      return Out << (isSigned?"signed":"unsigned") << " char " << NameSoFar;
425    else if (NumBits <= 16)
426      return Out << (isSigned?"signed":"unsigned") << " short " << NameSoFar;
427    else if (NumBits <= 32)
428      return Out << (isSigned?"signed":"unsigned") << " int " << NameSoFar;
429    else if (NumBits <= 64)
430      return Out << (isSigned?"signed":"unsigned") << " long long "<< NameSoFar;
431    else {
432      assert(NumBits <= 128 && "Bit widths > 128 not implemented yet");
433      return Out << (isSigned?"llvmInt128":"llvmUInt128") << " " << NameSoFar;
434    }
435  }
436  case Type::FloatTyID:  return Out << "float "   << NameSoFar;
437  case Type::DoubleTyID: return Out << "double "  << NameSoFar;
438  // Lacking emulation of FP80 on PPC, etc., we assume whichever of these is
439  // present matches host 'long double'.
440  case Type::X86_FP80TyID:
441  case Type::PPC_FP128TyID:
442  case Type::FP128TyID:  return Out << "long double " << NameSoFar;
443
444  case Type::X86_MMXTyID:
445    return printSimpleType(Out, Type::getInt32Ty(Ty->getContext()), isSigned,
446                     " __attribute__((vector_size(64))) " + NameSoFar);
447
448  case Type::VectorTyID: {
449    VectorType *VTy = cast<VectorType>(Ty);
450    return printSimpleType(Out, VTy->getElementType(), isSigned,
451                     " __attribute__((vector_size(" +
452                     utostr(TD->getTypeAllocSize(VTy)) + " ))) " + NameSoFar);
453  }
454
455  default:
456#ifndef NDEBUG
457    errs() << "Unknown primitive type: " << *Ty << "\n";
458#endif
459    llvm_unreachable(0);
460  }
461}
462
463// Pass the Type* and the variable name and this prints out the variable
464// declaration.
465//
466raw_ostream &CWriter::printType(raw_ostream &Out, Type *Ty,
467                                bool isSigned, const std::string &NameSoFar,
468                                bool IgnoreName, const AttrListPtr &PAL) {
469  if (Ty->isPrimitiveType() || Ty->isIntegerTy() || Ty->isVectorTy()) {
470    printSimpleType(Out, Ty, isSigned, NameSoFar);
471    return Out;
472  }
473
474  switch (Ty->getTypeID()) {
475  case Type::FunctionTyID: {
476    FunctionType *FTy = cast<FunctionType>(Ty);
477    std::string tstr;
478    raw_string_ostream FunctionInnards(tstr);
479    FunctionInnards << " (" << NameSoFar << ") (";
480    unsigned Idx = 1;
481    for (FunctionType::param_iterator I = FTy->param_begin(),
482           E = FTy->param_end(); I != E; ++I) {
483      Type *ArgTy = *I;
484      if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
485        assert(ArgTy->isPointerTy());
486        ArgTy = cast<PointerType>(ArgTy)->getElementType();
487      }
488      if (I != FTy->param_begin())
489        FunctionInnards << ", ";
490      printType(FunctionInnards, ArgTy,
491        /*isSigned=*/PAL.paramHasAttr(Idx, Attribute::SExt), "");
492      ++Idx;
493    }
494    if (FTy->isVarArg()) {
495      if (!FTy->getNumParams())
496        FunctionInnards << " int"; //dummy argument for empty vaarg functs
497      FunctionInnards << ", ...";
498    } else if (!FTy->getNumParams()) {
499      FunctionInnards << "void";
500    }
501    FunctionInnards << ')';
502    printType(Out, FTy->getReturnType(),
503      /*isSigned=*/PAL.paramHasAttr(0, Attribute::SExt), FunctionInnards.str());
504    return Out;
505  }
506  case Type::StructTyID: {
507    StructType *STy = cast<StructType>(Ty);
508
509    // Check to see if the type is named.
510    if (!IgnoreName)
511      return Out << getStructName(STy) << ' ' << NameSoFar;
512
513    Out << NameSoFar + " {\n";
514    unsigned Idx = 0;
515    for (StructType::element_iterator I = STy->element_begin(),
516           E = STy->element_end(); I != E; ++I) {
517      Out << "  ";
518      printType(Out, *I, false, "field" + utostr(Idx++));
519      Out << ";\n";
520    }
521    Out << '}';
522    if (STy->isPacked())
523      Out << " __attribute__ ((packed))";
524    return Out;
525  }
526
527  case Type::PointerTyID: {
528    PointerType *PTy = cast<PointerType>(Ty);
529    std::string ptrName = "*" + NameSoFar;
530
531    if (PTy->getElementType()->isArrayTy() ||
532        PTy->getElementType()->isVectorTy())
533      ptrName = "(" + ptrName + ")";
534
535    if (!PAL.isEmpty())
536      // Must be a function ptr cast!
537      return printType(Out, PTy->getElementType(), false, ptrName, true, PAL);
538    return printType(Out, PTy->getElementType(), false, ptrName);
539  }
540
541  case Type::ArrayTyID: {
542    ArrayType *ATy = cast<ArrayType>(Ty);
543    unsigned NumElements = ATy->getNumElements();
544    if (NumElements == 0) NumElements = 1;
545    // Arrays are wrapped in structs to allow them to have normal
546    // value semantics (avoiding the array "decay").
547    Out << NameSoFar << " { ";
548    printType(Out, ATy->getElementType(), false,
549              "array[" + utostr(NumElements) + "]");
550    return Out << "; }";
551  }
552
553  default:
554    llvm_unreachable("Unhandled case in getTypeProps!");
555  }
556
557  return Out;
558}
559
560void CWriter::printConstantArray(ConstantArray *CPA, bool Static) {
561
562  // As a special case, print the array as a string if it is an array of
563  // ubytes or an array of sbytes with positive values.
564  //
565  Type *ETy = CPA->getType()->getElementType();
566  bool isString = (ETy == Type::getInt8Ty(CPA->getContext()) ||
567                   ETy == Type::getInt8Ty(CPA->getContext()));
568
569  // Make sure the last character is a null char, as automatically added by C
570  if (isString && (CPA->getNumOperands() == 0 ||
571                   !cast<Constant>(*(CPA->op_end()-1))->isNullValue()))
572    isString = false;
573
574  if (isString) {
575    Out << '\"';
576    // Keep track of whether the last number was a hexadecimal escape.
577    bool LastWasHex = false;
578
579    // Do not include the last character, which we know is null
580    for (unsigned i = 0, e = CPA->getNumOperands()-1; i != e; ++i) {
581      unsigned char C = cast<ConstantInt>(CPA->getOperand(i))->getZExtValue();
582
583      // Print it out literally if it is a printable character.  The only thing
584      // to be careful about is when the last letter output was a hex escape
585      // code, in which case we have to be careful not to print out hex digits
586      // explicitly (the C compiler thinks it is a continuation of the previous
587      // character, sheesh...)
588      //
589      if (isprint(C) && (!LastWasHex || !isxdigit(C))) {
590        LastWasHex = false;
591        if (C == '"' || C == '\\')
592          Out << "\\" << (char)C;
593        else
594          Out << (char)C;
595      } else {
596        LastWasHex = false;
597        switch (C) {
598        case '\n': Out << "\\n"; break;
599        case '\t': Out << "\\t"; break;
600        case '\r': Out << "\\r"; break;
601        case '\v': Out << "\\v"; break;
602        case '\a': Out << "\\a"; break;
603        case '\"': Out << "\\\""; break;
604        case '\'': Out << "\\\'"; break;
605        default:
606          Out << "\\x";
607          Out << (char)(( C/16  < 10) ? ( C/16 +'0') : ( C/16 -10+'A'));
608          Out << (char)(((C&15) < 10) ? ((C&15)+'0') : ((C&15)-10+'A'));
609          LastWasHex = true;
610          break;
611        }
612      }
613    }
614    Out << '\"';
615  } else {
616    Out << '{';
617    if (CPA->getNumOperands()) {
618      Out << ' ';
619      printConstant(cast<Constant>(CPA->getOperand(0)), Static);
620      for (unsigned i = 1, e = CPA->getNumOperands(); i != e; ++i) {
621        Out << ", ";
622        printConstant(cast<Constant>(CPA->getOperand(i)), Static);
623      }
624    }
625    Out << " }";
626  }
627}
628
629void CWriter::printConstantVector(ConstantVector *CP, bool Static) {
630  Out << '{';
631  if (CP->getNumOperands()) {
632    Out << ' ';
633    printConstant(cast<Constant>(CP->getOperand(0)), Static);
634    for (unsigned i = 1, e = CP->getNumOperands(); i != e; ++i) {
635      Out << ", ";
636      printConstant(cast<Constant>(CP->getOperand(i)), Static);
637    }
638  }
639  Out << " }";
640}
641
642// isFPCSafeToPrint - Returns true if we may assume that CFP may be written out
643// textually as a double (rather than as a reference to a stack-allocated
644// variable). We decide this by converting CFP to a string and back into a
645// double, and then checking whether the conversion results in a bit-equal
646// double to the original value of CFP. This depends on us and the target C
647// compiler agreeing on the conversion process (which is pretty likely since we
648// only deal in IEEE FP).
649//
650static bool isFPCSafeToPrint(const ConstantFP *CFP) {
651  bool ignored;
652  // Do long doubles in hex for now.
653  if (CFP->getType() != Type::getFloatTy(CFP->getContext()) &&
654      CFP->getType() != Type::getDoubleTy(CFP->getContext()))
655    return false;
656  APFloat APF = APFloat(CFP->getValueAPF());  // copy
657  if (CFP->getType() == Type::getFloatTy(CFP->getContext()))
658    APF.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, &ignored);
659#if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A
660  char Buffer[100];
661  sprintf(Buffer, "%a", APF.convertToDouble());
662  if (!strncmp(Buffer, "0x", 2) ||
663      !strncmp(Buffer, "-0x", 3) ||
664      !strncmp(Buffer, "+0x", 3))
665    return APF.bitwiseIsEqual(APFloat(atof(Buffer)));
666  return false;
667#else
668  std::string StrVal = ftostr(APF);
669
670  while (StrVal[0] == ' ')
671    StrVal.erase(StrVal.begin());
672
673  // Check to make sure that the stringized number is not some string like "Inf"
674  // or NaN.  Check that the string matches the "[-+]?[0-9]" regex.
675  if ((StrVal[0] >= '0' && StrVal[0] <= '9') ||
676      ((StrVal[0] == '-' || StrVal[0] == '+') &&
677       (StrVal[1] >= '0' && StrVal[1] <= '9')))
678    // Reparse stringized version!
679    return APF.bitwiseIsEqual(APFloat(atof(StrVal.c_str())));
680  return false;
681#endif
682}
683
684/// Print out the casting for a cast operation. This does the double casting
685/// necessary for conversion to the destination type, if necessary.
686/// @brief Print a cast
687void CWriter::printCast(unsigned opc, Type *SrcTy, Type *DstTy) {
688  // Print the destination type cast
689  switch (opc) {
690    case Instruction::UIToFP:
691    case Instruction::SIToFP:
692    case Instruction::IntToPtr:
693    case Instruction::Trunc:
694    case Instruction::BitCast:
695    case Instruction::FPExt:
696    case Instruction::FPTrunc: // For these the DstTy sign doesn't matter
697      Out << '(';
698      printType(Out, DstTy);
699      Out << ')';
700      break;
701    case Instruction::ZExt:
702    case Instruction::PtrToInt:
703    case Instruction::FPToUI: // For these, make sure we get an unsigned dest
704      Out << '(';
705      printSimpleType(Out, DstTy, false);
706      Out << ')';
707      break;
708    case Instruction::SExt:
709    case Instruction::FPToSI: // For these, make sure we get a signed dest
710      Out << '(';
711      printSimpleType(Out, DstTy, true);
712      Out << ')';
713      break;
714    default:
715      llvm_unreachable("Invalid cast opcode");
716  }
717
718  // Print the source type cast
719  switch (opc) {
720    case Instruction::UIToFP:
721    case Instruction::ZExt:
722      Out << '(';
723      printSimpleType(Out, SrcTy, false);
724      Out << ')';
725      break;
726    case Instruction::SIToFP:
727    case Instruction::SExt:
728      Out << '(';
729      printSimpleType(Out, SrcTy, true);
730      Out << ')';
731      break;
732    case Instruction::IntToPtr:
733    case Instruction::PtrToInt:
734      // Avoid "cast to pointer from integer of different size" warnings
735      Out << "(unsigned long)";
736      break;
737    case Instruction::Trunc:
738    case Instruction::BitCast:
739    case Instruction::FPExt:
740    case Instruction::FPTrunc:
741    case Instruction::FPToSI:
742    case Instruction::FPToUI:
743      break; // These don't need a source cast.
744    default:
745      llvm_unreachable("Invalid cast opcode");
746      break;
747  }
748}
749
750// printConstant - The LLVM Constant to C Constant converter.
751void CWriter::printConstant(Constant *CPV, bool Static) {
752  if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) {
753    switch (CE->getOpcode()) {
754    case Instruction::Trunc:
755    case Instruction::ZExt:
756    case Instruction::SExt:
757    case Instruction::FPTrunc:
758    case Instruction::FPExt:
759    case Instruction::UIToFP:
760    case Instruction::SIToFP:
761    case Instruction::FPToUI:
762    case Instruction::FPToSI:
763    case Instruction::PtrToInt:
764    case Instruction::IntToPtr:
765    case Instruction::BitCast:
766      Out << "(";
767      printCast(CE->getOpcode(), CE->getOperand(0)->getType(), CE->getType());
768      if (CE->getOpcode() == Instruction::SExt &&
769          CE->getOperand(0)->getType() == Type::getInt1Ty(CPV->getContext())) {
770        // Make sure we really sext from bool here by subtracting from 0
771        Out << "0-";
772      }
773      printConstant(CE->getOperand(0), Static);
774      if (CE->getType() == Type::getInt1Ty(CPV->getContext()) &&
775          (CE->getOpcode() == Instruction::Trunc ||
776           CE->getOpcode() == Instruction::FPToUI ||
777           CE->getOpcode() == Instruction::FPToSI ||
778           CE->getOpcode() == Instruction::PtrToInt)) {
779        // Make sure we really truncate to bool here by anding with 1
780        Out << "&1u";
781      }
782      Out << ')';
783      return;
784
785    case Instruction::GetElementPtr:
786      Out << "(";
787      printGEPExpression(CE->getOperand(0), gep_type_begin(CPV),
788                         gep_type_end(CPV), Static);
789      Out << ")";
790      return;
791    case Instruction::Select:
792      Out << '(';
793      printConstant(CE->getOperand(0), Static);
794      Out << '?';
795      printConstant(CE->getOperand(1), Static);
796      Out << ':';
797      printConstant(CE->getOperand(2), Static);
798      Out << ')';
799      return;
800    case Instruction::Add:
801    case Instruction::FAdd:
802    case Instruction::Sub:
803    case Instruction::FSub:
804    case Instruction::Mul:
805    case Instruction::FMul:
806    case Instruction::SDiv:
807    case Instruction::UDiv:
808    case Instruction::FDiv:
809    case Instruction::URem:
810    case Instruction::SRem:
811    case Instruction::FRem:
812    case Instruction::And:
813    case Instruction::Or:
814    case Instruction::Xor:
815    case Instruction::ICmp:
816    case Instruction::Shl:
817    case Instruction::LShr:
818    case Instruction::AShr:
819    {
820      Out << '(';
821      bool NeedsClosingParens = printConstExprCast(CE, Static);
822      printConstantWithCast(CE->getOperand(0), CE->getOpcode());
823      switch (CE->getOpcode()) {
824      case Instruction::Add:
825      case Instruction::FAdd: Out << " + "; break;
826      case Instruction::Sub:
827      case Instruction::FSub: Out << " - "; break;
828      case Instruction::Mul:
829      case Instruction::FMul: Out << " * "; break;
830      case Instruction::URem:
831      case Instruction::SRem:
832      case Instruction::FRem: Out << " % "; break;
833      case Instruction::UDiv:
834      case Instruction::SDiv:
835      case Instruction::FDiv: Out << " / "; break;
836      case Instruction::And: Out << " & "; break;
837      case Instruction::Or:  Out << " | "; break;
838      case Instruction::Xor: Out << " ^ "; break;
839      case Instruction::Shl: Out << " << "; break;
840      case Instruction::LShr:
841      case Instruction::AShr: Out << " >> "; break;
842      case Instruction::ICmp:
843        switch (CE->getPredicate()) {
844          case ICmpInst::ICMP_EQ: Out << " == "; break;
845          case ICmpInst::ICMP_NE: Out << " != "; break;
846          case ICmpInst::ICMP_SLT:
847          case ICmpInst::ICMP_ULT: Out << " < "; break;
848          case ICmpInst::ICMP_SLE:
849          case ICmpInst::ICMP_ULE: Out << " <= "; break;
850          case ICmpInst::ICMP_SGT:
851          case ICmpInst::ICMP_UGT: Out << " > "; break;
852          case ICmpInst::ICMP_SGE:
853          case ICmpInst::ICMP_UGE: Out << " >= "; break;
854          default: llvm_unreachable("Illegal ICmp predicate");
855        }
856        break;
857      default: llvm_unreachable("Illegal opcode here!");
858      }
859      printConstantWithCast(CE->getOperand(1), CE->getOpcode());
860      if (NeedsClosingParens)
861        Out << "))";
862      Out << ')';
863      return;
864    }
865    case Instruction::FCmp: {
866      Out << '(';
867      bool NeedsClosingParens = printConstExprCast(CE, Static);
868      if (CE->getPredicate() == FCmpInst::FCMP_FALSE)
869        Out << "0";
870      else if (CE->getPredicate() == FCmpInst::FCMP_TRUE)
871        Out << "1";
872      else {
873        const char* op = 0;
874        switch (CE->getPredicate()) {
875        default: llvm_unreachable("Illegal FCmp predicate");
876        case FCmpInst::FCMP_ORD: op = "ord"; break;
877        case FCmpInst::FCMP_UNO: op = "uno"; break;
878        case FCmpInst::FCMP_UEQ: op = "ueq"; break;
879        case FCmpInst::FCMP_UNE: op = "une"; break;
880        case FCmpInst::FCMP_ULT: op = "ult"; break;
881        case FCmpInst::FCMP_ULE: op = "ule"; break;
882        case FCmpInst::FCMP_UGT: op = "ugt"; break;
883        case FCmpInst::FCMP_UGE: op = "uge"; break;
884        case FCmpInst::FCMP_OEQ: op = "oeq"; break;
885        case FCmpInst::FCMP_ONE: op = "one"; break;
886        case FCmpInst::FCMP_OLT: op = "olt"; break;
887        case FCmpInst::FCMP_OLE: op = "ole"; break;
888        case FCmpInst::FCMP_OGT: op = "ogt"; break;
889        case FCmpInst::FCMP_OGE: op = "oge"; break;
890        }
891        Out << "llvm_fcmp_" << op << "(";
892        printConstantWithCast(CE->getOperand(0), CE->getOpcode());
893        Out << ", ";
894        printConstantWithCast(CE->getOperand(1), CE->getOpcode());
895        Out << ")";
896      }
897      if (NeedsClosingParens)
898        Out << "))";
899      Out << ')';
900      return;
901    }
902    default:
903#ifndef NDEBUG
904      errs() << "CWriter Error: Unhandled constant expression: "
905           << *CE << "\n";
906#endif
907      llvm_unreachable(0);
908    }
909  } else if (isa<UndefValue>(CPV) && CPV->getType()->isSingleValueType()) {
910    Out << "((";
911    printType(Out, CPV->getType()); // sign doesn't matter
912    Out << ")/*UNDEF*/";
913    if (!CPV->getType()->isVectorTy()) {
914      Out << "0)";
915    } else {
916      Out << "{})";
917    }
918    return;
919  }
920
921  if (ConstantInt *CI = dyn_cast<ConstantInt>(CPV)) {
922    Type* Ty = CI->getType();
923    if (Ty == Type::getInt1Ty(CPV->getContext()))
924      Out << (CI->getZExtValue() ? '1' : '0');
925    else if (Ty == Type::getInt32Ty(CPV->getContext()))
926      Out << CI->getZExtValue() << 'u';
927    else if (Ty->getPrimitiveSizeInBits() > 32)
928      Out << CI->getZExtValue() << "ull";
929    else {
930      Out << "((";
931      printSimpleType(Out, Ty, false) << ')';
932      if (CI->isMinValue(true))
933        Out << CI->getZExtValue() << 'u';
934      else
935        Out << CI->getSExtValue();
936      Out << ')';
937    }
938    return;
939  }
940
941  switch (CPV->getType()->getTypeID()) {
942  case Type::FloatTyID:
943  case Type::DoubleTyID:
944  case Type::X86_FP80TyID:
945  case Type::PPC_FP128TyID:
946  case Type::FP128TyID: {
947    ConstantFP *FPC = cast<ConstantFP>(CPV);
948    std::map<const ConstantFP*, unsigned>::iterator I = FPConstantMap.find(FPC);
949    if (I != FPConstantMap.end()) {
950      // Because of FP precision problems we must load from a stack allocated
951      // value that holds the value in hex.
952      Out << "(*(" << (FPC->getType() == Type::getFloatTy(CPV->getContext()) ?
953                       "float" :
954                       FPC->getType() == Type::getDoubleTy(CPV->getContext()) ?
955                       "double" :
956                       "long double")
957          << "*)&FPConstant" << I->second << ')';
958    } else {
959      double V;
960      if (FPC->getType() == Type::getFloatTy(CPV->getContext()))
961        V = FPC->getValueAPF().convertToFloat();
962      else if (FPC->getType() == Type::getDoubleTy(CPV->getContext()))
963        V = FPC->getValueAPF().convertToDouble();
964      else {
965        // Long double.  Convert the number to double, discarding precision.
966        // This is not awesome, but it at least makes the CBE output somewhat
967        // useful.
968        APFloat Tmp = FPC->getValueAPF();
969        bool LosesInfo;
970        Tmp.convert(APFloat::IEEEdouble, APFloat::rmTowardZero, &LosesInfo);
971        V = Tmp.convertToDouble();
972      }
973
974      if (IsNAN(V)) {
975        // The value is NaN
976
977        // FIXME the actual NaN bits should be emitted.
978        // The prefix for a quiet NaN is 0x7FF8. For a signalling NaN,
979        // it's 0x7ff4.
980        const unsigned long QuietNaN = 0x7ff8UL;
981        //const unsigned long SignalNaN = 0x7ff4UL;
982
983        // We need to grab the first part of the FP #
984        char Buffer[100];
985
986        uint64_t ll = DoubleToBits(V);
987        sprintf(Buffer, "0x%llx", static_cast<long long>(ll));
988
989        std::string Num(&Buffer[0], &Buffer[6]);
990        unsigned long Val = strtoul(Num.c_str(), 0, 16);
991
992        if (FPC->getType() == Type::getFloatTy(FPC->getContext()))
993          Out << "LLVM_NAN" << (Val == QuietNaN ? "" : "S") << "F(\""
994              << Buffer << "\") /*nan*/ ";
995        else
996          Out << "LLVM_NAN" << (Val == QuietNaN ? "" : "S") << "(\""
997              << Buffer << "\") /*nan*/ ";
998      } else if (IsInf(V)) {
999        // The value is Inf
1000        if (V < 0) Out << '-';
1001        Out << "LLVM_INF" <<
1002            (FPC->getType() == Type::getFloatTy(FPC->getContext()) ? "F" : "")
1003            << " /*inf*/ ";
1004      } else {
1005        std::string Num;
1006#if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A
1007        // Print out the constant as a floating point number.
1008        char Buffer[100];
1009        sprintf(Buffer, "%a", V);
1010        Num = Buffer;
1011#else
1012        Num = ftostr(FPC->getValueAPF());
1013#endif
1014       Out << Num;
1015      }
1016    }
1017    break;
1018  }
1019
1020  case Type::ArrayTyID:
1021    // Use C99 compound expression literal initializer syntax.
1022    if (!Static) {
1023      Out << "(";
1024      printType(Out, CPV->getType());
1025      Out << ")";
1026    }
1027    Out << "{ "; // Arrays are wrapped in struct types.
1028    if (ConstantArray *CA = dyn_cast<ConstantArray>(CPV)) {
1029      printConstantArray(CA, Static);
1030    } else {
1031      assert(isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV));
1032      ArrayType *AT = cast<ArrayType>(CPV->getType());
1033      Out << '{';
1034      if (AT->getNumElements()) {
1035        Out << ' ';
1036        Constant *CZ = Constant::getNullValue(AT->getElementType());
1037        printConstant(CZ, Static);
1038        for (unsigned i = 1, e = AT->getNumElements(); i != e; ++i) {
1039          Out << ", ";
1040          printConstant(CZ, Static);
1041        }
1042      }
1043      Out << " }";
1044    }
1045    Out << " }"; // Arrays are wrapped in struct types.
1046    break;
1047
1048  case Type::VectorTyID:
1049    // Use C99 compound expression literal initializer syntax.
1050    if (!Static) {
1051      Out << "(";
1052      printType(Out, CPV->getType());
1053      Out << ")";
1054    }
1055    if (ConstantVector *CV = dyn_cast<ConstantVector>(CPV)) {
1056      printConstantVector(CV, Static);
1057    } else {
1058      assert(isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV));
1059      VectorType *VT = cast<VectorType>(CPV->getType());
1060      Out << "{ ";
1061      Constant *CZ = Constant::getNullValue(VT->getElementType());
1062      printConstant(CZ, Static);
1063      for (unsigned i = 1, e = VT->getNumElements(); i != e; ++i) {
1064        Out << ", ";
1065        printConstant(CZ, Static);
1066      }
1067      Out << " }";
1068    }
1069    break;
1070
1071  case Type::StructTyID:
1072    // Use C99 compound expression literal initializer syntax.
1073    if (!Static) {
1074      Out << "(";
1075      printType(Out, CPV->getType());
1076      Out << ")";
1077    }
1078    if (isa<ConstantAggregateZero>(CPV) || isa<UndefValue>(CPV)) {
1079      StructType *ST = cast<StructType>(CPV->getType());
1080      Out << '{';
1081      if (ST->getNumElements()) {
1082        Out << ' ';
1083        printConstant(Constant::getNullValue(ST->getElementType(0)), Static);
1084        for (unsigned i = 1, e = ST->getNumElements(); i != e; ++i) {
1085          Out << ", ";
1086          printConstant(Constant::getNullValue(ST->getElementType(i)), Static);
1087        }
1088      }
1089      Out << " }";
1090    } else {
1091      Out << '{';
1092      if (CPV->getNumOperands()) {
1093        Out << ' ';
1094        printConstant(cast<Constant>(CPV->getOperand(0)), Static);
1095        for (unsigned i = 1, e = CPV->getNumOperands(); i != e; ++i) {
1096          Out << ", ";
1097          printConstant(cast<Constant>(CPV->getOperand(i)), Static);
1098        }
1099      }
1100      Out << " }";
1101    }
1102    break;
1103
1104  case Type::PointerTyID:
1105    if (isa<ConstantPointerNull>(CPV)) {
1106      Out << "((";
1107      printType(Out, CPV->getType()); // sign doesn't matter
1108      Out << ")/*NULL*/0)";
1109      break;
1110    } else if (GlobalValue *GV = dyn_cast<GlobalValue>(CPV)) {
1111      writeOperand(GV, Static);
1112      break;
1113    }
1114    // FALL THROUGH
1115  default:
1116#ifndef NDEBUG
1117    errs() << "Unknown constant type: " << *CPV << "\n";
1118#endif
1119    llvm_unreachable(0);
1120  }
1121}
1122
1123// Some constant expressions need to be casted back to the original types
1124// because their operands were casted to the expected type. This function takes
1125// care of detecting that case and printing the cast for the ConstantExpr.
1126bool CWriter::printConstExprCast(const ConstantExpr* CE, bool Static) {
1127  bool NeedsExplicitCast = false;
1128  Type *Ty = CE->getOperand(0)->getType();
1129  bool TypeIsSigned = false;
1130  switch (CE->getOpcode()) {
1131  case Instruction::Add:
1132  case Instruction::Sub:
1133  case Instruction::Mul:
1134    // We need to cast integer arithmetic so that it is always performed
1135    // as unsigned, to avoid undefined behavior on overflow.
1136  case Instruction::LShr:
1137  case Instruction::URem:
1138  case Instruction::UDiv: NeedsExplicitCast = true; break;
1139  case Instruction::AShr:
1140  case Instruction::SRem:
1141  case Instruction::SDiv: NeedsExplicitCast = true; TypeIsSigned = true; break;
1142  case Instruction::SExt:
1143    Ty = CE->getType();
1144    NeedsExplicitCast = true;
1145    TypeIsSigned = true;
1146    break;
1147  case Instruction::ZExt:
1148  case Instruction::Trunc:
1149  case Instruction::FPTrunc:
1150  case Instruction::FPExt:
1151  case Instruction::UIToFP:
1152  case Instruction::SIToFP:
1153  case Instruction::FPToUI:
1154  case Instruction::FPToSI:
1155  case Instruction::PtrToInt:
1156  case Instruction::IntToPtr:
1157  case Instruction::BitCast:
1158    Ty = CE->getType();
1159    NeedsExplicitCast = true;
1160    break;
1161  default: break;
1162  }
1163  if (NeedsExplicitCast) {
1164    Out << "((";
1165    if (Ty->isIntegerTy() && Ty != Type::getInt1Ty(Ty->getContext()))
1166      printSimpleType(Out, Ty, TypeIsSigned);
1167    else
1168      printType(Out, Ty); // not integer, sign doesn't matter
1169    Out << ")(";
1170  }
1171  return NeedsExplicitCast;
1172}
1173
1174//  Print a constant assuming that it is the operand for a given Opcode. The
1175//  opcodes that care about sign need to cast their operands to the expected
1176//  type before the operation proceeds. This function does the casting.
1177void CWriter::printConstantWithCast(Constant* CPV, unsigned Opcode) {
1178
1179  // Extract the operand's type, we'll need it.
1180  Type* OpTy = CPV->getType();
1181
1182  // Indicate whether to do the cast or not.
1183  bool shouldCast = false;
1184  bool typeIsSigned = false;
1185
1186  // Based on the Opcode for which this Constant is being written, determine
1187  // the new type to which the operand should be casted by setting the value
1188  // of OpTy. If we change OpTy, also set shouldCast to true so it gets
1189  // casted below.
1190  switch (Opcode) {
1191    default:
1192      // for most instructions, it doesn't matter
1193      break;
1194    case Instruction::Add:
1195    case Instruction::Sub:
1196    case Instruction::Mul:
1197      // We need to cast integer arithmetic so that it is always performed
1198      // as unsigned, to avoid undefined behavior on overflow.
1199    case Instruction::LShr:
1200    case Instruction::UDiv:
1201    case Instruction::URem:
1202      shouldCast = true;
1203      break;
1204    case Instruction::AShr:
1205    case Instruction::SDiv:
1206    case Instruction::SRem:
1207      shouldCast = true;
1208      typeIsSigned = true;
1209      break;
1210  }
1211
1212  // Write out the casted constant if we should, otherwise just write the
1213  // operand.
1214  if (shouldCast) {
1215    Out << "((";
1216    printSimpleType(Out, OpTy, typeIsSigned);
1217    Out << ")";
1218    printConstant(CPV, false);
1219    Out << ")";
1220  } else
1221    printConstant(CPV, false);
1222}
1223
1224std::string CWriter::GetValueName(const Value *Operand) {
1225
1226  // Resolve potential alias.
1227  if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(Operand)) {
1228    if (const Value *V = GA->resolveAliasedGlobal(false))
1229      Operand = V;
1230  }
1231
1232  // Mangle globals with the standard mangler interface for LLC compatibility.
1233  if (const GlobalValue *GV = dyn_cast<GlobalValue>(Operand)) {
1234    SmallString<128> Str;
1235    Mang->getNameWithPrefix(Str, GV, false);
1236    return CBEMangle(Str.str().str());
1237  }
1238
1239  std::string Name = Operand->getName();
1240
1241  if (Name.empty()) { // Assign unique names to local temporaries.
1242    unsigned &No = AnonValueNumbers[Operand];
1243    if (No == 0)
1244      No = ++NextAnonValueNumber;
1245    Name = "tmp__" + utostr(No);
1246  }
1247
1248  std::string VarName;
1249  VarName.reserve(Name.capacity());
1250
1251  for (std::string::iterator I = Name.begin(), E = Name.end();
1252       I != E; ++I) {
1253    char ch = *I;
1254
1255    if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') ||
1256          (ch >= '0' && ch <= '9') || ch == '_')) {
1257      char buffer[5];
1258      sprintf(buffer, "_%x_", ch);
1259      VarName += buffer;
1260    } else
1261      VarName += ch;
1262  }
1263
1264  return "llvm_cbe_" + VarName;
1265}
1266
1267/// writeInstComputationInline - Emit the computation for the specified
1268/// instruction inline, with no destination provided.
1269void CWriter::writeInstComputationInline(Instruction &I) {
1270  // We can't currently support integer types other than 1, 8, 16, 32, 64.
1271  // Validate this.
1272  Type *Ty = I.getType();
1273  if (Ty->isIntegerTy() && (Ty!=Type::getInt1Ty(I.getContext()) &&
1274        Ty!=Type::getInt8Ty(I.getContext()) &&
1275        Ty!=Type::getInt16Ty(I.getContext()) &&
1276        Ty!=Type::getInt32Ty(I.getContext()) &&
1277        Ty!=Type::getInt64Ty(I.getContext()))) {
1278      report_fatal_error("The C backend does not currently support integer "
1279                        "types of widths other than 1, 8, 16, 32, 64.\n"
1280                        "This is being tracked as PR 4158.");
1281  }
1282
1283  // If this is a non-trivial bool computation, make sure to truncate down to
1284  // a 1 bit value.  This is important because we want "add i1 x, y" to return
1285  // "0" when x and y are true, not "2" for example.
1286  bool NeedBoolTrunc = false;
1287  if (I.getType() == Type::getInt1Ty(I.getContext()) &&
1288      !isa<ICmpInst>(I) && !isa<FCmpInst>(I))
1289    NeedBoolTrunc = true;
1290
1291  if (NeedBoolTrunc)
1292    Out << "((";
1293
1294  visit(I);
1295
1296  if (NeedBoolTrunc)
1297    Out << ")&1)";
1298}
1299
1300
1301void CWriter::writeOperandInternal(Value *Operand, bool Static) {
1302  if (Instruction *I = dyn_cast<Instruction>(Operand))
1303    // Should we inline this instruction to build a tree?
1304    if (isInlinableInst(*I) && !isDirectAlloca(I)) {
1305      Out << '(';
1306      writeInstComputationInline(*I);
1307      Out << ')';
1308      return;
1309    }
1310
1311  Constant* CPV = dyn_cast<Constant>(Operand);
1312
1313  if (CPV && !isa<GlobalValue>(CPV))
1314    printConstant(CPV, Static);
1315  else
1316    Out << GetValueName(Operand);
1317}
1318
1319void CWriter::writeOperand(Value *Operand, bool Static) {
1320  bool isAddressImplicit = isAddressExposed(Operand);
1321  if (isAddressImplicit)
1322    Out << "(&";  // Global variables are referenced as their addresses by llvm
1323
1324  writeOperandInternal(Operand, Static);
1325
1326  if (isAddressImplicit)
1327    Out << ')';
1328}
1329
1330// Some instructions need to have their result value casted back to the
1331// original types because their operands were casted to the expected type.
1332// This function takes care of detecting that case and printing the cast
1333// for the Instruction.
1334bool CWriter::writeInstructionCast(const Instruction &I) {
1335  Type *Ty = I.getOperand(0)->getType();
1336  switch (I.getOpcode()) {
1337  case Instruction::Add:
1338  case Instruction::Sub:
1339  case Instruction::Mul:
1340    // We need to cast integer arithmetic so that it is always performed
1341    // as unsigned, to avoid undefined behavior on overflow.
1342  case Instruction::LShr:
1343  case Instruction::URem:
1344  case Instruction::UDiv:
1345    Out << "((";
1346    printSimpleType(Out, Ty, false);
1347    Out << ")(";
1348    return true;
1349  case Instruction::AShr:
1350  case Instruction::SRem:
1351  case Instruction::SDiv:
1352    Out << "((";
1353    printSimpleType(Out, Ty, true);
1354    Out << ")(";
1355    return true;
1356  default: break;
1357  }
1358  return false;
1359}
1360
1361// Write the operand with a cast to another type based on the Opcode being used.
1362// This will be used in cases where an instruction has specific type
1363// requirements (usually signedness) for its operands.
1364void CWriter::writeOperandWithCast(Value* Operand, unsigned Opcode) {
1365
1366  // Extract the operand's type, we'll need it.
1367  Type* OpTy = Operand->getType();
1368
1369  // Indicate whether to do the cast or not.
1370  bool shouldCast = false;
1371
1372  // Indicate whether the cast should be to a signed type or not.
1373  bool castIsSigned = false;
1374
1375  // Based on the Opcode for which this Operand is being written, determine
1376  // the new type to which the operand should be casted by setting the value
1377  // of OpTy. If we change OpTy, also set shouldCast to true.
1378  switch (Opcode) {
1379    default:
1380      // for most instructions, it doesn't matter
1381      break;
1382    case Instruction::Add:
1383    case Instruction::Sub:
1384    case Instruction::Mul:
1385      // We need to cast integer arithmetic so that it is always performed
1386      // as unsigned, to avoid undefined behavior on overflow.
1387    case Instruction::LShr:
1388    case Instruction::UDiv:
1389    case Instruction::URem: // Cast to unsigned first
1390      shouldCast = true;
1391      castIsSigned = false;
1392      break;
1393    case Instruction::GetElementPtr:
1394    case Instruction::AShr:
1395    case Instruction::SDiv:
1396    case Instruction::SRem: // Cast to signed first
1397      shouldCast = true;
1398      castIsSigned = true;
1399      break;
1400  }
1401
1402  // Write out the casted operand if we should, otherwise just write the
1403  // operand.
1404  if (shouldCast) {
1405    Out << "((";
1406    printSimpleType(Out, OpTy, castIsSigned);
1407    Out << ")";
1408    writeOperand(Operand);
1409    Out << ")";
1410  } else
1411    writeOperand(Operand);
1412}
1413
1414// Write the operand with a cast to another type based on the icmp predicate
1415// being used.
1416void CWriter::writeOperandWithCast(Value* Operand, const ICmpInst &Cmp) {
1417  // This has to do a cast to ensure the operand has the right signedness.
1418  // Also, if the operand is a pointer, we make sure to cast to an integer when
1419  // doing the comparison both for signedness and so that the C compiler doesn't
1420  // optimize things like "p < NULL" to false (p may contain an integer value
1421  // f.e.).
1422  bool shouldCast = Cmp.isRelational();
1423
1424  // Write out the casted operand if we should, otherwise just write the
1425  // operand.
1426  if (!shouldCast) {
1427    writeOperand(Operand);
1428    return;
1429  }
1430
1431  // Should this be a signed comparison?  If so, convert to signed.
1432  bool castIsSigned = Cmp.isSigned();
1433
1434  // If the operand was a pointer, convert to a large integer type.
1435  Type* OpTy = Operand->getType();
1436  if (OpTy->isPointerTy())
1437    OpTy = TD->getIntPtrType(Operand->getContext());
1438
1439  Out << "((";
1440  printSimpleType(Out, OpTy, castIsSigned);
1441  Out << ")";
1442  writeOperand(Operand);
1443  Out << ")";
1444}
1445
1446// generateCompilerSpecificCode - This is where we add conditional compilation
1447// directives to cater to specific compilers as need be.
1448//
1449static void generateCompilerSpecificCode(formatted_raw_ostream& Out,
1450                                         const TargetData *TD) {
1451  // Alloca is hard to get, and we don't want to include stdlib.h here.
1452  Out << "/* get a declaration for alloca */\n"
1453      << "#if defined(__CYGWIN__) || defined(__MINGW32__)\n"
1454      << "#define  alloca(x) __builtin_alloca((x))\n"
1455      << "#define _alloca(x) __builtin_alloca((x))\n"
1456      << "#elif defined(__APPLE__)\n"
1457      << "extern void *__builtin_alloca(unsigned long);\n"
1458      << "#define alloca(x) __builtin_alloca(x)\n"
1459      << "#define longjmp _longjmp\n"
1460      << "#define setjmp _setjmp\n"
1461      << "#elif defined(__sun__)\n"
1462      << "#if defined(__sparcv9)\n"
1463      << "extern void *__builtin_alloca(unsigned long);\n"
1464      << "#else\n"
1465      << "extern void *__builtin_alloca(unsigned int);\n"
1466      << "#endif\n"
1467      << "#define alloca(x) __builtin_alloca(x)\n"
1468      << "#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__arm__)\n"
1469      << "#define alloca(x) __builtin_alloca(x)\n"
1470      << "#elif defined(_MSC_VER)\n"
1471      << "#define inline _inline\n"
1472      << "#define alloca(x) _alloca(x)\n"
1473      << "#else\n"
1474      << "#include <alloca.h>\n"
1475      << "#endif\n\n";
1476
1477  // We output GCC specific attributes to preserve 'linkonce'ness on globals.
1478  // If we aren't being compiled with GCC, just drop these attributes.
1479  Out << "#ifndef __GNUC__  /* Can only support \"linkonce\" vars with GCC */\n"
1480      << "#define __attribute__(X)\n"
1481      << "#endif\n\n";
1482
1483  // On Mac OS X, "external weak" is spelled "__attribute__((weak_import))".
1484  Out << "#if defined(__GNUC__) && defined(__APPLE_CC__)\n"
1485      << "#define __EXTERNAL_WEAK__ __attribute__((weak_import))\n"
1486      << "#elif defined(__GNUC__)\n"
1487      << "#define __EXTERNAL_WEAK__ __attribute__((weak))\n"
1488      << "#else\n"
1489      << "#define __EXTERNAL_WEAK__\n"
1490      << "#endif\n\n";
1491
1492  // For now, turn off the weak linkage attribute on Mac OS X. (See above.)
1493  Out << "#if defined(__GNUC__) && defined(__APPLE_CC__)\n"
1494      << "#define __ATTRIBUTE_WEAK__\n"
1495      << "#elif defined(__GNUC__)\n"
1496      << "#define __ATTRIBUTE_WEAK__ __attribute__((weak))\n"
1497      << "#else\n"
1498      << "#define __ATTRIBUTE_WEAK__\n"
1499      << "#endif\n\n";
1500
1501  // Add hidden visibility support. FIXME: APPLE_CC?
1502  Out << "#if defined(__GNUC__)\n"
1503      << "#define __HIDDEN__ __attribute__((visibility(\"hidden\")))\n"
1504      << "#endif\n\n";
1505
1506  // Define NaN and Inf as GCC builtins if using GCC, as 0 otherwise
1507  // From the GCC documentation:
1508  //
1509  //   double __builtin_nan (const char *str)
1510  //
1511  // This is an implementation of the ISO C99 function nan.
1512  //
1513  // Since ISO C99 defines this function in terms of strtod, which we do
1514  // not implement, a description of the parsing is in order. The string is
1515  // parsed as by strtol; that is, the base is recognized by leading 0 or
1516  // 0x prefixes. The number parsed is placed in the significand such that
1517  // the least significant bit of the number is at the least significant
1518  // bit of the significand. The number is truncated to fit the significand
1519  // field provided. The significand is forced to be a quiet NaN.
1520  //
1521  // This function, if given a string literal, is evaluated early enough
1522  // that it is considered a compile-time constant.
1523  //
1524  //   float __builtin_nanf (const char *str)
1525  //
1526  // Similar to __builtin_nan, except the return type is float.
1527  //
1528  //   double __builtin_inf (void)
1529  //
1530  // Similar to __builtin_huge_val, except a warning is generated if the
1531  // target floating-point format does not support infinities. This
1532  // function is suitable for implementing the ISO C99 macro INFINITY.
1533  //
1534  //   float __builtin_inff (void)
1535  //
1536  // Similar to __builtin_inf, except the return type is float.
1537  Out << "#ifdef __GNUC__\n"
1538      << "#define LLVM_NAN(NanStr)   __builtin_nan(NanStr)   /* Double */\n"
1539      << "#define LLVM_NANF(NanStr)  __builtin_nanf(NanStr)  /* Float */\n"
1540      << "#define LLVM_NANS(NanStr)  __builtin_nans(NanStr)  /* Double */\n"
1541      << "#define LLVM_NANSF(NanStr) __builtin_nansf(NanStr) /* Float */\n"
1542      << "#define LLVM_INF           __builtin_inf()         /* Double */\n"
1543      << "#define LLVM_INFF          __builtin_inff()        /* Float */\n"
1544      << "#define LLVM_PREFETCH(addr,rw,locality) "
1545                              "__builtin_prefetch(addr,rw,locality)\n"
1546      << "#define __ATTRIBUTE_CTOR__ __attribute__((constructor))\n"
1547      << "#define __ATTRIBUTE_DTOR__ __attribute__((destructor))\n"
1548      << "#define LLVM_ASM           __asm__\n"
1549      << "#else\n"
1550      << "#define LLVM_NAN(NanStr)   ((double)0.0)           /* Double */\n"
1551      << "#define LLVM_NANF(NanStr)  0.0F                    /* Float */\n"
1552      << "#define LLVM_NANS(NanStr)  ((double)0.0)           /* Double */\n"
1553      << "#define LLVM_NANSF(NanStr) 0.0F                    /* Float */\n"
1554      << "#define LLVM_INF           ((double)0.0)           /* Double */\n"
1555      << "#define LLVM_INFF          0.0F                    /* Float */\n"
1556      << "#define LLVM_PREFETCH(addr,rw,locality)            /* PREFETCH */\n"
1557      << "#define __ATTRIBUTE_CTOR__\n"
1558      << "#define __ATTRIBUTE_DTOR__\n"
1559      << "#define LLVM_ASM(X)\n"
1560      << "#endif\n\n";
1561
1562  Out << "#if __GNUC__ < 4 /* Old GCC's, or compilers not GCC */ \n"
1563      << "#define __builtin_stack_save() 0   /* not implemented */\n"
1564      << "#define __builtin_stack_restore(X) /* noop */\n"
1565      << "#endif\n\n";
1566
1567  // Output typedefs for 128-bit integers. If these are needed with a
1568  // 32-bit target or with a C compiler that doesn't support mode(TI),
1569  // more drastic measures will be needed.
1570  Out << "#if __GNUC__ && __LP64__ /* 128-bit integer types */\n"
1571      << "typedef int __attribute__((mode(TI))) llvmInt128;\n"
1572      << "typedef unsigned __attribute__((mode(TI))) llvmUInt128;\n"
1573      << "#endif\n\n";
1574
1575  // Output target-specific code that should be inserted into main.
1576  Out << "#define CODE_FOR_MAIN() /* Any target-specific code for main()*/\n";
1577}
1578
1579/// FindStaticTors - Given a static ctor/dtor list, unpack its contents into
1580/// the StaticTors set.
1581static void FindStaticTors(GlobalVariable *GV, std::set<Function*> &StaticTors){
1582  ConstantArray *InitList = dyn_cast<ConstantArray>(GV->getInitializer());
1583  if (!InitList) return;
1584
1585  for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i)
1586    if (ConstantStruct *CS = dyn_cast<ConstantStruct>(InitList->getOperand(i))){
1587      if (CS->getNumOperands() != 2) return;  // Not array of 2-element structs.
1588
1589      if (CS->getOperand(1)->isNullValue())
1590        return;  // Found a null terminator, exit printing.
1591      Constant *FP = CS->getOperand(1);
1592      if (ConstantExpr *CE = dyn_cast<ConstantExpr>(FP))
1593        if (CE->isCast())
1594          FP = CE->getOperand(0);
1595      if (Function *F = dyn_cast<Function>(FP))
1596        StaticTors.insert(F);
1597    }
1598}
1599
1600enum SpecialGlobalClass {
1601  NotSpecial = 0,
1602  GlobalCtors, GlobalDtors,
1603  NotPrinted
1604};
1605
1606/// getGlobalVariableClass - If this is a global that is specially recognized
1607/// by LLVM, return a code that indicates how we should handle it.
1608static SpecialGlobalClass getGlobalVariableClass(const GlobalVariable *GV) {
1609  // If this is a global ctors/dtors list, handle it now.
1610  if (GV->hasAppendingLinkage() && GV->use_empty()) {
1611    if (GV->getName() == "llvm.global_ctors")
1612      return GlobalCtors;
1613    else if (GV->getName() == "llvm.global_dtors")
1614      return GlobalDtors;
1615  }
1616
1617  // Otherwise, if it is other metadata, don't print it.  This catches things
1618  // like debug information.
1619  if (GV->getSection() == "llvm.metadata")
1620    return NotPrinted;
1621
1622  return NotSpecial;
1623}
1624
1625// PrintEscapedString - Print each character of the specified string, escaping
1626// it if it is not printable or if it is an escape char.
1627static void PrintEscapedString(const char *Str, unsigned Length,
1628                               raw_ostream &Out) {
1629  for (unsigned i = 0; i != Length; ++i) {
1630    unsigned char C = Str[i];
1631    if (isprint(C) && C != '\\' && C != '"')
1632      Out << C;
1633    else if (C == '\\')
1634      Out << "\\\\";
1635    else if (C == '\"')
1636      Out << "\\\"";
1637    else if (C == '\t')
1638      Out << "\\t";
1639    else
1640      Out << "\\x" << hexdigit(C >> 4) << hexdigit(C & 0x0F);
1641  }
1642}
1643
1644// PrintEscapedString - Print each character of the specified string, escaping
1645// it if it is not printable or if it is an escape char.
1646static void PrintEscapedString(const std::string &Str, raw_ostream &Out) {
1647  PrintEscapedString(Str.c_str(), Str.size(), Out);
1648}
1649
1650bool CWriter::doInitialization(Module &M) {
1651  FunctionPass::doInitialization(M);
1652
1653  // Initialize
1654  TheModule = &M;
1655
1656  TD = new TargetData(&M);
1657  IL = new IntrinsicLowering(*TD);
1658  IL->AddPrototypes(M);
1659
1660#if 0
1661  std::string Triple = TheModule->getTargetTriple();
1662  if (Triple.empty())
1663    Triple = llvm::sys::getHostTriple();
1664
1665  std::string E;
1666  if (const Target *Match = TargetRegistry::lookupTarget(Triple, E))
1667    TAsm = Match->createMCAsmInfo(Triple);
1668#endif
1669  TAsm = new CBEMCAsmInfo();
1670  MRI  = new MCRegisterInfo();
1671  TCtx = new MCContext(*TAsm, *MRI, NULL);
1672  Mang = new Mangler(*TCtx, *TD);
1673
1674  // Keep track of which functions are static ctors/dtors so they can have
1675  // an attribute added to their prototypes.
1676  std::set<Function*> StaticCtors, StaticDtors;
1677  for (Module::global_iterator I = M.global_begin(), E = M.global_end();
1678       I != E; ++I) {
1679    switch (getGlobalVariableClass(I)) {
1680    default: break;
1681    case GlobalCtors:
1682      FindStaticTors(I, StaticCtors);
1683      break;
1684    case GlobalDtors:
1685      FindStaticTors(I, StaticDtors);
1686      break;
1687    }
1688  }
1689
1690  // get declaration for alloca
1691  Out << "/* Provide Declarations */\n";
1692  Out << "#include <stdarg.h>\n";      // Varargs support
1693  Out << "#include <setjmp.h>\n";      // Unwind support
1694  Out << "#include <limits.h>\n";      // With overflow intrinsics support.
1695  generateCompilerSpecificCode(Out, TD);
1696
1697  // Provide a definition for `bool' if not compiling with a C++ compiler.
1698  Out << "\n"
1699      << "#ifndef __cplusplus\ntypedef unsigned char bool;\n#endif\n"
1700
1701      << "\n\n/* Support for floating point constants */\n"
1702      << "typedef unsigned long long ConstantDoubleTy;\n"
1703      << "typedef unsigned int        ConstantFloatTy;\n"
1704      << "typedef struct { unsigned long long f1; unsigned short f2; "
1705         "unsigned short pad[3]; } ConstantFP80Ty;\n"
1706      // This is used for both kinds of 128-bit long double; meaning differs.
1707      << "typedef struct { unsigned long long f1; unsigned long long f2; }"
1708         " ConstantFP128Ty;\n"
1709      << "\n\n/* Global Declarations */\n";
1710
1711  // First output all the declarations for the program, because C requires
1712  // Functions & globals to be declared before they are used.
1713  //
1714  if (!M.getModuleInlineAsm().empty()) {
1715    Out << "/* Module asm statements */\n"
1716        << "asm(";
1717
1718    // Split the string into lines, to make it easier to read the .ll file.
1719    std::string Asm = M.getModuleInlineAsm();
1720    size_t CurPos = 0;
1721    size_t NewLine = Asm.find_first_of('\n', CurPos);
1722    while (NewLine != std::string::npos) {
1723      // We found a newline, print the portion of the asm string from the
1724      // last newline up to this newline.
1725      Out << "\"";
1726      PrintEscapedString(std::string(Asm.begin()+CurPos, Asm.begin()+NewLine),
1727                         Out);
1728      Out << "\\n\"\n";
1729      CurPos = NewLine+1;
1730      NewLine = Asm.find_first_of('\n', CurPos);
1731    }
1732    Out << "\"";
1733    PrintEscapedString(std::string(Asm.begin()+CurPos, Asm.end()), Out);
1734    Out << "\");\n"
1735        << "/* End Module asm statements */\n";
1736  }
1737
1738  // Loop over the symbol table, emitting all named constants.
1739  printModuleTypes();
1740
1741  // Global variable declarations...
1742  if (!M.global_empty()) {
1743    Out << "\n/* External Global Variable Declarations */\n";
1744    for (Module::global_iterator I = M.global_begin(), E = M.global_end();
1745         I != E; ++I) {
1746
1747      if (I->hasExternalLinkage() || I->hasExternalWeakLinkage() ||
1748          I->hasCommonLinkage())
1749        Out << "extern ";
1750      else if (I->hasDLLImportLinkage())
1751        Out << "__declspec(dllimport) ";
1752      else
1753        continue; // Internal Global
1754
1755      // Thread Local Storage
1756      if (I->isThreadLocal())
1757        Out << "__thread ";
1758
1759      printType(Out, I->getType()->getElementType(), false, GetValueName(I));
1760
1761      if (I->hasExternalWeakLinkage())
1762         Out << " __EXTERNAL_WEAK__";
1763      Out << ";\n";
1764    }
1765  }
1766
1767  // Function declarations
1768  Out << "\n/* Function Declarations */\n";
1769  Out << "double fmod(double, double);\n";   // Support for FP rem
1770  Out << "float fmodf(float, float);\n";
1771  Out << "long double fmodl(long double, long double);\n";
1772
1773  // Store the intrinsics which will be declared/defined below.
1774  SmallVector<const Function*, 8> intrinsicsToDefine;
1775
1776  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
1777    // Don't print declarations for intrinsic functions.
1778    // Store the used intrinsics, which need to be explicitly defined.
1779    if (I->isIntrinsic()) {
1780      switch (I->getIntrinsicID()) {
1781        default:
1782          break;
1783        case Intrinsic::uadd_with_overflow:
1784        case Intrinsic::sadd_with_overflow:
1785          intrinsicsToDefine.push_back(I);
1786          break;
1787      }
1788      continue;
1789    }
1790
1791    if (I->getName() == "setjmp" ||
1792        I->getName() == "longjmp" || I->getName() == "_setjmp")
1793      continue;
1794
1795    if (I->hasExternalWeakLinkage())
1796      Out << "extern ";
1797    printFunctionSignature(I, true);
1798    if (I->hasWeakLinkage() || I->hasLinkOnceLinkage())
1799      Out << " __ATTRIBUTE_WEAK__";
1800    if (I->hasExternalWeakLinkage())
1801      Out << " __EXTERNAL_WEAK__";
1802    if (StaticCtors.count(I))
1803      Out << " __ATTRIBUTE_CTOR__";
1804    if (StaticDtors.count(I))
1805      Out << " __ATTRIBUTE_DTOR__";
1806    if (I->hasHiddenVisibility())
1807      Out << " __HIDDEN__";
1808
1809    if (I->hasName() && I->getName()[0] == 1)
1810      Out << " LLVM_ASM(\"" << I->getName().substr(1) << "\")";
1811
1812    Out << ";\n";
1813  }
1814
1815  // Output the global variable declarations
1816  if (!M.global_empty()) {
1817    Out << "\n\n/* Global Variable Declarations */\n";
1818    for (Module::global_iterator I = M.global_begin(), E = M.global_end();
1819         I != E; ++I)
1820      if (!I->isDeclaration()) {
1821        // Ignore special globals, such as debug info.
1822        if (getGlobalVariableClass(I))
1823          continue;
1824
1825        if (I->hasLocalLinkage())
1826          Out << "static ";
1827        else
1828          Out << "extern ";
1829
1830        // Thread Local Storage
1831        if (I->isThreadLocal())
1832          Out << "__thread ";
1833
1834        printType(Out, I->getType()->getElementType(), false,
1835                  GetValueName(I));
1836
1837        if (I->hasLinkOnceLinkage())
1838          Out << " __attribute__((common))";
1839        else if (I->hasCommonLinkage())     // FIXME is this right?
1840          Out << " __ATTRIBUTE_WEAK__";
1841        else if (I->hasWeakLinkage())
1842          Out << " __ATTRIBUTE_WEAK__";
1843        else if (I->hasExternalWeakLinkage())
1844          Out << " __EXTERNAL_WEAK__";
1845        if (I->hasHiddenVisibility())
1846          Out << " __HIDDEN__";
1847        Out << ";\n";
1848      }
1849  }
1850
1851  // Output the global variable definitions and contents...
1852  if (!M.global_empty()) {
1853    Out << "\n\n/* Global Variable Definitions and Initialization */\n";
1854    for (Module::global_iterator I = M.global_begin(), E = M.global_end();
1855         I != E; ++I)
1856      if (!I->isDeclaration()) {
1857        // Ignore special globals, such as debug info.
1858        if (getGlobalVariableClass(I))
1859          continue;
1860
1861        if (I->hasLocalLinkage())
1862          Out << "static ";
1863        else if (I->hasDLLImportLinkage())
1864          Out << "__declspec(dllimport) ";
1865        else if (I->hasDLLExportLinkage())
1866          Out << "__declspec(dllexport) ";
1867
1868        // Thread Local Storage
1869        if (I->isThreadLocal())
1870          Out << "__thread ";
1871
1872        printType(Out, I->getType()->getElementType(), false,
1873                  GetValueName(I));
1874        if (I->hasLinkOnceLinkage())
1875          Out << " __attribute__((common))";
1876        else if (I->hasWeakLinkage())
1877          Out << " __ATTRIBUTE_WEAK__";
1878        else if (I->hasCommonLinkage())
1879          Out << " __ATTRIBUTE_WEAK__";
1880
1881        if (I->hasHiddenVisibility())
1882          Out << " __HIDDEN__";
1883
1884        // If the initializer is not null, emit the initializer.  If it is null,
1885        // we try to avoid emitting large amounts of zeros.  The problem with
1886        // this, however, occurs when the variable has weak linkage.  In this
1887        // case, the assembler will complain about the variable being both weak
1888        // and common, so we disable this optimization.
1889        // FIXME common linkage should avoid this problem.
1890        if (!I->getInitializer()->isNullValue()) {
1891          Out << " = " ;
1892          writeOperand(I->getInitializer(), true);
1893        } else if (I->hasWeakLinkage()) {
1894          // We have to specify an initializer, but it doesn't have to be
1895          // complete.  If the value is an aggregate, print out { 0 }, and let
1896          // the compiler figure out the rest of the zeros.
1897          Out << " = " ;
1898          if (I->getInitializer()->getType()->isStructTy() ||
1899              I->getInitializer()->getType()->isVectorTy()) {
1900            Out << "{ 0 }";
1901          } else if (I->getInitializer()->getType()->isArrayTy()) {
1902            // As with structs and vectors, but with an extra set of braces
1903            // because arrays are wrapped in structs.
1904            Out << "{ { 0 } }";
1905          } else {
1906            // Just print it out normally.
1907            writeOperand(I->getInitializer(), true);
1908          }
1909        }
1910        Out << ";\n";
1911      }
1912  }
1913
1914  if (!M.empty())
1915    Out << "\n\n/* Function Bodies */\n";
1916
1917  // Emit some helper functions for dealing with FCMP instruction's
1918  // predicates
1919  Out << "static inline int llvm_fcmp_ord(double X, double Y) { ";
1920  Out << "return X == X && Y == Y; }\n";
1921  Out << "static inline int llvm_fcmp_uno(double X, double Y) { ";
1922  Out << "return X != X || Y != Y; }\n";
1923  Out << "static inline int llvm_fcmp_ueq(double X, double Y) { ";
1924  Out << "return X == Y || llvm_fcmp_uno(X, Y); }\n";
1925  Out << "static inline int llvm_fcmp_une(double X, double Y) { ";
1926  Out << "return X != Y; }\n";
1927  Out << "static inline int llvm_fcmp_ult(double X, double Y) { ";
1928  Out << "return X <  Y || llvm_fcmp_uno(X, Y); }\n";
1929  Out << "static inline int llvm_fcmp_ugt(double X, double Y) { ";
1930  Out << "return X >  Y || llvm_fcmp_uno(X, Y); }\n";
1931  Out << "static inline int llvm_fcmp_ule(double X, double Y) { ";
1932  Out << "return X <= Y || llvm_fcmp_uno(X, Y); }\n";
1933  Out << "static inline int llvm_fcmp_uge(double X, double Y) { ";
1934  Out << "return X >= Y || llvm_fcmp_uno(X, Y); }\n";
1935  Out << "static inline int llvm_fcmp_oeq(double X, double Y) { ";
1936  Out << "return X == Y ; }\n";
1937  Out << "static inline int llvm_fcmp_one(double X, double Y) { ";
1938  Out << "return X != Y && llvm_fcmp_ord(X, Y); }\n";
1939  Out << "static inline int llvm_fcmp_olt(double X, double Y) { ";
1940  Out << "return X <  Y ; }\n";
1941  Out << "static inline int llvm_fcmp_ogt(double X, double Y) { ";
1942  Out << "return X >  Y ; }\n";
1943  Out << "static inline int llvm_fcmp_ole(double X, double Y) { ";
1944  Out << "return X <= Y ; }\n";
1945  Out << "static inline int llvm_fcmp_oge(double X, double Y) { ";
1946  Out << "return X >= Y ; }\n";
1947
1948  // Emit definitions of the intrinsics.
1949  for (SmallVector<const Function*, 8>::const_iterator
1950       I = intrinsicsToDefine.begin(),
1951       E = intrinsicsToDefine.end(); I != E; ++I) {
1952    printIntrinsicDefinition(**I, Out);
1953  }
1954
1955  return false;
1956}
1957
1958
1959/// Output all floating point constants that cannot be printed accurately...
1960void CWriter::printFloatingPointConstants(Function &F) {
1961  // Scan the module for floating point constants.  If any FP constant is used
1962  // in the function, we want to redirect it here so that we do not depend on
1963  // the precision of the printed form, unless the printed form preserves
1964  // precision.
1965  //
1966  for (constant_iterator I = constant_begin(&F), E = constant_end(&F);
1967       I != E; ++I)
1968    printFloatingPointConstants(*I);
1969
1970  Out << '\n';
1971}
1972
1973void CWriter::printFloatingPointConstants(const Constant *C) {
1974  // If this is a constant expression, recursively check for constant fp values.
1975  if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
1976    for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i)
1977      printFloatingPointConstants(CE->getOperand(i));
1978    return;
1979  }
1980
1981  // Otherwise, check for a FP constant that we need to print.
1982  const ConstantFP *FPC = dyn_cast<ConstantFP>(C);
1983  if (FPC == 0 ||
1984      // Do not put in FPConstantMap if safe.
1985      isFPCSafeToPrint(FPC) ||
1986      // Already printed this constant?
1987      FPConstantMap.count(FPC))
1988    return;
1989
1990  FPConstantMap[FPC] = FPCounter;  // Number the FP constants
1991
1992  if (FPC->getType() == Type::getDoubleTy(FPC->getContext())) {
1993    double Val = FPC->getValueAPF().convertToDouble();
1994    uint64_t i = FPC->getValueAPF().bitcastToAPInt().getZExtValue();
1995    Out << "static const ConstantDoubleTy FPConstant" << FPCounter++
1996    << " = 0x" << utohexstr(i)
1997    << "ULL;    /* " << Val << " */\n";
1998  } else if (FPC->getType() == Type::getFloatTy(FPC->getContext())) {
1999    float Val = FPC->getValueAPF().convertToFloat();
2000    uint32_t i = (uint32_t)FPC->getValueAPF().bitcastToAPInt().
2001    getZExtValue();
2002    Out << "static const ConstantFloatTy FPConstant" << FPCounter++
2003    << " = 0x" << utohexstr(i)
2004    << "U;    /* " << Val << " */\n";
2005  } else if (FPC->getType() == Type::getX86_FP80Ty(FPC->getContext())) {
2006    // api needed to prevent premature destruction
2007    APInt api = FPC->getValueAPF().bitcastToAPInt();
2008    const uint64_t *p = api.getRawData();
2009    Out << "static const ConstantFP80Ty FPConstant" << FPCounter++
2010    << " = { 0x" << utohexstr(p[0])
2011    << "ULL, 0x" << utohexstr((uint16_t)p[1]) << ",{0,0,0}"
2012    << "}; /* Long double constant */\n";
2013  } else if (FPC->getType() == Type::getPPC_FP128Ty(FPC->getContext()) ||
2014             FPC->getType() == Type::getFP128Ty(FPC->getContext())) {
2015    APInt api = FPC->getValueAPF().bitcastToAPInt();
2016    const uint64_t *p = api.getRawData();
2017    Out << "static const ConstantFP128Ty FPConstant" << FPCounter++
2018    << " = { 0x"
2019    << utohexstr(p[0]) << ", 0x" << utohexstr(p[1])
2020    << "}; /* Long double constant */\n";
2021
2022  } else {
2023    llvm_unreachable("Unknown float type!");
2024  }
2025}
2026
2027
2028/// printSymbolTable - Run through symbol table looking for type names.  If a
2029/// type name is found, emit its declaration...
2030///
2031void CWriter::printModuleTypes() {
2032  Out << "/* Helper union for bitcasts */\n";
2033  Out << "typedef union {\n";
2034  Out << "  unsigned int Int32;\n";
2035  Out << "  unsigned long long Int64;\n";
2036  Out << "  float Float;\n";
2037  Out << "  double Double;\n";
2038  Out << "} llvmBitCastUnion;\n";
2039
2040  // Get all of the struct types used in the module.
2041  std::vector<StructType*> StructTypes;
2042  TheModule->findUsedStructTypes(StructTypes);
2043
2044  if (StructTypes.empty()) return;
2045
2046  Out << "/* Structure forward decls */\n";
2047
2048  unsigned NextTypeID = 0;
2049
2050  // If any of them are missing names, add a unique ID to UnnamedStructIDs.
2051  // Print out forward declarations for structure types.
2052  for (unsigned i = 0, e = StructTypes.size(); i != e; ++i) {
2053    StructType *ST = StructTypes[i];
2054
2055    if (ST->isLiteral() || ST->getName().empty())
2056      UnnamedStructIDs[ST] = NextTypeID++;
2057
2058    std::string Name = getStructName(ST);
2059
2060    Out << "typedef struct " << Name << ' ' << Name << ";\n";
2061  }
2062
2063  Out << '\n';
2064
2065  // Keep track of which structures have been printed so far.
2066  SmallPtrSet<Type *, 16> StructPrinted;
2067
2068  // Loop over all structures then push them into the stack so they are
2069  // printed in the correct order.
2070  //
2071  Out << "/* Structure contents */\n";
2072  for (unsigned i = 0, e = StructTypes.size(); i != e; ++i)
2073    if (StructTypes[i]->isStructTy())
2074      // Only print out used types!
2075      printContainedStructs(StructTypes[i], StructPrinted);
2076}
2077
2078// Push the struct onto the stack and recursively push all structs
2079// this one depends on.
2080//
2081// TODO:  Make this work properly with vector types
2082//
2083void CWriter::printContainedStructs(Type *Ty,
2084                                SmallPtrSet<Type *, 16> &StructPrinted) {
2085  // Don't walk through pointers.
2086  if (Ty->isPointerTy() || Ty->isPrimitiveType() || Ty->isIntegerTy())
2087    return;
2088
2089  // Print all contained types first.
2090  for (Type::subtype_iterator I = Ty->subtype_begin(),
2091       E = Ty->subtype_end(); I != E; ++I)
2092    printContainedStructs(*I, StructPrinted);
2093
2094  if (StructType *ST = dyn_cast<StructType>(Ty)) {
2095    // Check to see if we have already printed this struct.
2096    if (!StructPrinted.insert(Ty)) return;
2097
2098    // Print structure type out.
2099    printType(Out, ST, false, getStructName(ST), true);
2100    Out << ";\n\n";
2101  }
2102}
2103
2104void CWriter::printFunctionSignature(const Function *F, bool Prototype) {
2105  /// isStructReturn - Should this function actually return a struct by-value?
2106  bool isStructReturn = F->hasStructRetAttr();
2107
2108  if (F->hasLocalLinkage()) Out << "static ";
2109  if (F->hasDLLImportLinkage()) Out << "__declspec(dllimport) ";
2110  if (F->hasDLLExportLinkage()) Out << "__declspec(dllexport) ";
2111  switch (F->getCallingConv()) {
2112   case CallingConv::X86_StdCall:
2113    Out << "__attribute__((stdcall)) ";
2114    break;
2115   case CallingConv::X86_FastCall:
2116    Out << "__attribute__((fastcall)) ";
2117    break;
2118   case CallingConv::X86_ThisCall:
2119    Out << "__attribute__((thiscall)) ";
2120    break;
2121   default:
2122    break;
2123  }
2124
2125  // Loop over the arguments, printing them...
2126  FunctionType *FT = cast<FunctionType>(F->getFunctionType());
2127  const AttrListPtr &PAL = F->getAttributes();
2128
2129  std::string tstr;
2130  raw_string_ostream FunctionInnards(tstr);
2131
2132  // Print out the name...
2133  FunctionInnards << GetValueName(F) << '(';
2134
2135  bool PrintedArg = false;
2136  if (!F->isDeclaration()) {
2137    if (!F->arg_empty()) {
2138      Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
2139      unsigned Idx = 1;
2140
2141      // If this is a struct-return function, don't print the hidden
2142      // struct-return argument.
2143      if (isStructReturn) {
2144        assert(I != E && "Invalid struct return function!");
2145        ++I;
2146        ++Idx;
2147      }
2148
2149      std::string ArgName;
2150      for (; I != E; ++I) {
2151        if (PrintedArg) FunctionInnards << ", ";
2152        if (I->hasName() || !Prototype)
2153          ArgName = GetValueName(I);
2154        else
2155          ArgName = "";
2156        Type *ArgTy = I->getType();
2157        if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
2158          ArgTy = cast<PointerType>(ArgTy)->getElementType();
2159          ByValParams.insert(I);
2160        }
2161        printType(FunctionInnards, ArgTy,
2162            /*isSigned=*/PAL.paramHasAttr(Idx, Attribute::SExt),
2163            ArgName);
2164        PrintedArg = true;
2165        ++Idx;
2166      }
2167    }
2168  } else {
2169    // Loop over the arguments, printing them.
2170    FunctionType::param_iterator I = FT->param_begin(), E = FT->param_end();
2171    unsigned Idx = 1;
2172
2173    // If this is a struct-return function, don't print the hidden
2174    // struct-return argument.
2175    if (isStructReturn) {
2176      assert(I != E && "Invalid struct return function!");
2177      ++I;
2178      ++Idx;
2179    }
2180
2181    for (; I != E; ++I) {
2182      if (PrintedArg) FunctionInnards << ", ";
2183      Type *ArgTy = *I;
2184      if (PAL.paramHasAttr(Idx, Attribute::ByVal)) {
2185        assert(ArgTy->isPointerTy());
2186        ArgTy = cast<PointerType>(ArgTy)->getElementType();
2187      }
2188      printType(FunctionInnards, ArgTy,
2189             /*isSigned=*/PAL.paramHasAttr(Idx, Attribute::SExt));
2190      PrintedArg = true;
2191      ++Idx;
2192    }
2193  }
2194
2195  if (!PrintedArg && FT->isVarArg()) {
2196    FunctionInnards << "int vararg_dummy_arg";
2197    PrintedArg = true;
2198  }
2199
2200  // Finish printing arguments... if this is a vararg function, print the ...,
2201  // unless there are no known types, in which case, we just emit ().
2202  //
2203  if (FT->isVarArg() && PrintedArg) {
2204    FunctionInnards << ",...";  // Output varargs portion of signature!
2205  } else if (!FT->isVarArg() && !PrintedArg) {
2206    FunctionInnards << "void"; // ret() -> ret(void) in C.
2207  }
2208  FunctionInnards << ')';
2209
2210  // Get the return tpe for the function.
2211  Type *RetTy;
2212  if (!isStructReturn)
2213    RetTy = F->getReturnType();
2214  else {
2215    // If this is a struct-return function, print the struct-return type.
2216    RetTy = cast<PointerType>(FT->getParamType(0))->getElementType();
2217  }
2218
2219  // Print out the return type and the signature built above.
2220  printType(Out, RetTy,
2221            /*isSigned=*/PAL.paramHasAttr(0, Attribute::SExt),
2222            FunctionInnards.str());
2223}
2224
2225static inline bool isFPIntBitCast(const Instruction &I) {
2226  if (!isa<BitCastInst>(I))
2227    return false;
2228  Type *SrcTy = I.getOperand(0)->getType();
2229  Type *DstTy = I.getType();
2230  return (SrcTy->isFloatingPointTy() && DstTy->isIntegerTy()) ||
2231         (DstTy->isFloatingPointTy() && SrcTy->isIntegerTy());
2232}
2233
2234void CWriter::printFunction(Function &F) {
2235  /// isStructReturn - Should this function actually return a struct by-value?
2236  bool isStructReturn = F.hasStructRetAttr();
2237
2238  printFunctionSignature(&F, false);
2239  Out << " {\n";
2240
2241  // If this is a struct return function, handle the result with magic.
2242  if (isStructReturn) {
2243    Type *StructTy =
2244      cast<PointerType>(F.arg_begin()->getType())->getElementType();
2245    Out << "  ";
2246    printType(Out, StructTy, false, "StructReturn");
2247    Out << ";  /* Struct return temporary */\n";
2248
2249    Out << "  ";
2250    printType(Out, F.arg_begin()->getType(), false,
2251              GetValueName(F.arg_begin()));
2252    Out << " = &StructReturn;\n";
2253  }
2254
2255  bool PrintedVar = false;
2256
2257  // print local variable information for the function
2258  for (inst_iterator I = inst_begin(&F), E = inst_end(&F); I != E; ++I) {
2259    if (const AllocaInst *AI = isDirectAlloca(&*I)) {
2260      Out << "  ";
2261      printType(Out, AI->getAllocatedType(), false, GetValueName(AI));
2262      Out << ";    /* Address-exposed local */\n";
2263      PrintedVar = true;
2264    } else if (I->getType() != Type::getVoidTy(F.getContext()) &&
2265               !isInlinableInst(*I)) {
2266      Out << "  ";
2267      printType(Out, I->getType(), false, GetValueName(&*I));
2268      Out << ";\n";
2269
2270      if (isa<PHINode>(*I)) {  // Print out PHI node temporaries as well...
2271        Out << "  ";
2272        printType(Out, I->getType(), false,
2273                  GetValueName(&*I)+"__PHI_TEMPORARY");
2274        Out << ";\n";
2275      }
2276      PrintedVar = true;
2277    }
2278    // We need a temporary for the BitCast to use so it can pluck a value out
2279    // of a union to do the BitCast. This is separate from the need for a
2280    // variable to hold the result of the BitCast.
2281    if (isFPIntBitCast(*I)) {
2282      Out << "  llvmBitCastUnion " << GetValueName(&*I)
2283          << "__BITCAST_TEMPORARY;\n";
2284      PrintedVar = true;
2285    }
2286  }
2287
2288  if (PrintedVar)
2289    Out << '\n';
2290
2291  if (F.hasExternalLinkage() && F.getName() == "main")
2292    Out << "  CODE_FOR_MAIN();\n";
2293
2294  // print the basic blocks
2295  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
2296    if (Loop *L = LI->getLoopFor(BB)) {
2297      if (L->getHeader() == BB && L->getParentLoop() == 0)
2298        printLoop(L);
2299    } else {
2300      printBasicBlock(BB);
2301    }
2302  }
2303
2304  Out << "}\n\n";
2305}
2306
2307void CWriter::printLoop(Loop *L) {
2308  Out << "  do {     /* Syntactic loop '" << L->getHeader()->getName()
2309      << "' to make GCC happy */\n";
2310  for (unsigned i = 0, e = L->getBlocks().size(); i != e; ++i) {
2311    BasicBlock *BB = L->getBlocks()[i];
2312    Loop *BBLoop = LI->getLoopFor(BB);
2313    if (BBLoop == L)
2314      printBasicBlock(BB);
2315    else if (BB == BBLoop->getHeader() && BBLoop->getParentLoop() == L)
2316      printLoop(BBLoop);
2317  }
2318  Out << "  } while (1); /* end of syntactic loop '"
2319      << L->getHeader()->getName() << "' */\n";
2320}
2321
2322void CWriter::printBasicBlock(BasicBlock *BB) {
2323
2324  // Don't print the label for the basic block if there are no uses, or if
2325  // the only terminator use is the predecessor basic block's terminator.
2326  // We have to scan the use list because PHI nodes use basic blocks too but
2327  // do not require a label to be generated.
2328  //
2329  bool NeedsLabel = false;
2330  for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
2331    if (isGotoCodeNecessary(*PI, BB)) {
2332      NeedsLabel = true;
2333      break;
2334    }
2335
2336  if (NeedsLabel) Out << GetValueName(BB) << ":\n";
2337
2338  // Output all of the instructions in the basic block...
2339  for (BasicBlock::iterator II = BB->begin(), E = --BB->end(); II != E;
2340       ++II) {
2341    if (!isInlinableInst(*II) && !isDirectAlloca(II)) {
2342      if (II->getType() != Type::getVoidTy(BB->getContext()) &&
2343          !isInlineAsm(*II))
2344        outputLValue(II);
2345      else
2346        Out << "  ";
2347      writeInstComputationInline(*II);
2348      Out << ";\n";
2349    }
2350  }
2351
2352  // Don't emit prefix or suffix for the terminator.
2353  visit(*BB->getTerminator());
2354}
2355
2356
2357// Specific Instruction type classes... note that all of the casts are
2358// necessary because we use the instruction classes as opaque types...
2359//
2360void CWriter::visitReturnInst(ReturnInst &I) {
2361  // If this is a struct return function, return the temporary struct.
2362  bool isStructReturn = I.getParent()->getParent()->hasStructRetAttr();
2363
2364  if (isStructReturn) {
2365    Out << "  return StructReturn;\n";
2366    return;
2367  }
2368
2369  // Don't output a void return if this is the last basic block in the function
2370  if (I.getNumOperands() == 0 &&
2371      &*--I.getParent()->getParent()->end() == I.getParent() &&
2372      !I.getParent()->size() == 1) {
2373    return;
2374  }
2375
2376  Out << "  return";
2377  if (I.getNumOperands()) {
2378    Out << ' ';
2379    writeOperand(I.getOperand(0));
2380  }
2381  Out << ";\n";
2382}
2383
2384void CWriter::visitSwitchInst(SwitchInst &SI) {
2385
2386  Value* Cond = SI.getCondition();
2387
2388  Out << "  switch (";
2389  writeOperand(Cond);
2390  Out << ") {\n  default:\n";
2391  printPHICopiesForSuccessor (SI.getParent(), SI.getDefaultDest(), 2);
2392  printBranchToBlock(SI.getParent(), SI.getDefaultDest(), 2);
2393  Out << ";\n";
2394
2395  unsigned NumCases = SI.getNumCases();
2396  // Skip the first item since that's the default case.
2397  for (unsigned i = 1; i < NumCases; ++i) {
2398    ConstantInt* CaseVal = SI.getCaseValue(i);
2399    BasicBlock* Succ = SI.getSuccessor(i);
2400    Out << "  case ";
2401    writeOperand(CaseVal);
2402    Out << ":\n";
2403    printPHICopiesForSuccessor (SI.getParent(), Succ, 2);
2404    printBranchToBlock(SI.getParent(), Succ, 2);
2405    if (Function::iterator(Succ) == llvm::next(Function::iterator(SI.getParent())))
2406      Out << "    break;\n";
2407  }
2408
2409  Out << "  }\n";
2410}
2411
2412void CWriter::visitIndirectBrInst(IndirectBrInst &IBI) {
2413  Out << "  goto *(void*)(";
2414  writeOperand(IBI.getOperand(0));
2415  Out << ");\n";
2416}
2417
2418void CWriter::visitUnreachableInst(UnreachableInst &I) {
2419  Out << "  /*UNREACHABLE*/;\n";
2420}
2421
2422bool CWriter::isGotoCodeNecessary(BasicBlock *From, BasicBlock *To) {
2423  /// FIXME: This should be reenabled, but loop reordering safe!!
2424  return true;
2425
2426  if (llvm::next(Function::iterator(From)) != Function::iterator(To))
2427    return true;  // Not the direct successor, we need a goto.
2428
2429  //isa<SwitchInst>(From->getTerminator())
2430
2431  if (LI->getLoopFor(From) != LI->getLoopFor(To))
2432    return true;
2433  return false;
2434}
2435
2436void CWriter::printPHICopiesForSuccessor (BasicBlock *CurBlock,
2437                                          BasicBlock *Successor,
2438                                          unsigned Indent) {
2439  for (BasicBlock::iterator I = Successor->begin(); isa<PHINode>(I); ++I) {
2440    PHINode *PN = cast<PHINode>(I);
2441    // Now we have to do the printing.
2442    Value *IV = PN->getIncomingValueForBlock(CurBlock);
2443    if (!isa<UndefValue>(IV)) {
2444      Out << std::string(Indent, ' ');
2445      Out << "  " << GetValueName(I) << "__PHI_TEMPORARY = ";
2446      writeOperand(IV);
2447      Out << ";   /* for PHI node */\n";
2448    }
2449  }
2450}
2451
2452void CWriter::printBranchToBlock(BasicBlock *CurBB, BasicBlock *Succ,
2453                                 unsigned Indent) {
2454  if (isGotoCodeNecessary(CurBB, Succ)) {
2455    Out << std::string(Indent, ' ') << "  goto ";
2456    writeOperand(Succ);
2457    Out << ";\n";
2458  }
2459}
2460
2461// Branch instruction printing - Avoid printing out a branch to a basic block
2462// that immediately succeeds the current one.
2463//
2464void CWriter::visitBranchInst(BranchInst &I) {
2465
2466  if (I.isConditional()) {
2467    if (isGotoCodeNecessary(I.getParent(), I.getSuccessor(0))) {
2468      Out << "  if (";
2469      writeOperand(I.getCondition());
2470      Out << ") {\n";
2471
2472      printPHICopiesForSuccessor (I.getParent(), I.getSuccessor(0), 2);
2473      printBranchToBlock(I.getParent(), I.getSuccessor(0), 2);
2474
2475      if (isGotoCodeNecessary(I.getParent(), I.getSuccessor(1))) {
2476        Out << "  } else {\n";
2477        printPHICopiesForSuccessor (I.getParent(), I.getSuccessor(1), 2);
2478        printBranchToBlock(I.getParent(), I.getSuccessor(1), 2);
2479      }
2480    } else {
2481      // First goto not necessary, assume second one is...
2482      Out << "  if (!";
2483      writeOperand(I.getCondition());
2484      Out << ") {\n";
2485
2486      printPHICopiesForSuccessor (I.getParent(), I.getSuccessor(1), 2);
2487      printBranchToBlock(I.getParent(), I.getSuccessor(1), 2);
2488    }
2489
2490    Out << "  }\n";
2491  } else {
2492    printPHICopiesForSuccessor (I.getParent(), I.getSuccessor(0), 0);
2493    printBranchToBlock(I.getParent(), I.getSuccessor(0), 0);
2494  }
2495  Out << "\n";
2496}
2497
2498// PHI nodes get copied into temporary values at the end of predecessor basic
2499// blocks.  We now need to copy these temporary values into the REAL value for
2500// the PHI.
2501void CWriter::visitPHINode(PHINode &I) {
2502  writeOperand(&I);
2503  Out << "__PHI_TEMPORARY";
2504}
2505
2506
2507void CWriter::visitBinaryOperator(Instruction &I) {
2508  // binary instructions, shift instructions, setCond instructions.
2509  assert(!I.getType()->isPointerTy());
2510
2511  // We must cast the results of binary operations which might be promoted.
2512  bool needsCast = false;
2513  if ((I.getType() == Type::getInt8Ty(I.getContext())) ||
2514      (I.getType() == Type::getInt16Ty(I.getContext()))
2515      || (I.getType() == Type::getFloatTy(I.getContext()))) {
2516    needsCast = true;
2517    Out << "((";
2518    printType(Out, I.getType(), false);
2519    Out << ")(";
2520  }
2521
2522  // If this is a negation operation, print it out as such.  For FP, we don't
2523  // want to print "-0.0 - X".
2524  if (BinaryOperator::isNeg(&I)) {
2525    Out << "-(";
2526    writeOperand(BinaryOperator::getNegArgument(cast<BinaryOperator>(&I)));
2527    Out << ")";
2528  } else if (BinaryOperator::isFNeg(&I)) {
2529    Out << "-(";
2530    writeOperand(BinaryOperator::getFNegArgument(cast<BinaryOperator>(&I)));
2531    Out << ")";
2532  } else if (I.getOpcode() == Instruction::FRem) {
2533    // Output a call to fmod/fmodf instead of emitting a%b
2534    if (I.getType() == Type::getFloatTy(I.getContext()))
2535      Out << "fmodf(";
2536    else if (I.getType() == Type::getDoubleTy(I.getContext()))
2537      Out << "fmod(";
2538    else  // all 3 flavors of long double
2539      Out << "fmodl(";
2540    writeOperand(I.getOperand(0));
2541    Out << ", ";
2542    writeOperand(I.getOperand(1));
2543    Out << ")";
2544  } else {
2545
2546    // Write out the cast of the instruction's value back to the proper type
2547    // if necessary.
2548    bool NeedsClosingParens = writeInstructionCast(I);
2549
2550    // Certain instructions require the operand to be forced to a specific type
2551    // so we use writeOperandWithCast here instead of writeOperand. Similarly
2552    // below for operand 1
2553    writeOperandWithCast(I.getOperand(0), I.getOpcode());
2554
2555    switch (I.getOpcode()) {
2556    case Instruction::Add:
2557    case Instruction::FAdd: Out << " + "; break;
2558    case Instruction::Sub:
2559    case Instruction::FSub: Out << " - "; break;
2560    case Instruction::Mul:
2561    case Instruction::FMul: Out << " * "; break;
2562    case Instruction::URem:
2563    case Instruction::SRem:
2564    case Instruction::FRem: Out << " % "; break;
2565    case Instruction::UDiv:
2566    case Instruction::SDiv:
2567    case Instruction::FDiv: Out << " / "; break;
2568    case Instruction::And:  Out << " & "; break;
2569    case Instruction::Or:   Out << " | "; break;
2570    case Instruction::Xor:  Out << " ^ "; break;
2571    case Instruction::Shl : Out << " << "; break;
2572    case Instruction::LShr:
2573    case Instruction::AShr: Out << " >> "; break;
2574    default:
2575#ifndef NDEBUG
2576       errs() << "Invalid operator type!" << I;
2577#endif
2578       llvm_unreachable(0);
2579    }
2580
2581    writeOperandWithCast(I.getOperand(1), I.getOpcode());
2582    if (NeedsClosingParens)
2583      Out << "))";
2584  }
2585
2586  if (needsCast) {
2587    Out << "))";
2588  }
2589}
2590
2591void CWriter::visitICmpInst(ICmpInst &I) {
2592  // We must cast the results of icmp which might be promoted.
2593  bool needsCast = false;
2594
2595  // Write out the cast of the instruction's value back to the proper type
2596  // if necessary.
2597  bool NeedsClosingParens = writeInstructionCast(I);
2598
2599  // Certain icmp predicate require the operand to be forced to a specific type
2600  // so we use writeOperandWithCast here instead of writeOperand. Similarly
2601  // below for operand 1
2602  writeOperandWithCast(I.getOperand(0), I);
2603
2604  switch (I.getPredicate()) {
2605  case ICmpInst::ICMP_EQ:  Out << " == "; break;
2606  case ICmpInst::ICMP_NE:  Out << " != "; break;
2607  case ICmpInst::ICMP_ULE:
2608  case ICmpInst::ICMP_SLE: Out << " <= "; break;
2609  case ICmpInst::ICMP_UGE:
2610  case ICmpInst::ICMP_SGE: Out << " >= "; break;
2611  case ICmpInst::ICMP_ULT:
2612  case ICmpInst::ICMP_SLT: Out << " < "; break;
2613  case ICmpInst::ICMP_UGT:
2614  case ICmpInst::ICMP_SGT: Out << " > "; break;
2615  default:
2616#ifndef NDEBUG
2617    errs() << "Invalid icmp predicate!" << I;
2618#endif
2619    llvm_unreachable(0);
2620  }
2621
2622  writeOperandWithCast(I.getOperand(1), I);
2623  if (NeedsClosingParens)
2624    Out << "))";
2625
2626  if (needsCast) {
2627    Out << "))";
2628  }
2629}
2630
2631void CWriter::visitFCmpInst(FCmpInst &I) {
2632  if (I.getPredicate() == FCmpInst::FCMP_FALSE) {
2633    Out << "0";
2634    return;
2635  }
2636  if (I.getPredicate() == FCmpInst::FCMP_TRUE) {
2637    Out << "1";
2638    return;
2639  }
2640
2641  const char* op = 0;
2642  switch (I.getPredicate()) {
2643  default: llvm_unreachable("Illegal FCmp predicate");
2644  case FCmpInst::FCMP_ORD: op = "ord"; break;
2645  case FCmpInst::FCMP_UNO: op = "uno"; break;
2646  case FCmpInst::FCMP_UEQ: op = "ueq"; break;
2647  case FCmpInst::FCMP_UNE: op = "une"; break;
2648  case FCmpInst::FCMP_ULT: op = "ult"; break;
2649  case FCmpInst::FCMP_ULE: op = "ule"; break;
2650  case FCmpInst::FCMP_UGT: op = "ugt"; break;
2651  case FCmpInst::FCMP_UGE: op = "uge"; break;
2652  case FCmpInst::FCMP_OEQ: op = "oeq"; break;
2653  case FCmpInst::FCMP_ONE: op = "one"; break;
2654  case FCmpInst::FCMP_OLT: op = "olt"; break;
2655  case FCmpInst::FCMP_OLE: op = "ole"; break;
2656  case FCmpInst::FCMP_OGT: op = "ogt"; break;
2657  case FCmpInst::FCMP_OGE: op = "oge"; break;
2658  }
2659
2660  Out << "llvm_fcmp_" << op << "(";
2661  // Write the first operand
2662  writeOperand(I.getOperand(0));
2663  Out << ", ";
2664  // Write the second operand
2665  writeOperand(I.getOperand(1));
2666  Out << ")";
2667}
2668
2669static const char * getFloatBitCastField(Type *Ty) {
2670  switch (Ty->getTypeID()) {
2671    default: llvm_unreachable("Invalid Type");
2672    case Type::FloatTyID:  return "Float";
2673    case Type::DoubleTyID: return "Double";
2674    case Type::IntegerTyID: {
2675      unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth();
2676      if (NumBits <= 32)
2677        return "Int32";
2678      else
2679        return "Int64";
2680    }
2681  }
2682}
2683
2684void CWriter::visitCastInst(CastInst &I) {
2685  Type *DstTy = I.getType();
2686  Type *SrcTy = I.getOperand(0)->getType();
2687  if (isFPIntBitCast(I)) {
2688    Out << '(';
2689    // These int<->float and long<->double casts need to be handled specially
2690    Out << GetValueName(&I) << "__BITCAST_TEMPORARY."
2691        << getFloatBitCastField(I.getOperand(0)->getType()) << " = ";
2692    writeOperand(I.getOperand(0));
2693    Out << ", " << GetValueName(&I) << "__BITCAST_TEMPORARY."
2694        << getFloatBitCastField(I.getType());
2695    Out << ')';
2696    return;
2697  }
2698
2699  Out << '(';
2700  printCast(I.getOpcode(), SrcTy, DstTy);
2701
2702  // Make a sext from i1 work by subtracting the i1 from 0 (an int).
2703  if (SrcTy == Type::getInt1Ty(I.getContext()) &&
2704      I.getOpcode() == Instruction::SExt)
2705    Out << "0-";
2706
2707  writeOperand(I.getOperand(0));
2708
2709  if (DstTy == Type::getInt1Ty(I.getContext()) &&
2710      (I.getOpcode() == Instruction::Trunc ||
2711       I.getOpcode() == Instruction::FPToUI ||
2712       I.getOpcode() == Instruction::FPToSI ||
2713       I.getOpcode() == Instruction::PtrToInt)) {
2714    // Make sure we really get a trunc to bool by anding the operand with 1
2715    Out << "&1u";
2716  }
2717  Out << ')';
2718}
2719
2720void CWriter::visitSelectInst(SelectInst &I) {
2721  Out << "((";
2722  writeOperand(I.getCondition());
2723  Out << ") ? (";
2724  writeOperand(I.getTrueValue());
2725  Out << ") : (";
2726  writeOperand(I.getFalseValue());
2727  Out << "))";
2728}
2729
2730// Returns the macro name or value of the max or min of an integer type
2731// (as defined in limits.h).
2732static void printLimitValue(IntegerType &Ty, bool isSigned, bool isMax,
2733                            raw_ostream &Out) {
2734  const char* type;
2735  const char* sprefix = "";
2736
2737  unsigned NumBits = Ty.getBitWidth();
2738  if (NumBits <= 8) {
2739    type = "CHAR";
2740    sprefix = "S";
2741  } else if (NumBits <= 16) {
2742    type = "SHRT";
2743  } else if (NumBits <= 32) {
2744    type = "INT";
2745  } else if (NumBits <= 64) {
2746    type = "LLONG";
2747  } else {
2748    llvm_unreachable("Bit widths > 64 not implemented yet");
2749  }
2750
2751  if (isSigned)
2752    Out << sprefix << type << (isMax ? "_MAX" : "_MIN");
2753  else
2754    Out << "U" << type << (isMax ? "_MAX" : "0");
2755}
2756
2757#ifndef NDEBUG
2758static bool isSupportedIntegerSize(IntegerType &T) {
2759  return T.getBitWidth() == 8 || T.getBitWidth() == 16 ||
2760         T.getBitWidth() == 32 || T.getBitWidth() == 64;
2761}
2762#endif
2763
2764void CWriter::printIntrinsicDefinition(const Function &F, raw_ostream &Out) {
2765  FunctionType *funT = F.getFunctionType();
2766  Type *retT = F.getReturnType();
2767  IntegerType *elemT = cast<IntegerType>(funT->getParamType(1));
2768
2769  assert(isSupportedIntegerSize(*elemT) &&
2770         "CBackend does not support arbitrary size integers.");
2771  assert(cast<StructType>(retT)->getElementType(0) == elemT &&
2772         elemT == funT->getParamType(0) && funT->getNumParams() == 2);
2773
2774  switch (F.getIntrinsicID()) {
2775  default:
2776    llvm_unreachable("Unsupported Intrinsic.");
2777  case Intrinsic::uadd_with_overflow:
2778    // static inline Rty uadd_ixx(unsigned ixx a, unsigned ixx b) {
2779    //   Rty r;
2780    //   r.field0 = a + b;
2781    //   r.field1 = (r.field0 < a);
2782    //   return r;
2783    // }
2784    Out << "static inline ";
2785    printType(Out, retT);
2786    Out << GetValueName(&F);
2787    Out << "(";
2788    printSimpleType(Out, elemT, false);
2789    Out << "a,";
2790    printSimpleType(Out, elemT, false);
2791    Out << "b) {\n  ";
2792    printType(Out, retT);
2793    Out << "r;\n";
2794    Out << "  r.field0 = a + b;\n";
2795    Out << "  r.field1 = (r.field0 < a);\n";
2796    Out << "  return r;\n}\n";
2797    break;
2798
2799  case Intrinsic::sadd_with_overflow:
2800    // static inline Rty sadd_ixx(ixx a, ixx b) {
2801    //   Rty r;
2802    //   r.field1 = (b > 0 && a > XX_MAX - b) ||
2803    //              (b < 0 && a < XX_MIN - b);
2804    //   r.field0 = r.field1 ? 0 : a + b;
2805    //   return r;
2806    // }
2807    Out << "static ";
2808    printType(Out, retT);
2809    Out << GetValueName(&F);
2810    Out << "(";
2811    printSimpleType(Out, elemT, true);
2812    Out << "a,";
2813    printSimpleType(Out, elemT, true);
2814    Out << "b) {\n  ";
2815    printType(Out, retT);
2816    Out << "r;\n";
2817    Out << "  r.field1 = (b > 0 && a > ";
2818    printLimitValue(*elemT, true, true, Out);
2819    Out << " - b) || (b < 0 && a < ";
2820    printLimitValue(*elemT, true, false, Out);
2821    Out << " - b);\n";
2822    Out << "  r.field0 = r.field1 ? 0 : a + b;\n";
2823    Out << "  return r;\n}\n";
2824    break;
2825  }
2826}
2827
2828void CWriter::lowerIntrinsics(Function &F) {
2829  // This is used to keep track of intrinsics that get generated to a lowered
2830  // function. We must generate the prototypes before the function body which
2831  // will only be expanded on first use (by the loop below).
2832  std::vector<Function*> prototypesToGen;
2833
2834  // Examine all the instructions in this function to find the intrinsics that
2835  // need to be lowered.
2836  for (Function::iterator BB = F.begin(), EE = F.end(); BB != EE; ++BB)
2837    for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; )
2838      if (CallInst *CI = dyn_cast<CallInst>(I++))
2839        if (Function *F = CI->getCalledFunction())
2840          switch (F->getIntrinsicID()) {
2841          case Intrinsic::not_intrinsic:
2842          case Intrinsic::vastart:
2843          case Intrinsic::vacopy:
2844          case Intrinsic::vaend:
2845          case Intrinsic::returnaddress:
2846          case Intrinsic::frameaddress:
2847          case Intrinsic::setjmp:
2848          case Intrinsic::longjmp:
2849          case Intrinsic::prefetch:
2850          case Intrinsic::powi:
2851          case Intrinsic::x86_sse_cmp_ss:
2852          case Intrinsic::x86_sse_cmp_ps:
2853          case Intrinsic::x86_sse2_cmp_sd:
2854          case Intrinsic::x86_sse2_cmp_pd:
2855          case Intrinsic::ppc_altivec_lvsl:
2856          case Intrinsic::uadd_with_overflow:
2857          case Intrinsic::sadd_with_overflow:
2858              // We directly implement these intrinsics
2859            break;
2860          default:
2861            // If this is an intrinsic that directly corresponds to a GCC
2862            // builtin, we handle it.
2863            const char *BuiltinName = "";
2864#define GET_GCC_BUILTIN_NAME
2865#include "llvm/Intrinsics.gen"
2866#undef GET_GCC_BUILTIN_NAME
2867            // If we handle it, don't lower it.
2868            if (BuiltinName[0]) break;
2869
2870            // All other intrinsic calls we must lower.
2871            Instruction *Before = 0;
2872            if (CI != &BB->front())
2873              Before = prior(BasicBlock::iterator(CI));
2874
2875            IL->LowerIntrinsicCall(CI);
2876            if (Before) {        // Move iterator to instruction after call
2877              I = Before; ++I;
2878            } else {
2879              I = BB->begin();
2880            }
2881            // If the intrinsic got lowered to another call, and that call has
2882            // a definition then we need to make sure its prototype is emitted
2883            // before any calls to it.
2884            if (CallInst *Call = dyn_cast<CallInst>(I))
2885              if (Function *NewF = Call->getCalledFunction())
2886                if (!NewF->isDeclaration())
2887                  prototypesToGen.push_back(NewF);
2888
2889            break;
2890          }
2891
2892  // We may have collected some prototypes to emit in the loop above.
2893  // Emit them now, before the function that uses them is emitted. But,
2894  // be careful not to emit them twice.
2895  std::vector<Function*>::iterator I = prototypesToGen.begin();
2896  std::vector<Function*>::iterator E = prototypesToGen.end();
2897  for ( ; I != E; ++I) {
2898    if (intrinsicPrototypesAlreadyGenerated.insert(*I).second) {
2899      Out << '\n';
2900      printFunctionSignature(*I, true);
2901      Out << ";\n";
2902    }
2903  }
2904}
2905
2906void CWriter::visitCallInst(CallInst &I) {
2907  if (isa<InlineAsm>(I.getCalledValue()))
2908    return visitInlineAsm(I);
2909
2910  bool WroteCallee = false;
2911
2912  // Handle intrinsic function calls first...
2913  if (Function *F = I.getCalledFunction())
2914    if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID())
2915      if (visitBuiltinCall(I, ID, WroteCallee))
2916        return;
2917
2918  Value *Callee = I.getCalledValue();
2919
2920  PointerType  *PTy   = cast<PointerType>(Callee->getType());
2921  FunctionType *FTy   = cast<FunctionType>(PTy->getElementType());
2922
2923  // If this is a call to a struct-return function, assign to the first
2924  // parameter instead of passing it to the call.
2925  const AttrListPtr &PAL = I.getAttributes();
2926  bool hasByVal = I.hasByValArgument();
2927  bool isStructRet = I.hasStructRetAttr();
2928  if (isStructRet) {
2929    writeOperandDeref(I.getArgOperand(0));
2930    Out << " = ";
2931  }
2932
2933  if (I.isTailCall()) Out << " /*tail*/ ";
2934
2935  if (!WroteCallee) {
2936    // If this is an indirect call to a struct return function, we need to cast
2937    // the pointer. Ditto for indirect calls with byval arguments.
2938    bool NeedsCast = (hasByVal || isStructRet) && !isa<Function>(Callee);
2939
2940    // GCC is a real PITA.  It does not permit codegening casts of functions to
2941    // function pointers if they are in a call (it generates a trap instruction
2942    // instead!).  We work around this by inserting a cast to void* in between
2943    // the function and the function pointer cast.  Unfortunately, we can't just
2944    // form the constant expression here, because the folder will immediately
2945    // nuke it.
2946    //
2947    // Note finally, that this is completely unsafe.  ANSI C does not guarantee
2948    // that void* and function pointers have the same size. :( To deal with this
2949    // in the common case, we handle casts where the number of arguments passed
2950    // match exactly.
2951    //
2952    if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Callee))
2953      if (CE->isCast())
2954        if (Function *RF = dyn_cast<Function>(CE->getOperand(0))) {
2955          NeedsCast = true;
2956          Callee = RF;
2957        }
2958
2959    if (NeedsCast) {
2960      // Ok, just cast the pointer type.
2961      Out << "((";
2962      if (isStructRet)
2963        printStructReturnPointerFunctionType(Out, PAL,
2964                             cast<PointerType>(I.getCalledValue()->getType()));
2965      else if (hasByVal)
2966        printType(Out, I.getCalledValue()->getType(), false, "", true, PAL);
2967      else
2968        printType(Out, I.getCalledValue()->getType());
2969      Out << ")(void*)";
2970    }
2971    writeOperand(Callee);
2972    if (NeedsCast) Out << ')';
2973  }
2974
2975  Out << '(';
2976
2977  bool PrintedArg = false;
2978  if(FTy->isVarArg() && !FTy->getNumParams()) {
2979    Out << "0 /*dummy arg*/";
2980    PrintedArg = true;
2981  }
2982
2983  unsigned NumDeclaredParams = FTy->getNumParams();
2984  CallSite CS(&I);
2985  CallSite::arg_iterator AI = CS.arg_begin(), AE = CS.arg_end();
2986  unsigned ArgNo = 0;
2987  if (isStructRet) {   // Skip struct return argument.
2988    ++AI;
2989    ++ArgNo;
2990  }
2991
2992
2993  for (; AI != AE; ++AI, ++ArgNo) {
2994    if (PrintedArg) Out << ", ";
2995    if (ArgNo < NumDeclaredParams &&
2996        (*AI)->getType() != FTy->getParamType(ArgNo)) {
2997      Out << '(';
2998      printType(Out, FTy->getParamType(ArgNo),
2999            /*isSigned=*/PAL.paramHasAttr(ArgNo+1, Attribute::SExt));
3000      Out << ')';
3001    }
3002    // Check if the argument is expected to be passed by value.
3003    if (I.paramHasAttr(ArgNo+1, Attribute::ByVal))
3004      writeOperandDeref(*AI);
3005    else
3006      writeOperand(*AI);
3007    PrintedArg = true;
3008  }
3009  Out << ')';
3010}
3011
3012/// visitBuiltinCall - Handle the call to the specified builtin.  Returns true
3013/// if the entire call is handled, return false if it wasn't handled, and
3014/// optionally set 'WroteCallee' if the callee has already been printed out.
3015bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
3016                               bool &WroteCallee) {
3017  switch (ID) {
3018  default: {
3019    // If this is an intrinsic that directly corresponds to a GCC
3020    // builtin, we emit it here.
3021    const char *BuiltinName = "";
3022    Function *F = I.getCalledFunction();
3023#define GET_GCC_BUILTIN_NAME
3024#include "llvm/Intrinsics.gen"
3025#undef GET_GCC_BUILTIN_NAME
3026    assert(BuiltinName[0] && "Unknown LLVM intrinsic!");
3027
3028    Out << BuiltinName;
3029    WroteCallee = true;
3030    return false;
3031  }
3032  case Intrinsic::vastart:
3033    Out << "0; ";
3034
3035    Out << "va_start(*(va_list*)";
3036    writeOperand(I.getArgOperand(0));
3037    Out << ", ";
3038    // Output the last argument to the enclosing function.
3039    if (I.getParent()->getParent()->arg_empty())
3040      Out << "vararg_dummy_arg";
3041    else
3042      writeOperand(--I.getParent()->getParent()->arg_end());
3043    Out << ')';
3044    return true;
3045  case Intrinsic::vaend:
3046    if (!isa<ConstantPointerNull>(I.getArgOperand(0))) {
3047      Out << "0; va_end(*(va_list*)";
3048      writeOperand(I.getArgOperand(0));
3049      Out << ')';
3050    } else {
3051      Out << "va_end(*(va_list*)0)";
3052    }
3053    return true;
3054  case Intrinsic::vacopy:
3055    Out << "0; ";
3056    Out << "va_copy(*(va_list*)";
3057    writeOperand(I.getArgOperand(0));
3058    Out << ", *(va_list*)";
3059    writeOperand(I.getArgOperand(1));
3060    Out << ')';
3061    return true;
3062  case Intrinsic::returnaddress:
3063    Out << "__builtin_return_address(";
3064    writeOperand(I.getArgOperand(0));
3065    Out << ')';
3066    return true;
3067  case Intrinsic::frameaddress:
3068    Out << "__builtin_frame_address(";
3069    writeOperand(I.getArgOperand(0));
3070    Out << ')';
3071    return true;
3072  case Intrinsic::powi:
3073    Out << "__builtin_powi(";
3074    writeOperand(I.getArgOperand(0));
3075    Out << ", ";
3076    writeOperand(I.getArgOperand(1));
3077    Out << ')';
3078    return true;
3079  case Intrinsic::setjmp:
3080    Out << "setjmp(*(jmp_buf*)";
3081    writeOperand(I.getArgOperand(0));
3082    Out << ')';
3083    return true;
3084  case Intrinsic::longjmp:
3085    Out << "longjmp(*(jmp_buf*)";
3086    writeOperand(I.getArgOperand(0));
3087    Out << ", ";
3088    writeOperand(I.getArgOperand(1));
3089    Out << ')';
3090    return true;
3091  case Intrinsic::prefetch:
3092    Out << "LLVM_PREFETCH((const void *)";
3093    writeOperand(I.getArgOperand(0));
3094    Out << ", ";
3095    writeOperand(I.getArgOperand(1));
3096    Out << ", ";
3097    writeOperand(I.getArgOperand(2));
3098    Out << ")";
3099    return true;
3100  case Intrinsic::stacksave:
3101    // Emit this as: Val = 0; *((void**)&Val) = __builtin_stack_save()
3102    // to work around GCC bugs (see PR1809).
3103    Out << "0; *((void**)&" << GetValueName(&I)
3104        << ") = __builtin_stack_save()";
3105    return true;
3106  case Intrinsic::x86_sse_cmp_ss:
3107  case Intrinsic::x86_sse_cmp_ps:
3108  case Intrinsic::x86_sse2_cmp_sd:
3109  case Intrinsic::x86_sse2_cmp_pd:
3110    Out << '(';
3111    printType(Out, I.getType());
3112    Out << ')';
3113    // Multiple GCC builtins multiplex onto this intrinsic.
3114    switch (cast<ConstantInt>(I.getArgOperand(2))->getZExtValue()) {
3115    default: llvm_unreachable("Invalid llvm.x86.sse.cmp!");
3116    case 0: Out << "__builtin_ia32_cmpeq"; break;
3117    case 1: Out << "__builtin_ia32_cmplt"; break;
3118    case 2: Out << "__builtin_ia32_cmple"; break;
3119    case 3: Out << "__builtin_ia32_cmpunord"; break;
3120    case 4: Out << "__builtin_ia32_cmpneq"; break;
3121    case 5: Out << "__builtin_ia32_cmpnlt"; break;
3122    case 6: Out << "__builtin_ia32_cmpnle"; break;
3123    case 7: Out << "__builtin_ia32_cmpord"; break;
3124    }
3125    if (ID == Intrinsic::x86_sse_cmp_ps || ID == Intrinsic::x86_sse2_cmp_pd)
3126      Out << 'p';
3127    else
3128      Out << 's';
3129    if (ID == Intrinsic::x86_sse_cmp_ss || ID == Intrinsic::x86_sse_cmp_ps)
3130      Out << 's';
3131    else
3132      Out << 'd';
3133
3134    Out << "(";
3135    writeOperand(I.getArgOperand(0));
3136    Out << ", ";
3137    writeOperand(I.getArgOperand(1));
3138    Out << ")";
3139    return true;
3140  case Intrinsic::ppc_altivec_lvsl:
3141    Out << '(';
3142    printType(Out, I.getType());
3143    Out << ')';
3144    Out << "__builtin_altivec_lvsl(0, (void*)";
3145    writeOperand(I.getArgOperand(0));
3146    Out << ")";
3147    return true;
3148  case Intrinsic::uadd_with_overflow:
3149  case Intrinsic::sadd_with_overflow:
3150    Out << GetValueName(I.getCalledFunction()) << "(";
3151    writeOperand(I.getArgOperand(0));
3152    Out << ", ";
3153    writeOperand(I.getArgOperand(1));
3154    Out << ")";
3155    return true;
3156  }
3157}
3158
3159//This converts the llvm constraint string to something gcc is expecting.
3160//TODO: work out platform independent constraints and factor those out
3161//      of the per target tables
3162//      handle multiple constraint codes
3163std::string CWriter::InterpretASMConstraint(InlineAsm::ConstraintInfo& c) {
3164  assert(c.Codes.size() == 1 && "Too many asm constraint codes to handle");
3165
3166  // Grab the translation table from MCAsmInfo if it exists.
3167  const MCAsmInfo *TargetAsm;
3168  std::string Triple = TheModule->getTargetTriple();
3169  if (Triple.empty())
3170    Triple = llvm::sys::getHostTriple();
3171
3172  std::string E;
3173  if (const Target *Match = TargetRegistry::lookupTarget(Triple, E))
3174    TargetAsm = Match->createMCAsmInfo(Triple);
3175  else
3176    return c.Codes[0];
3177
3178  const char *const *table = TargetAsm->getAsmCBE();
3179
3180  // Search the translation table if it exists.
3181  for (int i = 0; table && table[i]; i += 2)
3182    if (c.Codes[0] == table[i]) {
3183      delete TargetAsm;
3184      return table[i+1];
3185    }
3186
3187  // Default is identity.
3188  delete TargetAsm;
3189  return c.Codes[0];
3190}
3191
3192//TODO: import logic from AsmPrinter.cpp
3193static std::string gccifyAsm(std::string asmstr) {
3194  for (std::string::size_type i = 0; i != asmstr.size(); ++i)
3195    if (asmstr[i] == '\n')
3196      asmstr.replace(i, 1, "\\n");
3197    else if (asmstr[i] == '\t')
3198      asmstr.replace(i, 1, "\\t");
3199    else if (asmstr[i] == '$') {
3200      if (asmstr[i + 1] == '{') {
3201        std::string::size_type a = asmstr.find_first_of(':', i + 1);
3202        std::string::size_type b = asmstr.find_first_of('}', i + 1);
3203        std::string n = "%" +
3204          asmstr.substr(a + 1, b - a - 1) +
3205          asmstr.substr(i + 2, a - i - 2);
3206        asmstr.replace(i, b - i + 1, n);
3207        i += n.size() - 1;
3208      } else
3209        asmstr.replace(i, 1, "%");
3210    }
3211    else if (asmstr[i] == '%')//grr
3212      { asmstr.replace(i, 1, "%%"); ++i;}
3213
3214  return asmstr;
3215}
3216
3217//TODO: assumptions about what consume arguments from the call are likely wrong
3218//      handle communitivity
3219void CWriter::visitInlineAsm(CallInst &CI) {
3220  InlineAsm* as = cast<InlineAsm>(CI.getCalledValue());
3221  InlineAsm::ConstraintInfoVector Constraints = as->ParseConstraints();
3222
3223  std::vector<std::pair<Value*, int> > ResultVals;
3224  if (CI.getType() == Type::getVoidTy(CI.getContext()))
3225    ;
3226  else if (StructType *ST = dyn_cast<StructType>(CI.getType())) {
3227    for (unsigned i = 0, e = ST->getNumElements(); i != e; ++i)
3228      ResultVals.push_back(std::make_pair(&CI, (int)i));
3229  } else {
3230    ResultVals.push_back(std::make_pair(&CI, -1));
3231  }
3232
3233  // Fix up the asm string for gcc and emit it.
3234  Out << "__asm__ volatile (\"" << gccifyAsm(as->getAsmString()) << "\"\n";
3235  Out << "        :";
3236
3237  unsigned ValueCount = 0;
3238  bool IsFirst = true;
3239
3240  // Convert over all the output constraints.
3241  for (InlineAsm::ConstraintInfoVector::iterator I = Constraints.begin(),
3242       E = Constraints.end(); I != E; ++I) {
3243
3244    if (I->Type != InlineAsm::isOutput) {
3245      ++ValueCount;
3246      continue;  // Ignore non-output constraints.
3247    }
3248
3249    assert(I->Codes.size() == 1 && "Too many asm constraint codes to handle");
3250    std::string C = InterpretASMConstraint(*I);
3251    if (C.empty()) continue;
3252
3253    if (!IsFirst) {
3254      Out << ", ";
3255      IsFirst = false;
3256    }
3257
3258    // Unpack the dest.
3259    Value *DestVal;
3260    int DestValNo = -1;
3261
3262    if (ValueCount < ResultVals.size()) {
3263      DestVal = ResultVals[ValueCount].first;
3264      DestValNo = ResultVals[ValueCount].second;
3265    } else
3266      DestVal = CI.getArgOperand(ValueCount-ResultVals.size());
3267
3268    if (I->isEarlyClobber)
3269      C = "&"+C;
3270
3271    Out << "\"=" << C << "\"(" << GetValueName(DestVal);
3272    if (DestValNo != -1)
3273      Out << ".field" << DestValNo; // Multiple retvals.
3274    Out << ")";
3275    ++ValueCount;
3276  }
3277
3278
3279  // Convert over all the input constraints.
3280  Out << "\n        :";
3281  IsFirst = true;
3282  ValueCount = 0;
3283  for (InlineAsm::ConstraintInfoVector::iterator I = Constraints.begin(),
3284       E = Constraints.end(); I != E; ++I) {
3285    if (I->Type != InlineAsm::isInput) {
3286      ++ValueCount;
3287      continue;  // Ignore non-input constraints.
3288    }
3289
3290    assert(I->Codes.size() == 1 && "Too many asm constraint codes to handle");
3291    std::string C = InterpretASMConstraint(*I);
3292    if (C.empty()) continue;
3293
3294    if (!IsFirst) {
3295      Out << ", ";
3296      IsFirst = false;
3297    }
3298
3299    assert(ValueCount >= ResultVals.size() && "Input can't refer to result");
3300    Value *SrcVal = CI.getArgOperand(ValueCount-ResultVals.size());
3301
3302    Out << "\"" << C << "\"(";
3303    if (!I->isIndirect)
3304      writeOperand(SrcVal);
3305    else
3306      writeOperandDeref(SrcVal);
3307    Out << ")";
3308  }
3309
3310  // Convert over the clobber constraints.
3311  IsFirst = true;
3312  for (InlineAsm::ConstraintInfoVector::iterator I = Constraints.begin(),
3313       E = Constraints.end(); I != E; ++I) {
3314    if (I->Type != InlineAsm::isClobber)
3315      continue;  // Ignore non-input constraints.
3316
3317    assert(I->Codes.size() == 1 && "Too many asm constraint codes to handle");
3318    std::string C = InterpretASMConstraint(*I);
3319    if (C.empty()) continue;
3320
3321    if (!IsFirst) {
3322      Out << ", ";
3323      IsFirst = false;
3324    }
3325
3326    Out << '\"' << C << '"';
3327  }
3328
3329  Out << ")";
3330}
3331
3332void CWriter::visitAllocaInst(AllocaInst &I) {
3333  Out << '(';
3334  printType(Out, I.getType());
3335  Out << ") alloca(sizeof(";
3336  printType(Out, I.getType()->getElementType());
3337  Out << ')';
3338  if (I.isArrayAllocation()) {
3339    Out << " * " ;
3340    writeOperand(I.getOperand(0));
3341  }
3342  Out << ')';
3343}
3344
3345void CWriter::printGEPExpression(Value *Ptr, gep_type_iterator I,
3346                                 gep_type_iterator E, bool Static) {
3347
3348  // If there are no indices, just print out the pointer.
3349  if (I == E) {
3350    writeOperand(Ptr);
3351    return;
3352  }
3353
3354  // Find out if the last index is into a vector.  If so, we have to print this
3355  // specially.  Since vectors can't have elements of indexable type, only the
3356  // last index could possibly be of a vector element.
3357  VectorType *LastIndexIsVector = 0;
3358  {
3359    for (gep_type_iterator TmpI = I; TmpI != E; ++TmpI)
3360      LastIndexIsVector = dyn_cast<VectorType>(*TmpI);
3361  }
3362
3363  Out << "(";
3364
3365  // If the last index is into a vector, we can't print it as &a[i][j] because
3366  // we can't index into a vector with j in GCC.  Instead, emit this as
3367  // (((float*)&a[i])+j)
3368  if (LastIndexIsVector) {
3369    Out << "((";
3370    printType(Out, PointerType::getUnqual(LastIndexIsVector->getElementType()));
3371    Out << ")(";
3372  }
3373
3374  Out << '&';
3375
3376  // If the first index is 0 (very typical) we can do a number of
3377  // simplifications to clean up the code.
3378  Value *FirstOp = I.getOperand();
3379  if (!isa<Constant>(FirstOp) || !cast<Constant>(FirstOp)->isNullValue()) {
3380    // First index isn't simple, print it the hard way.
3381    writeOperand(Ptr);
3382  } else {
3383    ++I;  // Skip the zero index.
3384
3385    // Okay, emit the first operand. If Ptr is something that is already address
3386    // exposed, like a global, avoid emitting (&foo)[0], just emit foo instead.
3387    if (isAddressExposed(Ptr)) {
3388      writeOperandInternal(Ptr, Static);
3389    } else if (I != E && (*I)->isStructTy()) {
3390      // If we didn't already emit the first operand, see if we can print it as
3391      // P->f instead of "P[0].f"
3392      writeOperand(Ptr);
3393      Out << "->field" << cast<ConstantInt>(I.getOperand())->getZExtValue();
3394      ++I;  // eat the struct index as well.
3395    } else {
3396      // Instead of emitting P[0][1], emit (*P)[1], which is more idiomatic.
3397      Out << "(*";
3398      writeOperand(Ptr);
3399      Out << ")";
3400    }
3401  }
3402
3403  for (; I != E; ++I) {
3404    if ((*I)->isStructTy()) {
3405      Out << ".field" << cast<ConstantInt>(I.getOperand())->getZExtValue();
3406    } else if ((*I)->isArrayTy()) {
3407      Out << ".array[";
3408      writeOperandWithCast(I.getOperand(), Instruction::GetElementPtr);
3409      Out << ']';
3410    } else if (!(*I)->isVectorTy()) {
3411      Out << '[';
3412      writeOperandWithCast(I.getOperand(), Instruction::GetElementPtr);
3413      Out << ']';
3414    } else {
3415      // If the last index is into a vector, then print it out as "+j)".  This
3416      // works with the 'LastIndexIsVector' code above.
3417      if (isa<Constant>(I.getOperand()) &&
3418          cast<Constant>(I.getOperand())->isNullValue()) {
3419        Out << "))";  // avoid "+0".
3420      } else {
3421        Out << ")+(";
3422        writeOperandWithCast(I.getOperand(), Instruction::GetElementPtr);
3423        Out << "))";
3424      }
3425    }
3426  }
3427  Out << ")";
3428}
3429
3430void CWriter::writeMemoryAccess(Value *Operand, Type *OperandType,
3431                                bool IsVolatile, unsigned Alignment) {
3432
3433  bool IsUnaligned = Alignment &&
3434    Alignment < TD->getABITypeAlignment(OperandType);
3435
3436  if (!IsUnaligned)
3437    Out << '*';
3438  if (IsVolatile || IsUnaligned) {
3439    Out << "((";
3440    if (IsUnaligned)
3441      Out << "struct __attribute__ ((packed, aligned(" << Alignment << "))) {";
3442    printType(Out, OperandType, false, IsUnaligned ? "data" : "volatile*");
3443    if (IsUnaligned) {
3444      Out << "; } ";
3445      if (IsVolatile) Out << "volatile ";
3446      Out << "*";
3447    }
3448    Out << ")";
3449  }
3450
3451  writeOperand(Operand);
3452
3453  if (IsVolatile || IsUnaligned) {
3454    Out << ')';
3455    if (IsUnaligned)
3456      Out << "->data";
3457  }
3458}
3459
3460void CWriter::visitLoadInst(LoadInst &I) {
3461  writeMemoryAccess(I.getOperand(0), I.getType(), I.isVolatile(),
3462                    I.getAlignment());
3463
3464}
3465
3466void CWriter::visitStoreInst(StoreInst &I) {
3467  writeMemoryAccess(I.getPointerOperand(), I.getOperand(0)->getType(),
3468                    I.isVolatile(), I.getAlignment());
3469  Out << " = ";
3470  Value *Operand = I.getOperand(0);
3471  Constant *BitMask = 0;
3472  if (IntegerType* ITy = dyn_cast<IntegerType>(Operand->getType()))
3473    if (!ITy->isPowerOf2ByteWidth())
3474      // We have a bit width that doesn't match an even power-of-2 byte
3475      // size. Consequently we must & the value with the type's bit mask
3476      BitMask = ConstantInt::get(ITy, ITy->getBitMask());
3477  if (BitMask)
3478    Out << "((";
3479  writeOperand(Operand);
3480  if (BitMask) {
3481    Out << ") & ";
3482    printConstant(BitMask, false);
3483    Out << ")";
3484  }
3485}
3486
3487void CWriter::visitGetElementPtrInst(GetElementPtrInst &I) {
3488  printGEPExpression(I.getPointerOperand(), gep_type_begin(I),
3489                     gep_type_end(I), false);
3490}
3491
3492void CWriter::visitVAArgInst(VAArgInst &I) {
3493  Out << "va_arg(*(va_list*)";
3494  writeOperand(I.getOperand(0));
3495  Out << ", ";
3496  printType(Out, I.getType());
3497  Out << ");\n ";
3498}
3499
3500void CWriter::visitInsertElementInst(InsertElementInst &I) {
3501  Type *EltTy = I.getType()->getElementType();
3502  writeOperand(I.getOperand(0));
3503  Out << ";\n  ";
3504  Out << "((";
3505  printType(Out, PointerType::getUnqual(EltTy));
3506  Out << ")(&" << GetValueName(&I) << "))[";
3507  writeOperand(I.getOperand(2));
3508  Out << "] = (";
3509  writeOperand(I.getOperand(1));
3510  Out << ")";
3511}
3512
3513void CWriter::visitExtractElementInst(ExtractElementInst &I) {
3514  // We know that our operand is not inlined.
3515  Out << "((";
3516  Type *EltTy =
3517    cast<VectorType>(I.getOperand(0)->getType())->getElementType();
3518  printType(Out, PointerType::getUnqual(EltTy));
3519  Out << ")(&" << GetValueName(I.getOperand(0)) << "))[";
3520  writeOperand(I.getOperand(1));
3521  Out << "]";
3522}
3523
3524void CWriter::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
3525  Out << "(";
3526  printType(Out, SVI.getType());
3527  Out << "){ ";
3528  VectorType *VT = SVI.getType();
3529  unsigned NumElts = VT->getNumElements();
3530  Type *EltTy = VT->getElementType();
3531
3532  for (unsigned i = 0; i != NumElts; ++i) {
3533    if (i) Out << ", ";
3534    int SrcVal = SVI.getMaskValue(i);
3535    if ((unsigned)SrcVal >= NumElts*2) {
3536      Out << " 0/*undef*/ ";
3537    } else {
3538      Value *Op = SVI.getOperand((unsigned)SrcVal >= NumElts);
3539      if (isa<Instruction>(Op)) {
3540        // Do an extractelement of this value from the appropriate input.
3541        Out << "((";
3542        printType(Out, PointerType::getUnqual(EltTy));
3543        Out << ")(&" << GetValueName(Op)
3544            << "))[" << (SrcVal & (NumElts-1)) << "]";
3545      } else if (isa<ConstantAggregateZero>(Op) || isa<UndefValue>(Op)) {
3546        Out << "0";
3547      } else {
3548        printConstant(cast<ConstantVector>(Op)->getOperand(SrcVal &
3549                                                           (NumElts-1)),
3550                      false);
3551      }
3552    }
3553  }
3554  Out << "}";
3555}
3556
3557void CWriter::visitInsertValueInst(InsertValueInst &IVI) {
3558  // Start by copying the entire aggregate value into the result variable.
3559  writeOperand(IVI.getOperand(0));
3560  Out << ";\n  ";
3561
3562  // Then do the insert to update the field.
3563  Out << GetValueName(&IVI);
3564  for (const unsigned *b = IVI.idx_begin(), *i = b, *e = IVI.idx_end();
3565       i != e; ++i) {
3566    Type *IndexedTy =
3567      ExtractValueInst::getIndexedType(IVI.getOperand(0)->getType(),
3568                                       makeArrayRef(b, i+1));
3569    if (IndexedTy->isArrayTy())
3570      Out << ".array[" << *i << "]";
3571    else
3572      Out << ".field" << *i;
3573  }
3574  Out << " = ";
3575  writeOperand(IVI.getOperand(1));
3576}
3577
3578void CWriter::visitExtractValueInst(ExtractValueInst &EVI) {
3579  Out << "(";
3580  if (isa<UndefValue>(EVI.getOperand(0))) {
3581    Out << "(";
3582    printType(Out, EVI.getType());
3583    Out << ") 0/*UNDEF*/";
3584  } else {
3585    Out << GetValueName(EVI.getOperand(0));
3586    for (const unsigned *b = EVI.idx_begin(), *i = b, *e = EVI.idx_end();
3587         i != e; ++i) {
3588      Type *IndexedTy =
3589        ExtractValueInst::getIndexedType(EVI.getOperand(0)->getType(),
3590                                         makeArrayRef(b, i+1));
3591      if (IndexedTy->isArrayTy())
3592        Out << ".array[" << *i << "]";
3593      else
3594        Out << ".field" << *i;
3595    }
3596  }
3597  Out << ")";
3598}
3599
3600//===----------------------------------------------------------------------===//
3601//                       External Interface declaration
3602//===----------------------------------------------------------------------===//
3603
3604bool CTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
3605                                         formatted_raw_ostream &o,
3606                                         CodeGenFileType FileType,
3607                                         CodeGenOpt::Level OptLevel,
3608                                         bool DisableVerify) {
3609  if (FileType != TargetMachine::CGFT_AssemblyFile) return true;
3610
3611  PM.add(createGCLoweringPass());
3612  PM.add(createLowerInvokePass());
3613  PM.add(createCFGSimplificationPass());   // clean up after lower invoke.
3614  PM.add(new CWriter(o));
3615  PM.add(createGCInfoDeleter());
3616  return false;
3617}
3618