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