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