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