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