1 //===-- CBackend.cpp - Library for converting LLVM code to C --------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This library converts LLVM code to C code, compilable by GCC and other C
13 //===----------------------------------------------------------------------===//
15 #include "CTargetMachine.h"
16 #include "llvm/CallingConv.h"
17 #include "llvm/Constants.h"
18 #include "llvm/DerivedTypes.h"
19 #include "llvm/Module.h"
20 #include "llvm/Instructions.h"
21 #include "llvm/Pass.h"
22 #include "llvm/PassManager.h"
23 #include "llvm/TypeSymbolTable.h"
24 #include "llvm/Intrinsics.h"
25 #include "llvm/IntrinsicInst.h"
26 #include "llvm/InlineAsm.h"
27 #include "llvm/ADT/StringExtras.h"
28 #include "llvm/ADT/STLExtras.h"
29 #include "llvm/Analysis/ConstantsScanner.h"
30 #include "llvm/Analysis/FindUsedTypes.h"
31 #include "llvm/Analysis/LoopInfo.h"
32 #include "llvm/Analysis/ValueTracking.h"
33 #include "llvm/CodeGen/Passes.h"
34 #include "llvm/CodeGen/IntrinsicLowering.h"
35 #include "llvm/Transforms/Scalar.h"
36 #include "llvm/MC/MCAsmInfo.h"
37 #include "llvm/Target/TargetData.h"
38 #include "llvm/Target/TargetRegistry.h"
39 #include "llvm/Support/CallSite.h"
40 #include "llvm/Support/CFG.h"
41 #include "llvm/Support/ErrorHandling.h"
42 #include "llvm/Support/FormattedStream.h"
43 #include "llvm/Support/GetElementPtrTypeIterator.h"
44 #include "llvm/Support/InstVisitor.h"
45 #include "llvm/Support/Mangler.h"
46 #include "llvm/Support/MathExtras.h"
47 #include "llvm/System/Host.h"
48 #include "llvm/Config/config.h"
53 extern "C" void LLVMInitializeCBackendTarget() {
54 // Register the target.
55 RegisterTargetMachine
<CTargetMachine
> X(TheCBackendTarget
);
59 /// CBackendNameAllUsedStructsAndMergeFunctions - This pass inserts names for
60 /// any unnamed structure types that are used by the program, and merges
61 /// external functions with the same name.
63 class CBackendNameAllUsedStructsAndMergeFunctions
: public ModulePass
{
66 CBackendNameAllUsedStructsAndMergeFunctions()
68 void getAnalysisUsage(AnalysisUsage
&AU
) const {
69 AU
.addRequired
<FindUsedTypes
>();
72 virtual const char *getPassName() const {
73 return "C backend type canonicalizer";
76 virtual bool runOnModule(Module
&M
);
79 char CBackendNameAllUsedStructsAndMergeFunctions::ID
= 0;
81 /// CWriter - This class is the main chunk of code that converts an LLVM
82 /// module to a C translation unit.
83 class CWriter
: public FunctionPass
, public InstVisitor
<CWriter
> {
84 formatted_raw_ostream
&Out
;
85 IntrinsicLowering
*IL
;
88 const Module
*TheModule
;
89 const MCAsmInfo
* TAsm
;
91 std::map
<const Type
*, std::string
> TypeNames
;
92 std::map
<const ConstantFP
*, unsigned> FPConstantMap
;
93 std::set
<Function
*> intrinsicPrototypesAlreadyGenerated
;
94 std::set
<const Argument
*> ByValParams
;
96 unsigned OpaqueCounter
;
97 DenseMap
<const Value
*, unsigned> AnonValueNumbers
;
98 unsigned NextAnonValueNumber
;
102 explicit CWriter(formatted_raw_ostream
&o
)
103 : FunctionPass(&ID
), Out(o
), IL(0), Mang(0), LI(0),
104 TheModule(0), TAsm(0), TD(0), OpaqueCounter(0), NextAnonValueNumber(0) {
108 virtual const char *getPassName() const { return "C backend"; }
110 void getAnalysisUsage(AnalysisUsage
&AU
) const {
111 AU
.addRequired
<LoopInfo
>();
112 AU
.setPreservesAll();
115 virtual bool doInitialization(Module
&M
);
117 bool runOnFunction(Function
&F
) {
118 // Do not codegen any 'available_externally' functions at all, they have
119 // definitions outside the translation unit.
120 if (F
.hasAvailableExternallyLinkage())
123 LI
= &getAnalysis
<LoopInfo
>();
125 // Get rid of intrinsics we can't handle.
128 // Output all floating point constants that cannot be printed accurately.
129 printFloatingPointConstants(F
);
135 virtual bool doFinalization(Module
&M
) {
140 FPConstantMap
.clear();
143 intrinsicPrototypesAlreadyGenerated
.clear();
147 raw_ostream
&printType(formatted_raw_ostream
&Out
,
149 bool isSigned
= false,
150 const std::string
&VariableName
= "",
151 bool IgnoreName
= false,
152 const AttrListPtr
&PAL
= AttrListPtr());
153 std::ostream
&printType(std::ostream
&Out
, const Type
*Ty
,
154 bool isSigned
= false,
155 const std::string
&VariableName
= "",
156 bool IgnoreName
= false,
157 const AttrListPtr
&PAL
= AttrListPtr());
158 raw_ostream
&printSimpleType(formatted_raw_ostream
&Out
,
161 const std::string
&NameSoFar
= "");
162 std::ostream
&printSimpleType(std::ostream
&Out
, const Type
*Ty
,
164 const std::string
&NameSoFar
= "");
166 void printStructReturnPointerFunctionType(formatted_raw_ostream
&Out
,
167 const AttrListPtr
&PAL
,
168 const PointerType
*Ty
);
170 /// writeOperandDeref - Print the result of dereferencing the specified
171 /// operand with '*'. This is equivalent to printing '*' then using
172 /// writeOperand, but avoids excess syntax in some cases.
173 void writeOperandDeref(Value
*Operand
) {
174 if (isAddressExposed(Operand
)) {
175 // Already something with an address exposed.
176 writeOperandInternal(Operand
);
179 writeOperand(Operand
);
184 void writeOperand(Value
*Operand
, bool Static
= false);
185 void writeInstComputationInline(Instruction
&I
);
186 void writeOperandInternal(Value
*Operand
, bool Static
= false);
187 void writeOperandWithCast(Value
* Operand
, unsigned Opcode
);
188 void writeOperandWithCast(Value
* Operand
, const ICmpInst
&I
);
189 bool writeInstructionCast(const Instruction
&I
);
191 void writeMemoryAccess(Value
*Operand
, const Type
*OperandType
,
192 bool IsVolatile
, unsigned Alignment
);
195 std::string
InterpretASMConstraint(InlineAsm::ConstraintInfo
& c
);
197 void lowerIntrinsics(Function
&F
);
199 void printModule(Module
*M
);
200 void printModuleTypes(const TypeSymbolTable
&ST
);
201 void printContainedStructs(const Type
*Ty
, std::set
<const Type
*> &);
202 void printFloatingPointConstants(Function
&F
);
203 void printFloatingPointConstants(const Constant
*C
);
204 void printFunctionSignature(const Function
*F
, bool Prototype
);
206 void printFunction(Function
&);
207 void printBasicBlock(BasicBlock
*BB
);
208 void printLoop(Loop
*L
);
210 void printCast(unsigned opcode
, const Type
*SrcTy
, const Type
*DstTy
);
211 void printConstant(Constant
*CPV
, bool Static
);
212 void printConstantWithCast(Constant
*CPV
, unsigned Opcode
);
213 bool printConstExprCast(const ConstantExpr
*CE
, bool Static
);
214 void printConstantArray(ConstantArray
*CPA
, bool Static
);
215 void printConstantVector(ConstantVector
*CV
, bool Static
);
217 /// isAddressExposed - Return true if the specified value's name needs to
218 /// have its address taken in order to get a C value of the correct type.
219 /// This happens for global variables, byval parameters, and direct allocas.
220 bool isAddressExposed(const Value
*V
) const {
221 if (const Argument
*A
= dyn_cast
<Argument
>(V
))
222 return ByValParams
.count(A
);
223 return isa
<GlobalVariable
>(V
) || isDirectAlloca(V
);
226 // isInlinableInst - Attempt to inline instructions into their uses to build
227 // trees as much as possible. To do this, we have to consistently decide
228 // what is acceptable to inline, so that variable declarations don't get
229 // printed and an extra copy of the expr is not emitted.
231 static bool isInlinableInst(const Instruction
&I
) {
232 // Always inline cmp instructions, even if they are shared by multiple
233 // expressions. GCC generates horrible code if we don't.
237 // Must be an expression, must be used exactly once. If it is dead, we
238 // emit it inline where it would go.
239 if (I
.getType() == Type::getVoidTy(I
.getContext()) || !I
.hasOneUse() ||
240 isa
<TerminatorInst
>(I
) || isa
<CallInst
>(I
) || isa
<PHINode
>(I
) ||
241 isa
<LoadInst
>(I
) || isa
<VAArgInst
>(I
) || isa
<InsertElementInst
>(I
) ||
242 isa
<InsertValueInst
>(I
))
243 // Don't inline a load across a store or other bad things!
246 // Must not be used in inline asm, extractelement, or shufflevector.
248 const Instruction
&User
= cast
<Instruction
>(*I
.use_back());
249 if (isInlineAsm(User
) || isa
<ExtractElementInst
>(User
) ||
250 isa
<ShuffleVectorInst
>(User
))
254 // Only inline instruction it if it's use is in the same BB as the inst.
255 return I
.getParent() == cast
<Instruction
>(I
.use_back())->getParent();
258 // isDirectAlloca - Define fixed sized allocas in the entry block as direct
259 // variables which are accessed with the & operator. This causes GCC to
260 // generate significantly better code than to emit alloca calls directly.
262 static const AllocaInst
*isDirectAlloca(const Value
*V
) {
263 const AllocaInst
*AI
= dyn_cast
<AllocaInst
>(V
);
264 if (!AI
) return false;
265 if (AI
->isArrayAllocation())
266 return 0; // FIXME: we can also inline fixed size array allocas!
267 if (AI
->getParent() != &AI
->getParent()->getParent()->getEntryBlock())
272 // isInlineAsm - Check if the instruction is a call to an inline asm chunk
273 static bool isInlineAsm(const Instruction
& I
) {
274 if (isa
<CallInst
>(&I
) && isa
<InlineAsm
>(I
.getOperand(0)))
279 // Instruction visitation functions
280 friend class InstVisitor
<CWriter
>;
282 void visitReturnInst(ReturnInst
&I
);
283 void visitBranchInst(BranchInst
&I
);
284 void visitSwitchInst(SwitchInst
&I
);
285 void visitInvokeInst(InvokeInst
&I
) {
286 llvm_unreachable("Lowerinvoke pass didn't work!");
289 void visitUnwindInst(UnwindInst
&I
) {
290 llvm_unreachable("Lowerinvoke pass didn't work!");
292 void visitUnreachableInst(UnreachableInst
&I
);
294 void visitPHINode(PHINode
&I
);
295 void visitBinaryOperator(Instruction
&I
);
296 void visitICmpInst(ICmpInst
&I
);
297 void visitFCmpInst(FCmpInst
&I
);
299 void visitCastInst (CastInst
&I
);
300 void visitSelectInst(SelectInst
&I
);
301 void visitCallInst (CallInst
&I
);
302 void visitInlineAsm(CallInst
&I
);
303 bool visitBuiltinCall(CallInst
&I
, Intrinsic::ID ID
, bool &WroteCallee
);
305 void visitMallocInst(MallocInst
&I
);
306 void visitAllocaInst(AllocaInst
&I
);
307 void visitFreeInst (FreeInst
&I
);
308 void visitLoadInst (LoadInst
&I
);
309 void visitStoreInst (StoreInst
&I
);
310 void visitGetElementPtrInst(GetElementPtrInst
&I
);
311 void visitVAArgInst (VAArgInst
&I
);
313 void visitInsertElementInst(InsertElementInst
&I
);
314 void visitExtractElementInst(ExtractElementInst
&I
);
315 void visitShuffleVectorInst(ShuffleVectorInst
&SVI
);
317 void visitInsertValueInst(InsertValueInst
&I
);
318 void visitExtractValueInst(ExtractValueInst
&I
);
320 void visitInstruction(Instruction
&I
) {
322 errs() << "C Writer does not know about " << I
;
327 void outputLValue(Instruction
*I
) {
328 Out
<< " " << GetValueName(I
) << " = ";
331 bool isGotoCodeNecessary(BasicBlock
*From
, BasicBlock
*To
);
332 void printPHICopiesForSuccessor(BasicBlock
*CurBlock
,
333 BasicBlock
*Successor
, unsigned Indent
);
334 void printBranchToBlock(BasicBlock
*CurBlock
, BasicBlock
*SuccBlock
,
336 void printGEPExpression(Value
*Ptr
, gep_type_iterator I
,
337 gep_type_iterator E
, bool Static
);
339 std::string
GetValueName(const Value
*Operand
);
343 char CWriter::ID
= 0;
345 /// This method inserts names for any unnamed structure types that are used by
346 /// the program, and removes names from structure types that are not used by the
349 bool CBackendNameAllUsedStructsAndMergeFunctions::runOnModule(Module
&M
) {
350 // Get a set of types that are used by the program...
351 std::set
<const Type
*> UT
= getAnalysis
<FindUsedTypes
>().getTypes();
353 // Loop over the module symbol table, removing types from UT that are
354 // already named, and removing names for types that are not used.
356 TypeSymbolTable
&TST
= M
.getTypeSymbolTable();
357 for (TypeSymbolTable::iterator TI
= TST
.begin(), TE
= TST
.end();
359 TypeSymbolTable::iterator I
= TI
++;
361 // If this isn't a struct or array type, remove it from our set of types
362 // to name. This simplifies emission later.
363 if (!isa
<StructType
>(I
->second
) && !isa
<OpaqueType
>(I
->second
) &&
364 !isa
<ArrayType
>(I
->second
)) {
367 // If this is not used, remove it from the symbol table.
368 std::set
<const Type
*>::iterator UTI
= UT
.find(I
->second
);
372 UT
.erase(UTI
); // Only keep one name for this type.
376 // UT now contains types that are not named. Loop over it, naming
379 bool Changed
= false;
380 unsigned RenameCounter
= 0;
381 for (std::set
<const Type
*>::const_iterator I
= UT
.begin(), E
= UT
.end();
383 if (isa
<StructType
>(*I
) || isa
<ArrayType
>(*I
)) {
384 while (M
.addTypeName("unnamed"+utostr(RenameCounter
), *I
))
390 // Loop over all external functions and globals. If we have two with
391 // identical names, merge them.
392 // FIXME: This code should disappear when we don't allow values with the same
393 // names when they have different types!
394 std::map
<std::string
, GlobalValue
*> ExtSymbols
;
395 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
;) {
397 if (GV
->isDeclaration() && GV
->hasName()) {
398 std::pair
<std::map
<std::string
, GlobalValue
*>::iterator
, bool> X
399 = ExtSymbols
.insert(std::make_pair(GV
->getName(), GV
));
401 // Found a conflict, replace this global with the previous one.
402 GlobalValue
*OldGV
= X
.first
->second
;
403 GV
->replaceAllUsesWith(ConstantExpr::getBitCast(OldGV
, GV
->getType()));
404 GV
->eraseFromParent();
409 // Do the same for globals.
410 for (Module::global_iterator I
= M
.global_begin(), E
= M
.global_end();
412 GlobalVariable
*GV
= I
++;
413 if (GV
->isDeclaration() && GV
->hasName()) {
414 std::pair
<std::map
<std::string
, GlobalValue
*>::iterator
, bool> X
415 = ExtSymbols
.insert(std::make_pair(GV
->getName(), GV
));
417 // Found a conflict, replace this global with the previous one.
418 GlobalValue
*OldGV
= X
.first
->second
;
419 GV
->replaceAllUsesWith(ConstantExpr::getBitCast(OldGV
, GV
->getType()));
420 GV
->eraseFromParent();
429 /// printStructReturnPointerFunctionType - This is like printType for a struct
430 /// return type, except, instead of printing the type as void (*)(Struct*, ...)
431 /// print it as "Struct (*)(...)", for struct return functions.
432 void CWriter::printStructReturnPointerFunctionType(formatted_raw_ostream
&Out
,
433 const AttrListPtr
&PAL
,
434 const PointerType
*TheTy
) {
435 const FunctionType
*FTy
= cast
<FunctionType
>(TheTy
->getElementType());
436 std::stringstream FunctionInnards
;
437 FunctionInnards
<< " (*) (";
438 bool PrintedType
= false;
440 FunctionType::param_iterator I
= FTy
->param_begin(), E
= FTy
->param_end();
441 const Type
*RetTy
= cast
<PointerType
>(I
->get())->getElementType();
443 for (++I
, ++Idx
; I
!= E
; ++I
, ++Idx
) {
445 FunctionInnards
<< ", ";
446 const Type
*ArgTy
= *I
;
447 if (PAL
.paramHasAttr(Idx
, Attribute::ByVal
)) {
448 assert(isa
<PointerType
>(ArgTy
));
449 ArgTy
= cast
<PointerType
>(ArgTy
)->getElementType();
451 printType(FunctionInnards
, ArgTy
,
452 /*isSigned=*/PAL
.paramHasAttr(Idx
, Attribute::SExt
), "");
455 if (FTy
->isVarArg()) {
457 FunctionInnards
<< ", ...";
458 } else if (!PrintedType
) {
459 FunctionInnards
<< "void";
461 FunctionInnards
<< ')';
462 std::string tstr
= FunctionInnards
.str();
463 printType(Out
, RetTy
,
464 /*isSigned=*/PAL
.paramHasAttr(0, Attribute::SExt
), tstr
);
468 CWriter::printSimpleType(formatted_raw_ostream
&Out
, const Type
*Ty
,
470 const std::string
&NameSoFar
) {
471 assert((Ty
->isPrimitiveType() || Ty
->isInteger() || isa
<VectorType
>(Ty
)) &&
472 "Invalid type for printSimpleType");
473 switch (Ty
->getTypeID()) {
474 case Type::VoidTyID
: return Out
<< "void " << NameSoFar
;
475 case Type::IntegerTyID
: {
476 unsigned NumBits
= cast
<IntegerType
>(Ty
)->getBitWidth();
478 return Out
<< "bool " << NameSoFar
;
479 else if (NumBits
<= 8)
480 return Out
<< (isSigned
?"signed":"unsigned") << " char " << NameSoFar
;
481 else if (NumBits
<= 16)
482 return Out
<< (isSigned
?"signed":"unsigned") << " short " << NameSoFar
;
483 else if (NumBits
<= 32)
484 return Out
<< (isSigned
?"signed":"unsigned") << " int " << NameSoFar
;
485 else if (NumBits
<= 64)
486 return Out
<< (isSigned
?"signed":"unsigned") << " long long "<< NameSoFar
;
488 assert(NumBits
<= 128 && "Bit widths > 128 not implemented yet");
489 return Out
<< (isSigned
?"llvmInt128":"llvmUInt128") << " " << NameSoFar
;
492 case Type::FloatTyID
: return Out
<< "float " << NameSoFar
;
493 case Type::DoubleTyID
: return Out
<< "double " << NameSoFar
;
494 // Lacking emulation of FP80 on PPC, etc., we assume whichever of these is
495 // present matches host 'long double'.
496 case Type::X86_FP80TyID
:
497 case Type::PPC_FP128TyID
:
498 case Type::FP128TyID
: return Out
<< "long double " << NameSoFar
;
500 case Type::VectorTyID
: {
501 const VectorType
*VTy
= cast
<VectorType
>(Ty
);
502 return printSimpleType(Out
, VTy
->getElementType(), isSigned
,
503 " __attribute__((vector_size(" +
504 utostr(TD
->getTypeAllocSize(VTy
)) + " ))) " + NameSoFar
);
509 errs() << "Unknown primitive type: " << *Ty
<< "\n";
516 CWriter::printSimpleType(std::ostream
&Out
, const Type
*Ty
, bool isSigned
,
517 const std::string
&NameSoFar
) {
518 assert((Ty
->isPrimitiveType() || Ty
->isInteger() || isa
<VectorType
>(Ty
)) &&
519 "Invalid type for printSimpleType");
520 switch (Ty
->getTypeID()) {
521 case Type::VoidTyID
: return Out
<< "void " << NameSoFar
;
522 case Type::IntegerTyID
: {
523 unsigned NumBits
= cast
<IntegerType
>(Ty
)->getBitWidth();
525 return Out
<< "bool " << NameSoFar
;
526 else if (NumBits
<= 8)
527 return Out
<< (isSigned
?"signed":"unsigned") << " char " << NameSoFar
;
528 else if (NumBits
<= 16)
529 return Out
<< (isSigned
?"signed":"unsigned") << " short " << NameSoFar
;
530 else if (NumBits
<= 32)
531 return Out
<< (isSigned
?"signed":"unsigned") << " int " << NameSoFar
;
532 else if (NumBits
<= 64)
533 return Out
<< (isSigned
?"signed":"unsigned") << " long long "<< NameSoFar
;
535 assert(NumBits
<= 128 && "Bit widths > 128 not implemented yet");
536 return Out
<< (isSigned
?"llvmInt128":"llvmUInt128") << " " << NameSoFar
;
539 case Type::FloatTyID
: return Out
<< "float " << NameSoFar
;
540 case Type::DoubleTyID
: return Out
<< "double " << NameSoFar
;
541 // Lacking emulation of FP80 on PPC, etc., we assume whichever of these is
542 // present matches host 'long double'.
543 case Type::X86_FP80TyID
:
544 case Type::PPC_FP128TyID
:
545 case Type::FP128TyID
: return Out
<< "long double " << NameSoFar
;
547 case Type::VectorTyID
: {
548 const VectorType
*VTy
= cast
<VectorType
>(Ty
);
549 return printSimpleType(Out
, VTy
->getElementType(), isSigned
,
550 " __attribute__((vector_size(" +
551 utostr(TD
->getTypeAllocSize(VTy
)) + " ))) " + NameSoFar
);
556 errs() << "Unknown primitive type: " << *Ty
<< "\n";
562 // Pass the Type* and the variable name and this prints out the variable
565 raw_ostream
&CWriter::printType(formatted_raw_ostream
&Out
,
567 bool isSigned
, const std::string
&NameSoFar
,
568 bool IgnoreName
, const AttrListPtr
&PAL
) {
569 if (Ty
->isPrimitiveType() || Ty
->isInteger() || isa
<VectorType
>(Ty
)) {
570 printSimpleType(Out
, Ty
, isSigned
, NameSoFar
);
574 // Check to see if the type is named.
575 if (!IgnoreName
|| isa
<OpaqueType
>(Ty
)) {
576 std::map
<const Type
*, std::string
>::iterator I
= TypeNames
.find(Ty
);
577 if (I
!= TypeNames
.end()) return Out
<< I
->second
<< ' ' << NameSoFar
;
580 switch (Ty
->getTypeID()) {
581 case Type::FunctionTyID
: {
582 const FunctionType
*FTy
= cast
<FunctionType
>(Ty
);
583 std::stringstream FunctionInnards
;
584 FunctionInnards
<< " (" << NameSoFar
<< ") (";
586 for (FunctionType::param_iterator I
= FTy
->param_begin(),
587 E
= FTy
->param_end(); I
!= E
; ++I
) {
588 const Type
*ArgTy
= *I
;
589 if (PAL
.paramHasAttr(Idx
, Attribute::ByVal
)) {
590 assert(isa
<PointerType
>(ArgTy
));
591 ArgTy
= cast
<PointerType
>(ArgTy
)->getElementType();
593 if (I
!= FTy
->param_begin())
594 FunctionInnards
<< ", ";
595 printType(FunctionInnards
, ArgTy
,
596 /*isSigned=*/PAL
.paramHasAttr(Idx
, Attribute::SExt
), "");
599 if (FTy
->isVarArg()) {
600 if (FTy
->getNumParams())
601 FunctionInnards
<< ", ...";
602 } else if (!FTy
->getNumParams()) {
603 FunctionInnards
<< "void";
605 FunctionInnards
<< ')';
606 std::string tstr
= FunctionInnards
.str();
607 printType(Out
, FTy
->getReturnType(),
608 /*isSigned=*/PAL
.paramHasAttr(0, Attribute::SExt
), tstr
);
611 case Type::StructTyID
: {
612 const StructType
*STy
= cast
<StructType
>(Ty
);
613 Out
<< NameSoFar
+ " {\n";
615 for (StructType::element_iterator I
= STy
->element_begin(),
616 E
= STy
->element_end(); I
!= E
; ++I
) {
618 printType(Out
, *I
, false, "field" + utostr(Idx
++));
623 Out
<< " __attribute__ ((packed))";
627 case Type::PointerTyID
: {
628 const PointerType
*PTy
= cast
<PointerType
>(Ty
);
629 std::string ptrName
= "*" + NameSoFar
;
631 if (isa
<ArrayType
>(PTy
->getElementType()) ||
632 isa
<VectorType
>(PTy
->getElementType()))
633 ptrName
= "(" + ptrName
+ ")";
636 // Must be a function ptr cast!
637 return printType(Out
, PTy
->getElementType(), false, ptrName
, true, PAL
);
638 return printType(Out
, PTy
->getElementType(), false, ptrName
);
641 case Type::ArrayTyID
: {
642 const ArrayType
*ATy
= cast
<ArrayType
>(Ty
);
643 unsigned NumElements
= ATy
->getNumElements();
644 if (NumElements
== 0) NumElements
= 1;
645 // Arrays are wrapped in structs to allow them to have normal
646 // value semantics (avoiding the array "decay").
647 Out
<< NameSoFar
<< " { ";
648 printType(Out
, ATy
->getElementType(), false,
649 "array[" + utostr(NumElements
) + "]");
653 case Type::OpaqueTyID
: {
654 std::string TyName
= "struct opaque_" + itostr(OpaqueCounter
++);
655 assert(TypeNames
.find(Ty
) == TypeNames
.end());
656 TypeNames
[Ty
] = TyName
;
657 return Out
<< TyName
<< ' ' << NameSoFar
;
660 llvm_unreachable("Unhandled case in getTypeProps!");
666 // Pass the Type* and the variable name and this prints out the variable
669 std::ostream
&CWriter::printType(std::ostream
&Out
, const Type
*Ty
,
670 bool isSigned
, const std::string
&NameSoFar
,
671 bool IgnoreName
, const AttrListPtr
&PAL
) {
672 if (Ty
->isPrimitiveType() || Ty
->isInteger() || isa
<VectorType
>(Ty
)) {
673 printSimpleType(Out
, Ty
, isSigned
, NameSoFar
);
677 // Check to see if the type is named.
678 if (!IgnoreName
|| isa
<OpaqueType
>(Ty
)) {
679 std::map
<const Type
*, std::string
>::iterator I
= TypeNames
.find(Ty
);
680 if (I
!= TypeNames
.end()) return Out
<< I
->second
<< ' ' << NameSoFar
;
683 switch (Ty
->getTypeID()) {
684 case Type::FunctionTyID
: {
685 const FunctionType
*FTy
= cast
<FunctionType
>(Ty
);
686 std::stringstream FunctionInnards
;
687 FunctionInnards
<< " (" << NameSoFar
<< ") (";
689 for (FunctionType::param_iterator I
= FTy
->param_begin(),
690 E
= FTy
->param_end(); I
!= E
; ++I
) {
691 const Type
*ArgTy
= *I
;
692 if (PAL
.paramHasAttr(Idx
, Attribute::ByVal
)) {
693 assert(isa
<PointerType
>(ArgTy
));
694 ArgTy
= cast
<PointerType
>(ArgTy
)->getElementType();
696 if (I
!= FTy
->param_begin())
697 FunctionInnards
<< ", ";
698 printType(FunctionInnards
, ArgTy
,
699 /*isSigned=*/PAL
.paramHasAttr(Idx
, Attribute::SExt
), "");
702 if (FTy
->isVarArg()) {
703 if (FTy
->getNumParams())
704 FunctionInnards
<< ", ...";
705 } else if (!FTy
->getNumParams()) {
706 FunctionInnards
<< "void";
708 FunctionInnards
<< ')';
709 std::string tstr
= FunctionInnards
.str();
710 printType(Out
, FTy
->getReturnType(),
711 /*isSigned=*/PAL
.paramHasAttr(0, Attribute::SExt
), tstr
);
714 case Type::StructTyID
: {
715 const StructType
*STy
= cast
<StructType
>(Ty
);
716 Out
<< NameSoFar
+ " {\n";
718 for (StructType::element_iterator I
= STy
->element_begin(),
719 E
= STy
->element_end(); I
!= E
; ++I
) {
721 printType(Out
, *I
, false, "field" + utostr(Idx
++));
726 Out
<< " __attribute__ ((packed))";
730 case Type::PointerTyID
: {
731 const PointerType
*PTy
= cast
<PointerType
>(Ty
);
732 std::string ptrName
= "*" + NameSoFar
;
734 if (isa
<ArrayType
>(PTy
->getElementType()) ||
735 isa
<VectorType
>(PTy
->getElementType()))
736 ptrName
= "(" + ptrName
+ ")";
739 // Must be a function ptr cast!
740 return printType(Out
, PTy
->getElementType(), false, ptrName
, true, PAL
);
741 return printType(Out
, PTy
->getElementType(), false, ptrName
);
744 case Type::ArrayTyID
: {
745 const ArrayType
*ATy
= cast
<ArrayType
>(Ty
);
746 unsigned NumElements
= ATy
->getNumElements();
747 if (NumElements
== 0) NumElements
= 1;
748 // Arrays are wrapped in structs to allow them to have normal
749 // value semantics (avoiding the array "decay").
750 Out
<< NameSoFar
<< " { ";
751 printType(Out
, ATy
->getElementType(), false,
752 "array[" + utostr(NumElements
) + "]");
756 case Type::OpaqueTyID
: {
757 std::string TyName
= "struct opaque_" + itostr(OpaqueCounter
++);
758 assert(TypeNames
.find(Ty
) == TypeNames
.end());
759 TypeNames
[Ty
] = TyName
;
760 return Out
<< TyName
<< ' ' << NameSoFar
;
763 llvm_unreachable("Unhandled case in getTypeProps!");
769 void CWriter::printConstantArray(ConstantArray
*CPA
, bool Static
) {
771 // As a special case, print the array as a string if it is an array of
772 // ubytes or an array of sbytes with positive values.
774 const Type
*ETy
= CPA
->getType()->getElementType();
775 bool isString
= (ETy
== Type::getInt8Ty(CPA
->getContext()) ||
776 ETy
== Type::getInt8Ty(CPA
->getContext()));
778 // Make sure the last character is a null char, as automatically added by C
779 if (isString
&& (CPA
->getNumOperands() == 0 ||
780 !cast
<Constant
>(*(CPA
->op_end()-1))->isNullValue()))
785 // Keep track of whether the last number was a hexadecimal escape
786 bool LastWasHex
= false;
788 // Do not include the last character, which we know is null
789 for (unsigned i
= 0, e
= CPA
->getNumOperands()-1; i
!= e
; ++i
) {
790 unsigned char C
= cast
<ConstantInt
>(CPA
->getOperand(i
))->getZExtValue();
792 // Print it out literally if it is a printable character. The only thing
793 // to be careful about is when the last letter output was a hex escape
794 // code, in which case we have to be careful not to print out hex digits
795 // explicitly (the C compiler thinks it is a continuation of the previous
796 // character, sheesh...)
798 if (isprint(C
) && (!LastWasHex
|| !isxdigit(C
))) {
800 if (C
== '"' || C
== '\\')
801 Out
<< "\\" << (char)C
;
807 case '\n': Out
<< "\\n"; break;
808 case '\t': Out
<< "\\t"; break;
809 case '\r': Out
<< "\\r"; break;
810 case '\v': Out
<< "\\v"; break;
811 case '\a': Out
<< "\\a"; break;
812 case '\"': Out
<< "\\\""; break;
813 case '\'': Out
<< "\\\'"; break;
816 Out
<< (char)(( C
/16 < 10) ? ( C
/16 +'0') : ( C
/16 -10+'A'));
817 Out
<< (char)(((C
&15) < 10) ? ((C
&15)+'0') : ((C
&15)-10+'A'));
826 if (CPA
->getNumOperands()) {
828 printConstant(cast
<Constant
>(CPA
->getOperand(0)), Static
);
829 for (unsigned i
= 1, e
= CPA
->getNumOperands(); i
!= e
; ++i
) {
831 printConstant(cast
<Constant
>(CPA
->getOperand(i
)), Static
);
838 void CWriter::printConstantVector(ConstantVector
*CP
, bool Static
) {
840 if (CP
->getNumOperands()) {
842 printConstant(cast
<Constant
>(CP
->getOperand(0)), Static
);
843 for (unsigned i
= 1, e
= CP
->getNumOperands(); i
!= e
; ++i
) {
845 printConstant(cast
<Constant
>(CP
->getOperand(i
)), Static
);
851 // isFPCSafeToPrint - Returns true if we may assume that CFP may be written out
852 // textually as a double (rather than as a reference to a stack-allocated
853 // variable). We decide this by converting CFP to a string and back into a
854 // double, and then checking whether the conversion results in a bit-equal
855 // double to the original value of CFP. This depends on us and the target C
856 // compiler agreeing on the conversion process (which is pretty likely since we
857 // only deal in IEEE FP).
859 static bool isFPCSafeToPrint(const ConstantFP
*CFP
) {
861 // Do long doubles in hex for now.
862 if (CFP
->getType() != Type::getFloatTy(CFP
->getContext()) &&
863 CFP
->getType() != Type::getDoubleTy(CFP
->getContext()))
865 APFloat APF
= APFloat(CFP
->getValueAPF()); // copy
866 if (CFP
->getType() == Type::getFloatTy(CFP
->getContext()))
867 APF
.convert(APFloat::IEEEdouble
, APFloat::rmNearestTiesToEven
, &ignored
);
868 #if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A
870 sprintf(Buffer
, "%a", APF
.convertToDouble());
871 if (!strncmp(Buffer
, "0x", 2) ||
872 !strncmp(Buffer
, "-0x", 3) ||
873 !strncmp(Buffer
, "+0x", 3))
874 return APF
.bitwiseIsEqual(APFloat(atof(Buffer
)));
877 std::string StrVal
= ftostr(APF
);
879 while (StrVal
[0] == ' ')
880 StrVal
.erase(StrVal
.begin());
882 // Check to make sure that the stringized number is not some string like "Inf"
883 // or NaN. Check that the string matches the "[-+]?[0-9]" regex.
884 if ((StrVal
[0] >= '0' && StrVal
[0] <= '9') ||
885 ((StrVal
[0] == '-' || StrVal
[0] == '+') &&
886 (StrVal
[1] >= '0' && StrVal
[1] <= '9')))
887 // Reparse stringized version!
888 return APF
.bitwiseIsEqual(APFloat(atof(StrVal
.c_str())));
893 /// Print out the casting for a cast operation. This does the double casting
894 /// necessary for conversion to the destination type, if necessary.
895 /// @brief Print a cast
896 void CWriter::printCast(unsigned opc
, const Type
*SrcTy
, const Type
*DstTy
) {
897 // Print the destination type cast
899 case Instruction::UIToFP
:
900 case Instruction::SIToFP
:
901 case Instruction::IntToPtr
:
902 case Instruction::Trunc
:
903 case Instruction::BitCast
:
904 case Instruction::FPExt
:
905 case Instruction::FPTrunc
: // For these the DstTy sign doesn't matter
907 printType(Out
, DstTy
);
910 case Instruction::ZExt
:
911 case Instruction::PtrToInt
:
912 case Instruction::FPToUI
: // For these, make sure we get an unsigned dest
914 printSimpleType(Out
, DstTy
, false);
917 case Instruction::SExt
:
918 case Instruction::FPToSI
: // For these, make sure we get a signed dest
920 printSimpleType(Out
, DstTy
, true);
924 llvm_unreachable("Invalid cast opcode");
927 // Print the source type cast
929 case Instruction::UIToFP
:
930 case Instruction::ZExt
:
932 printSimpleType(Out
, SrcTy
, false);
935 case Instruction::SIToFP
:
936 case Instruction::SExt
:
938 printSimpleType(Out
, SrcTy
, true);
941 case Instruction::IntToPtr
:
942 case Instruction::PtrToInt
:
943 // Avoid "cast to pointer from integer of different size" warnings
944 Out
<< "(unsigned long)";
946 case Instruction::Trunc
:
947 case Instruction::BitCast
:
948 case Instruction::FPExt
:
949 case Instruction::FPTrunc
:
950 case Instruction::FPToSI
:
951 case Instruction::FPToUI
:
952 break; // These don't need a source cast.
954 llvm_unreachable("Invalid cast opcode");
959 // printConstant - The LLVM Constant to C Constant converter.
960 void CWriter::printConstant(Constant
*CPV
, bool Static
) {
961 if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(CPV
)) {
962 switch (CE
->getOpcode()) {
963 case Instruction::Trunc
:
964 case Instruction::ZExt
:
965 case Instruction::SExt
:
966 case Instruction::FPTrunc
:
967 case Instruction::FPExt
:
968 case Instruction::UIToFP
:
969 case Instruction::SIToFP
:
970 case Instruction::FPToUI
:
971 case Instruction::FPToSI
:
972 case Instruction::PtrToInt
:
973 case Instruction::IntToPtr
:
974 case Instruction::BitCast
:
976 printCast(CE
->getOpcode(), CE
->getOperand(0)->getType(), CE
->getType());
977 if (CE
->getOpcode() == Instruction::SExt
&&
978 CE
->getOperand(0)->getType() == Type::getInt1Ty(CPV
->getContext())) {
979 // Make sure we really sext from bool here by subtracting from 0
982 printConstant(CE
->getOperand(0), Static
);
983 if (CE
->getType() == Type::getInt1Ty(CPV
->getContext()) &&
984 (CE
->getOpcode() == Instruction::Trunc
||
985 CE
->getOpcode() == Instruction::FPToUI
||
986 CE
->getOpcode() == Instruction::FPToSI
||
987 CE
->getOpcode() == Instruction::PtrToInt
)) {
988 // Make sure we really truncate to bool here by anding with 1
994 case Instruction::GetElementPtr
:
996 printGEPExpression(CE
->getOperand(0), gep_type_begin(CPV
),
997 gep_type_end(CPV
), Static
);
1000 case Instruction::Select
:
1002 printConstant(CE
->getOperand(0), Static
);
1004 printConstant(CE
->getOperand(1), Static
);
1006 printConstant(CE
->getOperand(2), Static
);
1009 case Instruction::Add
:
1010 case Instruction::FAdd
:
1011 case Instruction::Sub
:
1012 case Instruction::FSub
:
1013 case Instruction::Mul
:
1014 case Instruction::FMul
:
1015 case Instruction::SDiv
:
1016 case Instruction::UDiv
:
1017 case Instruction::FDiv
:
1018 case Instruction::URem
:
1019 case Instruction::SRem
:
1020 case Instruction::FRem
:
1021 case Instruction::And
:
1022 case Instruction::Or
:
1023 case Instruction::Xor
:
1024 case Instruction::ICmp
:
1025 case Instruction::Shl
:
1026 case Instruction::LShr
:
1027 case Instruction::AShr
:
1030 bool NeedsClosingParens
= printConstExprCast(CE
, Static
);
1031 printConstantWithCast(CE
->getOperand(0), CE
->getOpcode());
1032 switch (CE
->getOpcode()) {
1033 case Instruction::Add
:
1034 case Instruction::FAdd
: Out
<< " + "; break;
1035 case Instruction::Sub
:
1036 case Instruction::FSub
: Out
<< " - "; break;
1037 case Instruction::Mul
:
1038 case Instruction::FMul
: Out
<< " * "; break;
1039 case Instruction::URem
:
1040 case Instruction::SRem
:
1041 case Instruction::FRem
: Out
<< " % "; break;
1042 case Instruction::UDiv
:
1043 case Instruction::SDiv
:
1044 case Instruction::FDiv
: Out
<< " / "; break;
1045 case Instruction::And
: Out
<< " & "; break;
1046 case Instruction::Or
: Out
<< " | "; break;
1047 case Instruction::Xor
: Out
<< " ^ "; break;
1048 case Instruction::Shl
: Out
<< " << "; break;
1049 case Instruction::LShr
:
1050 case Instruction::AShr
: Out
<< " >> "; break;
1051 case Instruction::ICmp
:
1052 switch (CE
->getPredicate()) {
1053 case ICmpInst::ICMP_EQ
: Out
<< " == "; break;
1054 case ICmpInst::ICMP_NE
: Out
<< " != "; break;
1055 case ICmpInst::ICMP_SLT
:
1056 case ICmpInst::ICMP_ULT
: Out
<< " < "; break;
1057 case ICmpInst::ICMP_SLE
:
1058 case ICmpInst::ICMP_ULE
: Out
<< " <= "; break;
1059 case ICmpInst::ICMP_SGT
:
1060 case ICmpInst::ICMP_UGT
: Out
<< " > "; break;
1061 case ICmpInst::ICMP_SGE
:
1062 case ICmpInst::ICMP_UGE
: Out
<< " >= "; break;
1063 default: llvm_unreachable("Illegal ICmp predicate");
1066 default: llvm_unreachable("Illegal opcode here!");
1068 printConstantWithCast(CE
->getOperand(1), CE
->getOpcode());
1069 if (NeedsClosingParens
)
1074 case Instruction::FCmp
: {
1076 bool NeedsClosingParens
= printConstExprCast(CE
, Static
);
1077 if (CE
->getPredicate() == FCmpInst::FCMP_FALSE
)
1079 else if (CE
->getPredicate() == FCmpInst::FCMP_TRUE
)
1083 switch (CE
->getPredicate()) {
1084 default: llvm_unreachable("Illegal FCmp predicate");
1085 case FCmpInst::FCMP_ORD
: op
= "ord"; break;
1086 case FCmpInst::FCMP_UNO
: op
= "uno"; break;
1087 case FCmpInst::FCMP_UEQ
: op
= "ueq"; break;
1088 case FCmpInst::FCMP_UNE
: op
= "une"; break;
1089 case FCmpInst::FCMP_ULT
: op
= "ult"; break;
1090 case FCmpInst::FCMP_ULE
: op
= "ule"; break;
1091 case FCmpInst::FCMP_UGT
: op
= "ugt"; break;
1092 case FCmpInst::FCMP_UGE
: op
= "uge"; break;
1093 case FCmpInst::FCMP_OEQ
: op
= "oeq"; break;
1094 case FCmpInst::FCMP_ONE
: op
= "one"; break;
1095 case FCmpInst::FCMP_OLT
: op
= "olt"; break;
1096 case FCmpInst::FCMP_OLE
: op
= "ole"; break;
1097 case FCmpInst::FCMP_OGT
: op
= "ogt"; break;
1098 case FCmpInst::FCMP_OGE
: op
= "oge"; break;
1100 Out
<< "llvm_fcmp_" << op
<< "(";
1101 printConstantWithCast(CE
->getOperand(0), CE
->getOpcode());
1103 printConstantWithCast(CE
->getOperand(1), CE
->getOpcode());
1106 if (NeedsClosingParens
)
1113 errs() << "CWriter Error: Unhandled constant expression: "
1116 llvm_unreachable(0);
1118 } else if (isa
<UndefValue
>(CPV
) && CPV
->getType()->isSingleValueType()) {
1120 printType(Out
, CPV
->getType()); // sign doesn't matter
1121 Out
<< ")/*UNDEF*/";
1122 if (!isa
<VectorType
>(CPV
->getType())) {
1130 if (ConstantInt
*CI
= dyn_cast
<ConstantInt
>(CPV
)) {
1131 const Type
* Ty
= CI
->getType();
1132 if (Ty
== Type::getInt1Ty(CPV
->getContext()))
1133 Out
<< (CI
->getZExtValue() ? '1' : '0');
1134 else if (Ty
== Type::getInt32Ty(CPV
->getContext()))
1135 Out
<< CI
->getZExtValue() << 'u';
1136 else if (Ty
->getPrimitiveSizeInBits() > 32)
1137 Out
<< CI
->getZExtValue() << "ull";
1140 printSimpleType(Out
, Ty
, false) << ')';
1141 if (CI
->isMinValue(true))
1142 Out
<< CI
->getZExtValue() << 'u';
1144 Out
<< CI
->getSExtValue();
1150 switch (CPV
->getType()->getTypeID()) {
1151 case Type::FloatTyID
:
1152 case Type::DoubleTyID
:
1153 case Type::X86_FP80TyID
:
1154 case Type::PPC_FP128TyID
:
1155 case Type::FP128TyID
: {
1156 ConstantFP
*FPC
= cast
<ConstantFP
>(CPV
);
1157 std::map
<const ConstantFP
*, unsigned>::iterator I
= FPConstantMap
.find(FPC
);
1158 if (I
!= FPConstantMap
.end()) {
1159 // Because of FP precision problems we must load from a stack allocated
1160 // value that holds the value in hex.
1161 Out
<< "(*(" << (FPC
->getType() == Type::getFloatTy(CPV
->getContext()) ?
1163 FPC
->getType() == Type::getDoubleTy(CPV
->getContext()) ?
1166 << "*)&FPConstant" << I
->second
<< ')';
1169 if (FPC
->getType() == Type::getFloatTy(CPV
->getContext()))
1170 V
= FPC
->getValueAPF().convertToFloat();
1171 else if (FPC
->getType() == Type::getDoubleTy(CPV
->getContext()))
1172 V
= FPC
->getValueAPF().convertToDouble();
1174 // Long double. Convert the number to double, discarding precision.
1175 // This is not awesome, but it at least makes the CBE output somewhat
1177 APFloat Tmp
= FPC
->getValueAPF();
1179 Tmp
.convert(APFloat::IEEEdouble
, APFloat::rmTowardZero
, &LosesInfo
);
1180 V
= Tmp
.convertToDouble();
1186 // FIXME the actual NaN bits should be emitted.
1187 // The prefix for a quiet NaN is 0x7FF8. For a signalling NaN,
1189 const unsigned long QuietNaN
= 0x7ff8UL
;
1190 //const unsigned long SignalNaN = 0x7ff4UL;
1192 // We need to grab the first part of the FP #
1195 uint64_t ll
= DoubleToBits(V
);
1196 sprintf(Buffer
, "0x%llx", static_cast<long long>(ll
));
1198 std::string
Num(&Buffer
[0], &Buffer
[6]);
1199 unsigned long Val
= strtoul(Num
.c_str(), 0, 16);
1201 if (FPC
->getType() == Type::getFloatTy(FPC
->getContext()))
1202 Out
<< "LLVM_NAN" << (Val
== QuietNaN
? "" : "S") << "F(\""
1203 << Buffer
<< "\") /*nan*/ ";
1205 Out
<< "LLVM_NAN" << (Val
== QuietNaN
? "" : "S") << "(\""
1206 << Buffer
<< "\") /*nan*/ ";
1207 } else if (IsInf(V
)) {
1209 if (V
< 0) Out
<< '-';
1210 Out
<< "LLVM_INF" <<
1211 (FPC
->getType() == Type::getFloatTy(FPC
->getContext()) ? "F" : "")
1215 #if HAVE_PRINTF_A && ENABLE_CBE_PRINTF_A
1216 // Print out the constant as a floating point number.
1218 sprintf(Buffer
, "%a", V
);
1221 Num
= ftostr(FPC
->getValueAPF());
1229 case Type::ArrayTyID
:
1230 // Use C99 compound expression literal initializer syntax.
1233 printType(Out
, CPV
->getType());
1236 Out
<< "{ "; // Arrays are wrapped in struct types.
1237 if (ConstantArray
*CA
= dyn_cast
<ConstantArray
>(CPV
)) {
1238 printConstantArray(CA
, Static
);
1240 assert(isa
<ConstantAggregateZero
>(CPV
) || isa
<UndefValue
>(CPV
));
1241 const ArrayType
*AT
= cast
<ArrayType
>(CPV
->getType());
1243 if (AT
->getNumElements()) {
1245 Constant
*CZ
= Constant::getNullValue(AT
->getElementType());
1246 printConstant(CZ
, Static
);
1247 for (unsigned i
= 1, e
= AT
->getNumElements(); i
!= e
; ++i
) {
1249 printConstant(CZ
, Static
);
1254 Out
<< " }"; // Arrays are wrapped in struct types.
1257 case Type::VectorTyID
:
1258 // Use C99 compound expression literal initializer syntax.
1261 printType(Out
, CPV
->getType());
1264 if (ConstantVector
*CV
= dyn_cast
<ConstantVector
>(CPV
)) {
1265 printConstantVector(CV
, Static
);
1267 assert(isa
<ConstantAggregateZero
>(CPV
) || isa
<UndefValue
>(CPV
));
1268 const VectorType
*VT
= cast
<VectorType
>(CPV
->getType());
1270 Constant
*CZ
= Constant::getNullValue(VT
->getElementType());
1271 printConstant(CZ
, Static
);
1272 for (unsigned i
= 1, e
= VT
->getNumElements(); i
!= e
; ++i
) {
1274 printConstant(CZ
, Static
);
1280 case Type::StructTyID
:
1281 // Use C99 compound expression literal initializer syntax.
1284 printType(Out
, CPV
->getType());
1287 if (isa
<ConstantAggregateZero
>(CPV
) || isa
<UndefValue
>(CPV
)) {
1288 const StructType
*ST
= cast
<StructType
>(CPV
->getType());
1290 if (ST
->getNumElements()) {
1292 printConstant(Constant::getNullValue(ST
->getElementType(0)), Static
);
1293 for (unsigned i
= 1, e
= ST
->getNumElements(); i
!= e
; ++i
) {
1295 printConstant(Constant::getNullValue(ST
->getElementType(i
)), Static
);
1301 if (CPV
->getNumOperands()) {
1303 printConstant(cast
<Constant
>(CPV
->getOperand(0)), Static
);
1304 for (unsigned i
= 1, e
= CPV
->getNumOperands(); i
!= e
; ++i
) {
1306 printConstant(cast
<Constant
>(CPV
->getOperand(i
)), Static
);
1313 case Type::PointerTyID
:
1314 if (isa
<ConstantPointerNull
>(CPV
)) {
1316 printType(Out
, CPV
->getType()); // sign doesn't matter
1317 Out
<< ")/*NULL*/0)";
1319 } else if (GlobalValue
*GV
= dyn_cast
<GlobalValue
>(CPV
)) {
1320 writeOperand(GV
, Static
);
1326 errs() << "Unknown constant type: " << *CPV
<< "\n";
1328 llvm_unreachable(0);
1332 // Some constant expressions need to be casted back to the original types
1333 // because their operands were casted to the expected type. This function takes
1334 // care of detecting that case and printing the cast for the ConstantExpr.
1335 bool CWriter::printConstExprCast(const ConstantExpr
* CE
, bool Static
) {
1336 bool NeedsExplicitCast
= false;
1337 const Type
*Ty
= CE
->getOperand(0)->getType();
1338 bool TypeIsSigned
= false;
1339 switch (CE
->getOpcode()) {
1340 case Instruction::Add
:
1341 case Instruction::Sub
:
1342 case Instruction::Mul
:
1343 // We need to cast integer arithmetic so that it is always performed
1344 // as unsigned, to avoid undefined behavior on overflow.
1345 case Instruction::LShr
:
1346 case Instruction::URem
:
1347 case Instruction::UDiv
: NeedsExplicitCast
= true; break;
1348 case Instruction::AShr
:
1349 case Instruction::SRem
:
1350 case Instruction::SDiv
: NeedsExplicitCast
= true; TypeIsSigned
= true; break;
1351 case Instruction::SExt
:
1353 NeedsExplicitCast
= true;
1354 TypeIsSigned
= true;
1356 case Instruction::ZExt
:
1357 case Instruction::Trunc
:
1358 case Instruction::FPTrunc
:
1359 case Instruction::FPExt
:
1360 case Instruction::UIToFP
:
1361 case Instruction::SIToFP
:
1362 case Instruction::FPToUI
:
1363 case Instruction::FPToSI
:
1364 case Instruction::PtrToInt
:
1365 case Instruction::IntToPtr
:
1366 case Instruction::BitCast
:
1368 NeedsExplicitCast
= true;
1372 if (NeedsExplicitCast
) {
1374 if (Ty
->isInteger() && Ty
!= Type::getInt1Ty(Ty
->getContext()))
1375 printSimpleType(Out
, Ty
, TypeIsSigned
);
1377 printType(Out
, Ty
); // not integer, sign doesn't matter
1380 return NeedsExplicitCast
;
1383 // Print a constant assuming that it is the operand for a given Opcode. The
1384 // opcodes that care about sign need to cast their operands to the expected
1385 // type before the operation proceeds. This function does the casting.
1386 void CWriter::printConstantWithCast(Constant
* CPV
, unsigned Opcode
) {
1388 // Extract the operand's type, we'll need it.
1389 const Type
* OpTy
= CPV
->getType();
1391 // Indicate whether to do the cast or not.
1392 bool shouldCast
= false;
1393 bool typeIsSigned
= false;
1395 // Based on the Opcode for which this Constant is being written, determine
1396 // the new type to which the operand should be casted by setting the value
1397 // of OpTy. If we change OpTy, also set shouldCast to true so it gets
1401 // for most instructions, it doesn't matter
1403 case Instruction::Add
:
1404 case Instruction::Sub
:
1405 case Instruction::Mul
:
1406 // We need to cast integer arithmetic so that it is always performed
1407 // as unsigned, to avoid undefined behavior on overflow.
1408 case Instruction::LShr
:
1409 case Instruction::UDiv
:
1410 case Instruction::URem
:
1413 case Instruction::AShr
:
1414 case Instruction::SDiv
:
1415 case Instruction::SRem
:
1417 typeIsSigned
= true;
1421 // Write out the casted constant if we should, otherwise just write the
1425 printSimpleType(Out
, OpTy
, typeIsSigned
);
1427 printConstant(CPV
, false);
1430 printConstant(CPV
, false);
1433 std::string
CWriter::GetValueName(const Value
*Operand
) {
1434 // Mangle globals with the standard mangler interface for LLC compatibility.
1435 if (const GlobalValue
*GV
= dyn_cast
<GlobalValue
>(Operand
))
1436 return Mang
->getMangledName(GV
);
1438 std::string Name
= Operand
->getName();
1440 if (Name
.empty()) { // Assign unique names to local temporaries.
1441 unsigned &No
= AnonValueNumbers
[Operand
];
1443 No
= ++NextAnonValueNumber
;
1444 Name
= "tmp__" + utostr(No
);
1447 std::string VarName
;
1448 VarName
.reserve(Name
.capacity());
1450 for (std::string::iterator I
= Name
.begin(), E
= Name
.end();
1454 if (!((ch
>= 'a' && ch
<= 'z') || (ch
>= 'A' && ch
<= 'Z') ||
1455 (ch
>= '0' && ch
<= '9') || ch
== '_')) {
1457 sprintf(buffer
, "_%x_", ch
);
1463 return "llvm_cbe_" + VarName
;
1466 /// writeInstComputationInline - Emit the computation for the specified
1467 /// instruction inline, with no destination provided.
1468 void CWriter::writeInstComputationInline(Instruction
&I
) {
1469 // We can't currently support integer types other than 1, 8, 16, 32, 64.
1471 const Type
*Ty
= I
.getType();
1472 if (Ty
->isInteger() && (Ty
!=Type::getInt1Ty(I
.getContext()) &&
1473 Ty
!=Type::getInt8Ty(I
.getContext()) &&
1474 Ty
!=Type::getInt16Ty(I
.getContext()) &&
1475 Ty
!=Type::getInt32Ty(I
.getContext()) &&
1476 Ty
!=Type::getInt64Ty(I
.getContext()))) {
1477 llvm_report_error("The C backend does not currently support integer "
1478 "types of widths other than 1, 8, 16, 32, 64.\n"
1479 "This is being tracked as PR 4158.");
1482 // If this is a non-trivial bool computation, make sure to truncate down to
1483 // a 1 bit value. This is important because we want "add i1 x, y" to return
1484 // "0" when x and y are true, not "2" for example.
1485 bool NeedBoolTrunc
= false;
1486 if (I
.getType() == Type::getInt1Ty(I
.getContext()) &&
1487 !isa
<ICmpInst
>(I
) && !isa
<FCmpInst
>(I
))
1488 NeedBoolTrunc
= true;
1500 void CWriter::writeOperandInternal(Value
*Operand
, bool Static
) {
1501 if (Instruction
*I
= dyn_cast
<Instruction
>(Operand
))
1502 // Should we inline this instruction to build a tree?
1503 if (isInlinableInst(*I
) && !isDirectAlloca(I
)) {
1505 writeInstComputationInline(*I
);
1510 Constant
* CPV
= dyn_cast
<Constant
>(Operand
);
1512 if (CPV
&& !isa
<GlobalValue
>(CPV
))
1513 printConstant(CPV
, Static
);
1515 Out
<< GetValueName(Operand
);
1518 void CWriter::writeOperand(Value
*Operand
, bool Static
) {
1519 bool isAddressImplicit
= isAddressExposed(Operand
);
1520 if (isAddressImplicit
)
1521 Out
<< "(&"; // Global variables are referenced as their addresses by llvm
1523 writeOperandInternal(Operand
, Static
);
1525 if (isAddressImplicit
)
1529 // Some instructions need to have their result value casted back to the
1530 // original types because their operands were casted to the expected type.
1531 // This function takes care of detecting that case and printing the cast
1532 // for the Instruction.
1533 bool CWriter::writeInstructionCast(const Instruction
&I
) {
1534 const Type
*Ty
= I
.getOperand(0)->getType();
1535 switch (I
.getOpcode()) {
1536 case Instruction::Add
:
1537 case Instruction::Sub
:
1538 case Instruction::Mul
:
1539 // We need to cast integer arithmetic so that it is always performed
1540 // as unsigned, to avoid undefined behavior on overflow.
1541 case Instruction::LShr
:
1542 case Instruction::URem
:
1543 case Instruction::UDiv
:
1545 printSimpleType(Out
, Ty
, false);
1548 case Instruction::AShr
:
1549 case Instruction::SRem
:
1550 case Instruction::SDiv
:
1552 printSimpleType(Out
, Ty
, true);
1560 // Write the operand with a cast to another type based on the Opcode being used.
1561 // This will be used in cases where an instruction has specific type
1562 // requirements (usually signedness) for its operands.
1563 void CWriter::writeOperandWithCast(Value
* Operand
, unsigned Opcode
) {
1565 // Extract the operand's type, we'll need it.
1566 const Type
* OpTy
= Operand
->getType();
1568 // Indicate whether to do the cast or not.
1569 bool shouldCast
= false;
1571 // Indicate whether the cast should be to a signed type or not.
1572 bool castIsSigned
= false;
1574 // Based on the Opcode for which this Operand is being written, determine
1575 // the new type to which the operand should be casted by setting the value
1576 // of OpTy. If we change OpTy, also set shouldCast to true.
1579 // for most instructions, it doesn't matter
1581 case Instruction::Add
:
1582 case Instruction::Sub
:
1583 case Instruction::Mul
:
1584 // We need to cast integer arithmetic so that it is always performed
1585 // as unsigned, to avoid undefined behavior on overflow.
1586 case Instruction::LShr
:
1587 case Instruction::UDiv
:
1588 case Instruction::URem
: // Cast to unsigned first
1590 castIsSigned
= false;
1592 case Instruction::GetElementPtr
:
1593 case Instruction::AShr
:
1594 case Instruction::SDiv
:
1595 case Instruction::SRem
: // Cast to signed first
1597 castIsSigned
= true;
1601 // Write out the casted operand if we should, otherwise just write the
1605 printSimpleType(Out
, OpTy
, castIsSigned
);
1607 writeOperand(Operand
);
1610 writeOperand(Operand
);
1613 // Write the operand with a cast to another type based on the icmp predicate
1615 void CWriter::writeOperandWithCast(Value
* Operand
, const ICmpInst
&Cmp
) {
1616 // This has to do a cast to ensure the operand has the right signedness.
1617 // Also, if the operand is a pointer, we make sure to cast to an integer when
1618 // doing the comparison both for signedness and so that the C compiler doesn't
1619 // optimize things like "p < NULL" to false (p may contain an integer value
1621 bool shouldCast
= Cmp
.isRelational();
1623 // Write out the casted operand if we should, otherwise just write the
1626 writeOperand(Operand
);
1630 // Should this be a signed comparison? If so, convert to signed.
1631 bool castIsSigned
= Cmp
.isSignedPredicate();
1633 // If the operand was a pointer, convert to a large integer type.
1634 const Type
* OpTy
= Operand
->getType();
1635 if (isa
<PointerType
>(OpTy
))
1636 OpTy
= TD
->getIntPtrType(Operand
->getContext());
1639 printSimpleType(Out
, OpTy
, castIsSigned
);
1641 writeOperand(Operand
);
1645 // generateCompilerSpecificCode - This is where we add conditional compilation
1646 // directives to cater to specific compilers as need be.
1648 static void generateCompilerSpecificCode(formatted_raw_ostream
& Out
,
1649 const TargetData
*TD
) {
1650 // Alloca is hard to get, and we don't want to include stdlib.h here.
1651 Out
<< "/* get a declaration for alloca */\n"
1652 << "#if defined(__CYGWIN__) || defined(__MINGW32__)\n"
1653 << "#define alloca(x) __builtin_alloca((x))\n"
1654 << "#define _alloca(x) __builtin_alloca((x))\n"
1655 << "#elif defined(__APPLE__)\n"
1656 << "extern void *__builtin_alloca(unsigned long);\n"
1657 << "#define alloca(x) __builtin_alloca(x)\n"
1658 << "#define longjmp _longjmp\n"
1659 << "#define setjmp _setjmp\n"
1660 << "#elif defined(__sun__)\n"
1661 << "#if defined(__sparcv9)\n"
1662 << "extern void *__builtin_alloca(unsigned long);\n"
1664 << "extern void *__builtin_alloca(unsigned int);\n"
1666 << "#define alloca(x) __builtin_alloca(x)\n"
1667 << "#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__arm__)\n"
1668 << "#define alloca(x) __builtin_alloca(x)\n"
1669 << "#elif defined(_MSC_VER)\n"
1670 << "#define inline _inline\n"
1671 << "#define alloca(x) _alloca(x)\n"
1673 << "#include <alloca.h>\n"
1676 // We output GCC specific attributes to preserve 'linkonce'ness on globals.
1677 // If we aren't being compiled with GCC, just drop these attributes.
1678 Out
<< "#ifndef __GNUC__ /* Can only support \"linkonce\" vars with GCC */\n"
1679 << "#define __attribute__(X)\n"
1682 // On Mac OS X, "external weak" is spelled "__attribute__((weak_import))".
1683 Out
<< "#if defined(__GNUC__) && defined(__APPLE_CC__)\n"
1684 << "#define __EXTERNAL_WEAK__ __attribute__((weak_import))\n"
1685 << "#elif defined(__GNUC__)\n"
1686 << "#define __EXTERNAL_WEAK__ __attribute__((weak))\n"
1688 << "#define __EXTERNAL_WEAK__\n"
1691 // For now, turn off the weak linkage attribute on Mac OS X. (See above.)
1692 Out
<< "#if defined(__GNUC__) && defined(__APPLE_CC__)\n"
1693 << "#define __ATTRIBUTE_WEAK__\n"
1694 << "#elif defined(__GNUC__)\n"
1695 << "#define __ATTRIBUTE_WEAK__ __attribute__((weak))\n"
1697 << "#define __ATTRIBUTE_WEAK__\n"
1700 // Add hidden visibility support. FIXME: APPLE_CC?
1701 Out
<< "#if defined(__GNUC__)\n"
1702 << "#define __HIDDEN__ __attribute__((visibility(\"hidden\")))\n"
1705 // Define NaN and Inf as GCC builtins if using GCC, as 0 otherwise
1706 // From the GCC documentation:
1708 // double __builtin_nan (const char *str)
1710 // This is an implementation of the ISO C99 function nan.
1712 // Since ISO C99 defines this function in terms of strtod, which we do
1713 // not implement, a description of the parsing is in order. The string is
1714 // parsed as by strtol; that is, the base is recognized by leading 0 or
1715 // 0x prefixes. The number parsed is placed in the significand such that
1716 // the least significant bit of the number is at the least significant
1717 // bit of the significand. The number is truncated to fit the significand
1718 // field provided. The significand is forced to be a quiet NaN.
1720 // This function, if given a string literal, is evaluated early enough
1721 // that it is considered a compile-time constant.
1723 // float __builtin_nanf (const char *str)
1725 // Similar to __builtin_nan, except the return type is float.
1727 // double __builtin_inf (void)
1729 // Similar to __builtin_huge_val, except a warning is generated if the
1730 // target floating-point format does not support infinities. This
1731 // function is suitable for implementing the ISO C99 macro INFINITY.
1733 // float __builtin_inff (void)
1735 // Similar to __builtin_inf, except the return type is float.
1736 Out
<< "#ifdef __GNUC__\n"
1737 << "#define LLVM_NAN(NanStr) __builtin_nan(NanStr) /* Double */\n"
1738 << "#define LLVM_NANF(NanStr) __builtin_nanf(NanStr) /* Float */\n"
1739 << "#define LLVM_NANS(NanStr) __builtin_nans(NanStr) /* Double */\n"
1740 << "#define LLVM_NANSF(NanStr) __builtin_nansf(NanStr) /* Float */\n"
1741 << "#define LLVM_INF __builtin_inf() /* Double */\n"
1742 << "#define LLVM_INFF __builtin_inff() /* Float */\n"
1743 << "#define LLVM_PREFETCH(addr,rw,locality) "
1744 "__builtin_prefetch(addr,rw,locality)\n"
1745 << "#define __ATTRIBUTE_CTOR__ __attribute__((constructor))\n"
1746 << "#define __ATTRIBUTE_DTOR__ __attribute__((destructor))\n"
1747 << "#define LLVM_ASM __asm__\n"
1749 << "#define LLVM_NAN(NanStr) ((double)0.0) /* Double */\n"
1750 << "#define LLVM_NANF(NanStr) 0.0F /* Float */\n"
1751 << "#define LLVM_NANS(NanStr) ((double)0.0) /* Double */\n"
1752 << "#define LLVM_NANSF(NanStr) 0.0F /* Float */\n"
1753 << "#define LLVM_INF ((double)0.0) /* Double */\n"
1754 << "#define LLVM_INFF 0.0F /* Float */\n"
1755 << "#define LLVM_PREFETCH(addr,rw,locality) /* PREFETCH */\n"
1756 << "#define __ATTRIBUTE_CTOR__\n"
1757 << "#define __ATTRIBUTE_DTOR__\n"
1758 << "#define LLVM_ASM(X)\n"
1761 Out
<< "#if __GNUC__ < 4 /* Old GCC's, or compilers not GCC */ \n"
1762 << "#define __builtin_stack_save() 0 /* not implemented */\n"
1763 << "#define __builtin_stack_restore(X) /* noop */\n"
1766 // Output typedefs for 128-bit integers. If these are needed with a
1767 // 32-bit target or with a C compiler that doesn't support mode(TI),
1768 // more drastic measures will be needed.
1769 Out
<< "#if __GNUC__ && __LP64__ /* 128-bit integer types */\n"
1770 << "typedef int __attribute__((mode(TI))) llvmInt128;\n"
1771 << "typedef unsigned __attribute__((mode(TI))) llvmUInt128;\n"
1774 // Output target-specific code that should be inserted into main.
1775 Out
<< "#define CODE_FOR_MAIN() /* Any target-specific code for main()*/\n";
1778 /// FindStaticTors - Given a static ctor/dtor list, unpack its contents into
1779 /// the StaticTors set.
1780 static void FindStaticTors(GlobalVariable
*GV
, std::set
<Function
*> &StaticTors
){
1781 ConstantArray
*InitList
= dyn_cast
<ConstantArray
>(GV
->getInitializer());
1782 if (!InitList
) return;
1784 for (unsigned i
= 0, e
= InitList
->getNumOperands(); i
!= e
; ++i
)
1785 if (ConstantStruct
*CS
= dyn_cast
<ConstantStruct
>(InitList
->getOperand(i
))){
1786 if (CS
->getNumOperands() != 2) return; // Not array of 2-element structs.
1788 if (CS
->getOperand(1)->isNullValue())
1789 return; // Found a null terminator, exit printing.
1790 Constant
*FP
= CS
->getOperand(1);
1791 if (ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(FP
))
1793 FP
= CE
->getOperand(0);
1794 if (Function
*F
= dyn_cast
<Function
>(FP
))
1795 StaticTors
.insert(F
);
1799 enum SpecialGlobalClass
{
1801 GlobalCtors
, GlobalDtors
,
1805 /// getGlobalVariableClass - If this is a global that is specially recognized
1806 /// by LLVM, return a code that indicates how we should handle it.
1807 static SpecialGlobalClass
getGlobalVariableClass(const GlobalVariable
*GV
) {
1808 // If this is a global ctors/dtors list, handle it now.
1809 if (GV
->hasAppendingLinkage() && GV
->use_empty()) {
1810 if (GV
->getName() == "llvm.global_ctors")
1812 else if (GV
->getName() == "llvm.global_dtors")
1816 // Otherwise, it it is other metadata, don't print it. This catches things
1817 // like debug information.
1818 if (GV
->getSection() == "llvm.metadata")
1824 // PrintEscapedString - Print each character of the specified string, escaping
1825 // it if it is not printable or if it is an escape char.
1826 static void PrintEscapedString(const char *Str
, unsigned Length
,
1828 for (unsigned i
= 0; i
!= Length
; ++i
) {
1829 unsigned char C
= Str
[i
];
1830 if (isprint(C
) && C
!= '\\' && C
!= '"')
1839 Out
<< "\\x" << hexdigit(C
>> 4) << hexdigit(C
& 0x0F);
1843 // PrintEscapedString - Print each character of the specified string, escaping
1844 // it if it is not printable or if it is an escape char.
1845 static void PrintEscapedString(const std::string
&Str
, raw_ostream
&Out
) {
1846 PrintEscapedString(Str
.c_str(), Str
.size(), Out
);
1849 bool CWriter::doInitialization(Module
&M
) {
1850 FunctionPass::doInitialization(M
);
1855 TD
= new TargetData(&M
);
1856 IL
= new IntrinsicLowering(*TD
);
1857 IL
->AddPrototypes(M
);
1859 // Ensure that all structure types have names...
1860 Mang
= new Mangler(M
);
1861 Mang
->markCharUnacceptable('.');
1863 // Keep track of which functions are static ctors/dtors so they can have
1864 // an attribute added to their prototypes.
1865 std::set
<Function
*> StaticCtors
, StaticDtors
;
1866 for (Module::global_iterator I
= M
.global_begin(), E
= M
.global_end();
1868 switch (getGlobalVariableClass(I
)) {
1871 FindStaticTors(I
, StaticCtors
);
1874 FindStaticTors(I
, StaticDtors
);
1879 // get declaration for alloca
1880 Out
<< "/* Provide Declarations */\n";
1881 Out
<< "#include <stdarg.h>\n"; // Varargs support
1882 Out
<< "#include <setjmp.h>\n"; // Unwind support
1883 generateCompilerSpecificCode(Out
, TD
);
1885 // Provide a definition for `bool' if not compiling with a C++ compiler.
1887 << "#ifndef __cplusplus\ntypedef unsigned char bool;\n#endif\n"
1889 << "\n\n/* Support for floating point constants */\n"
1890 << "typedef unsigned long long ConstantDoubleTy;\n"
1891 << "typedef unsigned int ConstantFloatTy;\n"
1892 << "typedef struct { unsigned long long f1; unsigned short f2; "
1893 "unsigned short pad[3]; } ConstantFP80Ty;\n"
1894 // This is used for both kinds of 128-bit long double; meaning differs.
1895 << "typedef struct { unsigned long long f1; unsigned long long f2; }"
1896 " ConstantFP128Ty;\n"
1897 << "\n\n/* Global Declarations */\n";
1899 // First output all the declarations for the program, because C requires
1900 // Functions & globals to be declared before they are used.
1902 if (!M
.getModuleInlineAsm().empty()) {
1903 Out
<< "/* Module asm statements */\n"
1906 // Split the string into lines, to make it easier to read the .ll file.
1907 std::string Asm
= M
.getModuleInlineAsm();
1909 size_t NewLine
= Asm
.find_first_of('\n', CurPos
);
1910 while (NewLine
!= std::string::npos
) {
1911 // We found a newline, print the portion of the asm string from the
1912 // last newline up to this newline.
1914 PrintEscapedString(std::string(Asm
.begin()+CurPos
, Asm
.begin()+NewLine
),
1918 NewLine
= Asm
.find_first_of('\n', CurPos
);
1921 PrintEscapedString(std::string(Asm
.begin()+CurPos
, Asm
.end()), Out
);
1923 << "/* End Module asm statements */\n";
1926 // Loop over the symbol table, emitting all named constants...
1927 printModuleTypes(M
.getTypeSymbolTable());
1929 // Global variable declarations...
1930 if (!M
.global_empty()) {
1931 Out
<< "\n/* External Global Variable Declarations */\n";
1932 for (Module::global_iterator I
= M
.global_begin(), E
= M
.global_end();
1935 if (I
->hasExternalLinkage() || I
->hasExternalWeakLinkage() ||
1936 I
->hasCommonLinkage())
1938 else if (I
->hasDLLImportLinkage())
1939 Out
<< "__declspec(dllimport) ";
1941 continue; // Internal Global
1943 // Thread Local Storage
1944 if (I
->isThreadLocal())
1947 printType(Out
, I
->getType()->getElementType(), false, GetValueName(I
));
1949 if (I
->hasExternalWeakLinkage())
1950 Out
<< " __EXTERNAL_WEAK__";
1955 // Function declarations
1956 Out
<< "\n/* Function Declarations */\n";
1957 Out
<< "double fmod(double, double);\n"; // Support for FP rem
1958 Out
<< "float fmodf(float, float);\n";
1959 Out
<< "long double fmodl(long double, long double);\n";
1961 for (Module::iterator I
= M
.begin(), E
= M
.end(); I
!= E
; ++I
) {
1962 // Don't print declarations for intrinsic functions.
1963 if (!I
->isIntrinsic() && I
->getName() != "setjmp" &&
1964 I
->getName() != "longjmp" && I
->getName() != "_setjmp") {
1965 if (I
->hasExternalWeakLinkage())
1967 printFunctionSignature(I
, true);
1968 if (I
->hasWeakLinkage() || I
->hasLinkOnceLinkage())
1969 Out
<< " __ATTRIBUTE_WEAK__";
1970 if (I
->hasExternalWeakLinkage())
1971 Out
<< " __EXTERNAL_WEAK__";
1972 if (StaticCtors
.count(I
))
1973 Out
<< " __ATTRIBUTE_CTOR__";
1974 if (StaticDtors
.count(I
))
1975 Out
<< " __ATTRIBUTE_DTOR__";
1976 if (I
->hasHiddenVisibility())
1977 Out
<< " __HIDDEN__";
1979 if (I
->hasName() && I
->getName()[0] == 1)
1980 Out
<< " LLVM_ASM(\"" << I
->getName().substr(1) << "\")";
1986 // Output the global variable declarations
1987 if (!M
.global_empty()) {
1988 Out
<< "\n\n/* Global Variable Declarations */\n";
1989 for (Module::global_iterator I
= M
.global_begin(), E
= M
.global_end();
1991 if (!I
->isDeclaration()) {
1992 // Ignore special globals, such as debug info.
1993 if (getGlobalVariableClass(I
))
1996 if (I
->hasLocalLinkage())
2001 // Thread Local Storage
2002 if (I
->isThreadLocal())
2005 printType(Out
, I
->getType()->getElementType(), false,
2008 if (I
->hasLinkOnceLinkage())
2009 Out
<< " __attribute__((common))";
2010 else if (I
->hasCommonLinkage()) // FIXME is this right?
2011 Out
<< " __ATTRIBUTE_WEAK__";
2012 else if (I
->hasWeakLinkage())
2013 Out
<< " __ATTRIBUTE_WEAK__";
2014 else if (I
->hasExternalWeakLinkage())
2015 Out
<< " __EXTERNAL_WEAK__";
2016 if (I
->hasHiddenVisibility())
2017 Out
<< " __HIDDEN__";
2022 // Output the global variable definitions and contents...
2023 if (!M
.global_empty()) {
2024 Out
<< "\n\n/* Global Variable Definitions and Initialization */\n";
2025 for (Module::global_iterator I
= M
.global_begin(), E
= M
.global_end();
2027 if (!I
->isDeclaration()) {
2028 // Ignore special globals, such as debug info.
2029 if (getGlobalVariableClass(I
))
2032 if (I
->hasLocalLinkage())
2034 else if (I
->hasDLLImportLinkage())
2035 Out
<< "__declspec(dllimport) ";
2036 else if (I
->hasDLLExportLinkage())
2037 Out
<< "__declspec(dllexport) ";
2039 // Thread Local Storage
2040 if (I
->isThreadLocal())
2043 printType(Out
, I
->getType()->getElementType(), false,
2045 if (I
->hasLinkOnceLinkage())
2046 Out
<< " __attribute__((common))";
2047 else if (I
->hasWeakLinkage())
2048 Out
<< " __ATTRIBUTE_WEAK__";
2049 else if (I
->hasCommonLinkage())
2050 Out
<< " __ATTRIBUTE_WEAK__";
2052 if (I
->hasHiddenVisibility())
2053 Out
<< " __HIDDEN__";
2055 // If the initializer is not null, emit the initializer. If it is null,
2056 // we try to avoid emitting large amounts of zeros. The problem with
2057 // this, however, occurs when the variable has weak linkage. In this
2058 // case, the assembler will complain about the variable being both weak
2059 // and common, so we disable this optimization.
2060 // FIXME common linkage should avoid this problem.
2061 if (!I
->getInitializer()->isNullValue()) {
2063 writeOperand(I
->getInitializer(), true);
2064 } else if (I
->hasWeakLinkage()) {
2065 // We have to specify an initializer, but it doesn't have to be
2066 // complete. If the value is an aggregate, print out { 0 }, and let
2067 // the compiler figure out the rest of the zeros.
2069 if (isa
<StructType
>(I
->getInitializer()->getType()) ||
2070 isa
<VectorType
>(I
->getInitializer()->getType())) {
2072 } else if (isa
<ArrayType
>(I
->getInitializer()->getType())) {
2073 // As with structs and vectors, but with an extra set of braces
2074 // because arrays are wrapped in structs.
2077 // Just print it out normally.
2078 writeOperand(I
->getInitializer(), true);
2086 Out
<< "\n\n/* Function Bodies */\n";
2088 // Emit some helper functions for dealing with FCMP instruction's
2090 Out
<< "static inline int llvm_fcmp_ord(double X, double Y) { ";
2091 Out
<< "return X == X && Y == Y; }\n";
2092 Out
<< "static inline int llvm_fcmp_uno(double X, double Y) { ";
2093 Out
<< "return X != X || Y != Y; }\n";
2094 Out
<< "static inline int llvm_fcmp_ueq(double X, double Y) { ";
2095 Out
<< "return X == Y || llvm_fcmp_uno(X, Y); }\n";
2096 Out
<< "static inline int llvm_fcmp_une(double X, double Y) { ";
2097 Out
<< "return X != Y; }\n";
2098 Out
<< "static inline int llvm_fcmp_ult(double X, double Y) { ";
2099 Out
<< "return X < Y || llvm_fcmp_uno(X, Y); }\n";
2100 Out
<< "static inline int llvm_fcmp_ugt(double X, double Y) { ";
2101 Out
<< "return X > Y || llvm_fcmp_uno(X, Y); }\n";
2102 Out
<< "static inline int llvm_fcmp_ule(double X, double Y) { ";
2103 Out
<< "return X <= Y || llvm_fcmp_uno(X, Y); }\n";
2104 Out
<< "static inline int llvm_fcmp_uge(double X, double Y) { ";
2105 Out
<< "return X >= Y || llvm_fcmp_uno(X, Y); }\n";
2106 Out
<< "static inline int llvm_fcmp_oeq(double X, double Y) { ";
2107 Out
<< "return X == Y ; }\n";
2108 Out
<< "static inline int llvm_fcmp_one(double X, double Y) { ";
2109 Out
<< "return X != Y && llvm_fcmp_ord(X, Y); }\n";
2110 Out
<< "static inline int llvm_fcmp_olt(double X, double Y) { ";
2111 Out
<< "return X < Y ; }\n";
2112 Out
<< "static inline int llvm_fcmp_ogt(double X, double Y) { ";
2113 Out
<< "return X > Y ; }\n";
2114 Out
<< "static inline int llvm_fcmp_ole(double X, double Y) { ";
2115 Out
<< "return X <= Y ; }\n";
2116 Out
<< "static inline int llvm_fcmp_oge(double X, double Y) { ";
2117 Out
<< "return X >= Y ; }\n";
2122 /// Output all floating point constants that cannot be printed accurately...
2123 void CWriter::printFloatingPointConstants(Function
&F
) {
2124 // Scan the module for floating point constants. If any FP constant is used
2125 // in the function, we want to redirect it here so that we do not depend on
2126 // the precision of the printed form, unless the printed form preserves
2129 for (constant_iterator I
= constant_begin(&F
), E
= constant_end(&F
);
2131 printFloatingPointConstants(*I
);
2136 void CWriter::printFloatingPointConstants(const Constant
*C
) {
2137 // If this is a constant expression, recursively check for constant fp values.
2138 if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(C
)) {
2139 for (unsigned i
= 0, e
= CE
->getNumOperands(); i
!= e
; ++i
)
2140 printFloatingPointConstants(CE
->getOperand(i
));
2144 // Otherwise, check for a FP constant that we need to print.
2145 const ConstantFP
*FPC
= dyn_cast
<ConstantFP
>(C
);
2147 // Do not put in FPConstantMap if safe.
2148 isFPCSafeToPrint(FPC
) ||
2149 // Already printed this constant?
2150 FPConstantMap
.count(FPC
))
2153 FPConstantMap
[FPC
] = FPCounter
; // Number the FP constants
2155 if (FPC
->getType() == Type::getDoubleTy(FPC
->getContext())) {
2156 double Val
= FPC
->getValueAPF().convertToDouble();
2157 uint64_t i
= FPC
->getValueAPF().bitcastToAPInt().getZExtValue();
2158 Out
<< "static const ConstantDoubleTy FPConstant" << FPCounter
++
2159 << " = 0x" << utohexstr(i
)
2160 << "ULL; /* " << Val
<< " */\n";
2161 } else if (FPC
->getType() == Type::getFloatTy(FPC
->getContext())) {
2162 float Val
= FPC
->getValueAPF().convertToFloat();
2163 uint32_t i
= (uint32_t)FPC
->getValueAPF().bitcastToAPInt().
2165 Out
<< "static const ConstantFloatTy FPConstant" << FPCounter
++
2166 << " = 0x" << utohexstr(i
)
2167 << "U; /* " << Val
<< " */\n";
2168 } else if (FPC
->getType() == Type::getX86_FP80Ty(FPC
->getContext())) {
2169 // api needed to prevent premature destruction
2170 APInt api
= FPC
->getValueAPF().bitcastToAPInt();
2171 const uint64_t *p
= api
.getRawData();
2172 Out
<< "static const ConstantFP80Ty FPConstant" << FPCounter
++
2173 << " = { 0x" << utohexstr(p
[0])
2174 << "ULL, 0x" << utohexstr((uint16_t)p
[1]) << ",{0,0,0}"
2175 << "}; /* Long double constant */\n";
2176 } else if (FPC
->getType() == Type::getPPC_FP128Ty(FPC
->getContext()) ||
2177 FPC
->getType() == Type::getFP128Ty(FPC
->getContext())) {
2178 APInt api
= FPC
->getValueAPF().bitcastToAPInt();
2179 const uint64_t *p
= api
.getRawData();
2180 Out
<< "static const ConstantFP128Ty FPConstant" << FPCounter
++
2182 << utohexstr(p
[0]) << ", 0x" << utohexstr(p
[1])
2183 << "}; /* Long double constant */\n";
2186 llvm_unreachable("Unknown float type!");
2192 /// printSymbolTable - Run through symbol table looking for type names. If a
2193 /// type name is found, emit its declaration...
2195 void CWriter::printModuleTypes(const TypeSymbolTable
&TST
) {
2196 Out
<< "/* Helper union for bitcasts */\n";
2197 Out
<< "typedef union {\n";
2198 Out
<< " unsigned int Int32;\n";
2199 Out
<< " unsigned long long Int64;\n";
2200 Out
<< " float Float;\n";
2201 Out
<< " double Double;\n";
2202 Out
<< "} llvmBitCastUnion;\n";
2204 // We are only interested in the type plane of the symbol table.
2205 TypeSymbolTable::const_iterator I
= TST
.begin();
2206 TypeSymbolTable::const_iterator End
= TST
.end();
2208 // If there are no type names, exit early.
2209 if (I
== End
) return;
2211 // Print out forward declarations for structure types before anything else!
2212 Out
<< "/* Structure forward decls */\n";
2213 for (; I
!= End
; ++I
) {
2214 std::string Name
= "struct l_" + Mang
->makeNameProper(I
->first
);
2215 Out
<< Name
<< ";\n";
2216 TypeNames
.insert(std::make_pair(I
->second
, Name
));
2221 // Now we can print out typedefs. Above, we guaranteed that this can only be
2222 // for struct or opaque types.
2223 Out
<< "/* Typedefs */\n";
2224 for (I
= TST
.begin(); I
!= End
; ++I
) {
2225 std::string Name
= "l_" + Mang
->makeNameProper(I
->first
);
2227 printType(Out
, I
->second
, false, Name
);
2233 // Keep track of which structures have been printed so far...
2234 std::set
<const Type
*> StructPrinted
;
2236 // Loop over all structures then push them into the stack so they are
2237 // printed in the correct order.
2239 Out
<< "/* Structure contents */\n";
2240 for (I
= TST
.begin(); I
!= End
; ++I
)
2241 if (isa
<StructType
>(I
->second
) || isa
<ArrayType
>(I
->second
))
2242 // Only print out used types!
2243 printContainedStructs(I
->second
, StructPrinted
);
2246 // Push the struct onto the stack and recursively push all structs
2247 // this one depends on.
2249 // TODO: Make this work properly with vector types
2251 void CWriter::printContainedStructs(const Type
*Ty
,
2252 std::set
<const Type
*> &StructPrinted
) {
2253 // Don't walk through pointers.
2254 if (isa
<PointerType
>(Ty
) || Ty
->isPrimitiveType() || Ty
->isInteger()) return;
2256 // Print all contained types first.
2257 for (Type::subtype_iterator I
= Ty
->subtype_begin(),
2258 E
= Ty
->subtype_end(); I
!= E
; ++I
)
2259 printContainedStructs(*I
, StructPrinted
);
2261 if (isa
<StructType
>(Ty
) || isa
<ArrayType
>(Ty
)) {
2262 // Check to see if we have already printed this struct.
2263 if (StructPrinted
.insert(Ty
).second
) {
2264 // Print structure type out.
2265 std::string Name
= TypeNames
[Ty
];
2266 printType(Out
, Ty
, false, Name
, true);
2272 void CWriter::printFunctionSignature(const Function
*F
, bool Prototype
) {
2273 /// isStructReturn - Should this function actually return a struct by-value?
2274 bool isStructReturn
= F
->hasStructRetAttr();
2276 if (F
->hasLocalLinkage()) Out
<< "static ";
2277 if (F
->hasDLLImportLinkage()) Out
<< "__declspec(dllimport) ";
2278 if (F
->hasDLLExportLinkage()) Out
<< "__declspec(dllexport) ";
2279 switch (F
->getCallingConv()) {
2280 case CallingConv::X86_StdCall
:
2281 Out
<< "__attribute__((stdcall)) ";
2283 case CallingConv::X86_FastCall
:
2284 Out
<< "__attribute__((fastcall)) ";
2290 // Loop over the arguments, printing them...
2291 const FunctionType
*FT
= cast
<FunctionType
>(F
->getFunctionType());
2292 const AttrListPtr
&PAL
= F
->getAttributes();
2294 std::stringstream FunctionInnards
;
2296 // Print out the name...
2297 FunctionInnards
<< GetValueName(F
) << '(';
2299 bool PrintedArg
= false;
2300 if (!F
->isDeclaration()) {
2301 if (!F
->arg_empty()) {
2302 Function::const_arg_iterator I
= F
->arg_begin(), E
= F
->arg_end();
2305 // If this is a struct-return function, don't print the hidden
2306 // struct-return argument.
2307 if (isStructReturn
) {
2308 assert(I
!= E
&& "Invalid struct return function!");
2313 std::string ArgName
;
2314 for (; I
!= E
; ++I
) {
2315 if (PrintedArg
) FunctionInnards
<< ", ";
2316 if (I
->hasName() || !Prototype
)
2317 ArgName
= GetValueName(I
);
2320 const Type
*ArgTy
= I
->getType();
2321 if (PAL
.paramHasAttr(Idx
, Attribute::ByVal
)) {
2322 ArgTy
= cast
<PointerType
>(ArgTy
)->getElementType();
2323 ByValParams
.insert(I
);
2325 printType(FunctionInnards
, ArgTy
,
2326 /*isSigned=*/PAL
.paramHasAttr(Idx
, Attribute::SExt
),
2333 // Loop over the arguments, printing them.
2334 FunctionType::param_iterator I
= FT
->param_begin(), E
= FT
->param_end();
2337 // If this is a struct-return function, don't print the hidden
2338 // struct-return argument.
2339 if (isStructReturn
) {
2340 assert(I
!= E
&& "Invalid struct return function!");
2345 for (; I
!= E
; ++I
) {
2346 if (PrintedArg
) FunctionInnards
<< ", ";
2347 const Type
*ArgTy
= *I
;
2348 if (PAL
.paramHasAttr(Idx
, Attribute::ByVal
)) {
2349 assert(isa
<PointerType
>(ArgTy
));
2350 ArgTy
= cast
<PointerType
>(ArgTy
)->getElementType();
2352 printType(FunctionInnards
, ArgTy
,
2353 /*isSigned=*/PAL
.paramHasAttr(Idx
, Attribute::SExt
));
2359 // Finish printing arguments... if this is a vararg function, print the ...,
2360 // unless there are no known types, in which case, we just emit ().
2362 if (FT
->isVarArg() && PrintedArg
) {
2363 if (PrintedArg
) FunctionInnards
<< ", ";
2364 FunctionInnards
<< "..."; // Output varargs portion of signature!
2365 } else if (!FT
->isVarArg() && !PrintedArg
) {
2366 FunctionInnards
<< "void"; // ret() -> ret(void) in C.
2368 FunctionInnards
<< ')';
2370 // Get the return tpe for the function.
2372 if (!isStructReturn
)
2373 RetTy
= F
->getReturnType();
2375 // If this is a struct-return function, print the struct-return type.
2376 RetTy
= cast
<PointerType
>(FT
->getParamType(0))->getElementType();
2379 // Print out the return type and the signature built above.
2380 printType(Out
, RetTy
,
2381 /*isSigned=*/PAL
.paramHasAttr(0, Attribute::SExt
),
2382 FunctionInnards
.str());
2385 static inline bool isFPIntBitCast(const Instruction
&I
) {
2386 if (!isa
<BitCastInst
>(I
))
2388 const Type
*SrcTy
= I
.getOperand(0)->getType();
2389 const Type
*DstTy
= I
.getType();
2390 return (SrcTy
->isFloatingPoint() && DstTy
->isInteger()) ||
2391 (DstTy
->isFloatingPoint() && SrcTy
->isInteger());
2394 void CWriter::printFunction(Function
&F
) {
2395 /// isStructReturn - Should this function actually return a struct by-value?
2396 bool isStructReturn
= F
.hasStructRetAttr();
2398 printFunctionSignature(&F
, false);
2401 // If this is a struct return function, handle the result with magic.
2402 if (isStructReturn
) {
2403 const Type
*StructTy
=
2404 cast
<PointerType
>(F
.arg_begin()->getType())->getElementType();
2406 printType(Out
, StructTy
, false, "StructReturn");
2407 Out
<< "; /* Struct return temporary */\n";
2410 printType(Out
, F
.arg_begin()->getType(), false,
2411 GetValueName(F
.arg_begin()));
2412 Out
<< " = &StructReturn;\n";
2415 bool PrintedVar
= false;
2417 // print local variable information for the function
2418 for (inst_iterator I
= inst_begin(&F
), E
= inst_end(&F
); I
!= E
; ++I
) {
2419 if (const AllocaInst
*AI
= isDirectAlloca(&*I
)) {
2421 printType(Out
, AI
->getAllocatedType(), false, GetValueName(AI
));
2422 Out
<< "; /* Address-exposed local */\n";
2424 } else if (I
->getType() != Type::getVoidTy(F
.getContext()) &&
2425 !isInlinableInst(*I
)) {
2427 printType(Out
, I
->getType(), false, GetValueName(&*I
));
2430 if (isa
<PHINode
>(*I
)) { // Print out PHI node temporaries as well...
2432 printType(Out
, I
->getType(), false,
2433 GetValueName(&*I
)+"__PHI_TEMPORARY");
2438 // We need a temporary for the BitCast to use so it can pluck a value out
2439 // of a union to do the BitCast. This is separate from the need for a
2440 // variable to hold the result of the BitCast.
2441 if (isFPIntBitCast(*I
)) {
2442 Out
<< " llvmBitCastUnion " << GetValueName(&*I
)
2443 << "__BITCAST_TEMPORARY;\n";
2451 if (F
.hasExternalLinkage() && F
.getName() == "main")
2452 Out
<< " CODE_FOR_MAIN();\n";
2454 // print the basic blocks
2455 for (Function::iterator BB
= F
.begin(), E
= F
.end(); BB
!= E
; ++BB
) {
2456 if (Loop
*L
= LI
->getLoopFor(BB
)) {
2457 if (L
->getHeader() == BB
&& L
->getParentLoop() == 0)
2460 printBasicBlock(BB
);
2467 void CWriter::printLoop(Loop
*L
) {
2468 Out
<< " do { /* Syntactic loop '" << L
->getHeader()->getName()
2469 << "' to make GCC happy */\n";
2470 for (unsigned i
= 0, e
= L
->getBlocks().size(); i
!= e
; ++i
) {
2471 BasicBlock
*BB
= L
->getBlocks()[i
];
2472 Loop
*BBLoop
= LI
->getLoopFor(BB
);
2474 printBasicBlock(BB
);
2475 else if (BB
== BBLoop
->getHeader() && BBLoop
->getParentLoop() == L
)
2478 Out
<< " } while (1); /* end of syntactic loop '"
2479 << L
->getHeader()->getName() << "' */\n";
2482 void CWriter::printBasicBlock(BasicBlock
*BB
) {
2484 // Don't print the label for the basic block if there are no uses, or if
2485 // the only terminator use is the predecessor basic block's terminator.
2486 // We have to scan the use list because PHI nodes use basic blocks too but
2487 // do not require a label to be generated.
2489 bool NeedsLabel
= false;
2490 for (pred_iterator PI
= pred_begin(BB
), E
= pred_end(BB
); PI
!= E
; ++PI
)
2491 if (isGotoCodeNecessary(*PI
, BB
)) {
2496 if (NeedsLabel
) Out
<< GetValueName(BB
) << ":\n";
2498 // Output all of the instructions in the basic block...
2499 for (BasicBlock::iterator II
= BB
->begin(), E
= --BB
->end(); II
!= E
;
2501 if (!isInlinableInst(*II
) && !isDirectAlloca(II
)) {
2502 if (II
->getType() != Type::getVoidTy(BB
->getContext()) &&
2507 writeInstComputationInline(*II
);
2512 // Don't emit prefix or suffix for the terminator.
2513 visit(*BB
->getTerminator());
2517 // Specific Instruction type classes... note that all of the casts are
2518 // necessary because we use the instruction classes as opaque types...
2520 void CWriter::visitReturnInst(ReturnInst
&I
) {
2521 // If this is a struct return function, return the temporary struct.
2522 bool isStructReturn
= I
.getParent()->getParent()->hasStructRetAttr();
2524 if (isStructReturn
) {
2525 Out
<< " return StructReturn;\n";
2529 // Don't output a void return if this is the last basic block in the function
2530 if (I
.getNumOperands() == 0 &&
2531 &*--I
.getParent()->getParent()->end() == I
.getParent() &&
2532 !I
.getParent()->size() == 1) {
2536 if (I
.getNumOperands() > 1) {
2539 printType(Out
, I
.getParent()->getParent()->getReturnType());
2540 Out
<< " llvm_cbe_mrv_temp = {\n";
2541 for (unsigned i
= 0, e
= I
.getNumOperands(); i
!= e
; ++i
) {
2543 writeOperand(I
.getOperand(i
));
2549 Out
<< " return llvm_cbe_mrv_temp;\n";
2555 if (I
.getNumOperands()) {
2557 writeOperand(I
.getOperand(0));
2562 void CWriter::visitSwitchInst(SwitchInst
&SI
) {
2565 writeOperand(SI
.getOperand(0));
2566 Out
<< ") {\n default:\n";
2567 printPHICopiesForSuccessor (SI
.getParent(), SI
.getDefaultDest(), 2);
2568 printBranchToBlock(SI
.getParent(), SI
.getDefaultDest(), 2);
2570 for (unsigned i
= 2, e
= SI
.getNumOperands(); i
!= e
; i
+= 2) {
2572 writeOperand(SI
.getOperand(i
));
2574 BasicBlock
*Succ
= cast
<BasicBlock
>(SI
.getOperand(i
+1));
2575 printPHICopiesForSuccessor (SI
.getParent(), Succ
, 2);
2576 printBranchToBlock(SI
.getParent(), Succ
, 2);
2577 if (Function::iterator(Succ
) == next(Function::iterator(SI
.getParent())))
2583 void CWriter::visitUnreachableInst(UnreachableInst
&I
) {
2584 Out
<< " /*UNREACHABLE*/;\n";
2587 bool CWriter::isGotoCodeNecessary(BasicBlock
*From
, BasicBlock
*To
) {
2588 /// FIXME: This should be reenabled, but loop reordering safe!!
2591 if (next(Function::iterator(From
)) != Function::iterator(To
))
2592 return true; // Not the direct successor, we need a goto.
2594 //isa<SwitchInst>(From->getTerminator())
2596 if (LI
->getLoopFor(From
) != LI
->getLoopFor(To
))
2601 void CWriter::printPHICopiesForSuccessor (BasicBlock
*CurBlock
,
2602 BasicBlock
*Successor
,
2604 for (BasicBlock::iterator I
= Successor
->begin(); isa
<PHINode
>(I
); ++I
) {
2605 PHINode
*PN
= cast
<PHINode
>(I
);
2606 // Now we have to do the printing.
2607 Value
*IV
= PN
->getIncomingValueForBlock(CurBlock
);
2608 if (!isa
<UndefValue
>(IV
)) {
2609 Out
<< std::string(Indent
, ' ');
2610 Out
<< " " << GetValueName(I
) << "__PHI_TEMPORARY = ";
2612 Out
<< "; /* for PHI node */\n";
2617 void CWriter::printBranchToBlock(BasicBlock
*CurBB
, BasicBlock
*Succ
,
2619 if (isGotoCodeNecessary(CurBB
, Succ
)) {
2620 Out
<< std::string(Indent
, ' ') << " goto ";
2626 // Branch instruction printing - Avoid printing out a branch to a basic block
2627 // that immediately succeeds the current one.
2629 void CWriter::visitBranchInst(BranchInst
&I
) {
2631 if (I
.isConditional()) {
2632 if (isGotoCodeNecessary(I
.getParent(), I
.getSuccessor(0))) {
2634 writeOperand(I
.getCondition());
2637 printPHICopiesForSuccessor (I
.getParent(), I
.getSuccessor(0), 2);
2638 printBranchToBlock(I
.getParent(), I
.getSuccessor(0), 2);
2640 if (isGotoCodeNecessary(I
.getParent(), I
.getSuccessor(1))) {
2641 Out
<< " } else {\n";
2642 printPHICopiesForSuccessor (I
.getParent(), I
.getSuccessor(1), 2);
2643 printBranchToBlock(I
.getParent(), I
.getSuccessor(1), 2);
2646 // First goto not necessary, assume second one is...
2648 writeOperand(I
.getCondition());
2651 printPHICopiesForSuccessor (I
.getParent(), I
.getSuccessor(1), 2);
2652 printBranchToBlock(I
.getParent(), I
.getSuccessor(1), 2);
2657 printPHICopiesForSuccessor (I
.getParent(), I
.getSuccessor(0), 0);
2658 printBranchToBlock(I
.getParent(), I
.getSuccessor(0), 0);
2663 // PHI nodes get copied into temporary values at the end of predecessor basic
2664 // blocks. We now need to copy these temporary values into the REAL value for
2666 void CWriter::visitPHINode(PHINode
&I
) {
2668 Out
<< "__PHI_TEMPORARY";
2672 void CWriter::visitBinaryOperator(Instruction
&I
) {
2673 // binary instructions, shift instructions, setCond instructions.
2674 assert(!isa
<PointerType
>(I
.getType()));
2676 // We must cast the results of binary operations which might be promoted.
2677 bool needsCast
= false;
2678 if ((I
.getType() == Type::getInt8Ty(I
.getContext())) ||
2679 (I
.getType() == Type::getInt16Ty(I
.getContext()))
2680 || (I
.getType() == Type::getFloatTy(I
.getContext()))) {
2683 printType(Out
, I
.getType(), false);
2687 // If this is a negation operation, print it out as such. For FP, we don't
2688 // want to print "-0.0 - X".
2689 if (BinaryOperator::isNeg(&I
)) {
2691 writeOperand(BinaryOperator::getNegArgument(cast
<BinaryOperator
>(&I
)));
2693 } else if (BinaryOperator::isFNeg(&I
)) {
2695 writeOperand(BinaryOperator::getFNegArgument(cast
<BinaryOperator
>(&I
)));
2697 } else if (I
.getOpcode() == Instruction::FRem
) {
2698 // Output a call to fmod/fmodf instead of emitting a%b
2699 if (I
.getType() == Type::getFloatTy(I
.getContext()))
2701 else if (I
.getType() == Type::getDoubleTy(I
.getContext()))
2703 else // all 3 flavors of long double
2705 writeOperand(I
.getOperand(0));
2707 writeOperand(I
.getOperand(1));
2711 // Write out the cast of the instruction's value back to the proper type
2713 bool NeedsClosingParens
= writeInstructionCast(I
);
2715 // Certain instructions require the operand to be forced to a specific type
2716 // so we use writeOperandWithCast here instead of writeOperand. Similarly
2717 // below for operand 1
2718 writeOperandWithCast(I
.getOperand(0), I
.getOpcode());
2720 switch (I
.getOpcode()) {
2721 case Instruction::Add
:
2722 case Instruction::FAdd
: Out
<< " + "; break;
2723 case Instruction::Sub
:
2724 case Instruction::FSub
: Out
<< " - "; break;
2725 case Instruction::Mul
:
2726 case Instruction::FMul
: Out
<< " * "; break;
2727 case Instruction::URem
:
2728 case Instruction::SRem
:
2729 case Instruction::FRem
: Out
<< " % "; break;
2730 case Instruction::UDiv
:
2731 case Instruction::SDiv
:
2732 case Instruction::FDiv
: Out
<< " / "; break;
2733 case Instruction::And
: Out
<< " & "; break;
2734 case Instruction::Or
: Out
<< " | "; break;
2735 case Instruction::Xor
: Out
<< " ^ "; break;
2736 case Instruction::Shl
: Out
<< " << "; break;
2737 case Instruction::LShr
:
2738 case Instruction::AShr
: Out
<< " >> "; break;
2741 errs() << "Invalid operator type!" << I
;
2743 llvm_unreachable(0);
2746 writeOperandWithCast(I
.getOperand(1), I
.getOpcode());
2747 if (NeedsClosingParens
)
2756 void CWriter::visitICmpInst(ICmpInst
&I
) {
2757 // We must cast the results of icmp which might be promoted.
2758 bool needsCast
= false;
2760 // Write out the cast of the instruction's value back to the proper type
2762 bool NeedsClosingParens
= writeInstructionCast(I
);
2764 // Certain icmp predicate require the operand to be forced to a specific type
2765 // so we use writeOperandWithCast here instead of writeOperand. Similarly
2766 // below for operand 1
2767 writeOperandWithCast(I
.getOperand(0), I
);
2769 switch (I
.getPredicate()) {
2770 case ICmpInst::ICMP_EQ
: Out
<< " == "; break;
2771 case ICmpInst::ICMP_NE
: Out
<< " != "; break;
2772 case ICmpInst::ICMP_ULE
:
2773 case ICmpInst::ICMP_SLE
: Out
<< " <= "; break;
2774 case ICmpInst::ICMP_UGE
:
2775 case ICmpInst::ICMP_SGE
: Out
<< " >= "; break;
2776 case ICmpInst::ICMP_ULT
:
2777 case ICmpInst::ICMP_SLT
: Out
<< " < "; break;
2778 case ICmpInst::ICMP_UGT
:
2779 case ICmpInst::ICMP_SGT
: Out
<< " > "; break;
2782 errs() << "Invalid icmp predicate!" << I
;
2784 llvm_unreachable(0);
2787 writeOperandWithCast(I
.getOperand(1), I
);
2788 if (NeedsClosingParens
)
2796 void CWriter::visitFCmpInst(FCmpInst
&I
) {
2797 if (I
.getPredicate() == FCmpInst::FCMP_FALSE
) {
2801 if (I
.getPredicate() == FCmpInst::FCMP_TRUE
) {
2807 switch (I
.getPredicate()) {
2808 default: llvm_unreachable("Illegal FCmp predicate");
2809 case FCmpInst::FCMP_ORD
: op
= "ord"; break;
2810 case FCmpInst::FCMP_UNO
: op
= "uno"; break;
2811 case FCmpInst::FCMP_UEQ
: op
= "ueq"; break;
2812 case FCmpInst::FCMP_UNE
: op
= "une"; break;
2813 case FCmpInst::FCMP_ULT
: op
= "ult"; break;
2814 case FCmpInst::FCMP_ULE
: op
= "ule"; break;
2815 case FCmpInst::FCMP_UGT
: op
= "ugt"; break;
2816 case FCmpInst::FCMP_UGE
: op
= "uge"; break;
2817 case FCmpInst::FCMP_OEQ
: op
= "oeq"; break;
2818 case FCmpInst::FCMP_ONE
: op
= "one"; break;
2819 case FCmpInst::FCMP_OLT
: op
= "olt"; break;
2820 case FCmpInst::FCMP_OLE
: op
= "ole"; break;
2821 case FCmpInst::FCMP_OGT
: op
= "ogt"; break;
2822 case FCmpInst::FCMP_OGE
: op
= "oge"; break;
2825 Out
<< "llvm_fcmp_" << op
<< "(";
2826 // Write the first operand
2827 writeOperand(I
.getOperand(0));
2829 // Write the second operand
2830 writeOperand(I
.getOperand(1));
2834 static const char * getFloatBitCastField(const Type
*Ty
) {
2835 switch (Ty
->getTypeID()) {
2836 default: llvm_unreachable("Invalid Type");
2837 case Type::FloatTyID
: return "Float";
2838 case Type::DoubleTyID
: return "Double";
2839 case Type::IntegerTyID
: {
2840 unsigned NumBits
= cast
<IntegerType
>(Ty
)->getBitWidth();
2849 void CWriter::visitCastInst(CastInst
&I
) {
2850 const Type
*DstTy
= I
.getType();
2851 const Type
*SrcTy
= I
.getOperand(0)->getType();
2852 if (isFPIntBitCast(I
)) {
2854 // These int<->float and long<->double casts need to be handled specially
2855 Out
<< GetValueName(&I
) << "__BITCAST_TEMPORARY."
2856 << getFloatBitCastField(I
.getOperand(0)->getType()) << " = ";
2857 writeOperand(I
.getOperand(0));
2858 Out
<< ", " << GetValueName(&I
) << "__BITCAST_TEMPORARY."
2859 << getFloatBitCastField(I
.getType());
2865 printCast(I
.getOpcode(), SrcTy
, DstTy
);
2867 // Make a sext from i1 work by subtracting the i1 from 0 (an int).
2868 if (SrcTy
== Type::getInt1Ty(I
.getContext()) &&
2869 I
.getOpcode() == Instruction::SExt
)
2872 writeOperand(I
.getOperand(0));
2874 if (DstTy
== Type::getInt1Ty(I
.getContext()) &&
2875 (I
.getOpcode() == Instruction::Trunc
||
2876 I
.getOpcode() == Instruction::FPToUI
||
2877 I
.getOpcode() == Instruction::FPToSI
||
2878 I
.getOpcode() == Instruction::PtrToInt
)) {
2879 // Make sure we really get a trunc to bool by anding the operand with 1
2885 void CWriter::visitSelectInst(SelectInst
&I
) {
2887 writeOperand(I
.getCondition());
2889 writeOperand(I
.getTrueValue());
2891 writeOperand(I
.getFalseValue());
2896 void CWriter::lowerIntrinsics(Function
&F
) {
2897 // This is used to keep track of intrinsics that get generated to a lowered
2898 // function. We must generate the prototypes before the function body which
2899 // will only be expanded on first use (by the loop below).
2900 std::vector
<Function
*> prototypesToGen
;
2902 // Examine all the instructions in this function to find the intrinsics that
2903 // need to be lowered.
2904 for (Function::iterator BB
= F
.begin(), EE
= F
.end(); BB
!= EE
; ++BB
)
2905 for (BasicBlock::iterator I
= BB
->begin(), E
= BB
->end(); I
!= E
; )
2906 if (CallInst
*CI
= dyn_cast
<CallInst
>(I
++))
2907 if (Function
*F
= CI
->getCalledFunction())
2908 switch (F
->getIntrinsicID()) {
2909 case Intrinsic::not_intrinsic
:
2910 case Intrinsic::memory_barrier
:
2911 case Intrinsic::vastart
:
2912 case Intrinsic::vacopy
:
2913 case Intrinsic::vaend
:
2914 case Intrinsic::returnaddress
:
2915 case Intrinsic::frameaddress
:
2916 case Intrinsic::setjmp
:
2917 case Intrinsic::longjmp
:
2918 case Intrinsic::prefetch
:
2919 case Intrinsic::dbg_stoppoint
:
2920 case Intrinsic::powi
:
2921 case Intrinsic::x86_sse_cmp_ss
:
2922 case Intrinsic::x86_sse_cmp_ps
:
2923 case Intrinsic::x86_sse2_cmp_sd
:
2924 case Intrinsic::x86_sse2_cmp_pd
:
2925 case Intrinsic::ppc_altivec_lvsl
:
2926 // We directly implement these intrinsics
2929 // If this is an intrinsic that directly corresponds to a GCC
2930 // builtin, we handle it.
2931 const char *BuiltinName
= "";
2932 #define GET_GCC_BUILTIN_NAME
2933 #include "llvm/Intrinsics.gen"
2934 #undef GET_GCC_BUILTIN_NAME
2935 // If we handle it, don't lower it.
2936 if (BuiltinName
[0]) break;
2938 // All other intrinsic calls we must lower.
2939 Instruction
*Before
= 0;
2940 if (CI
!= &BB
->front())
2941 Before
= prior(BasicBlock::iterator(CI
));
2943 IL
->LowerIntrinsicCall(CI
);
2944 if (Before
) { // Move iterator to instruction after call
2949 // If the intrinsic got lowered to another call, and that call has
2950 // a definition then we need to make sure its prototype is emitted
2951 // before any calls to it.
2952 if (CallInst
*Call
= dyn_cast
<CallInst
>(I
))
2953 if (Function
*NewF
= Call
->getCalledFunction())
2954 if (!NewF
->isDeclaration())
2955 prototypesToGen
.push_back(NewF
);
2960 // We may have collected some prototypes to emit in the loop above.
2961 // Emit them now, before the function that uses them is emitted. But,
2962 // be careful not to emit them twice.
2963 std::vector
<Function
*>::iterator I
= prototypesToGen
.begin();
2964 std::vector
<Function
*>::iterator E
= prototypesToGen
.end();
2965 for ( ; I
!= E
; ++I
) {
2966 if (intrinsicPrototypesAlreadyGenerated
.insert(*I
).second
) {
2968 printFunctionSignature(*I
, true);
2974 void CWriter::visitCallInst(CallInst
&I
) {
2975 if (isa
<InlineAsm
>(I
.getOperand(0)))
2976 return visitInlineAsm(I
);
2978 bool WroteCallee
= false;
2980 // Handle intrinsic function calls first...
2981 if (Function
*F
= I
.getCalledFunction())
2982 if (Intrinsic::ID ID
= (Intrinsic::ID
)F
->getIntrinsicID())
2983 if (visitBuiltinCall(I
, ID
, WroteCallee
))
2986 Value
*Callee
= I
.getCalledValue();
2988 const PointerType
*PTy
= cast
<PointerType
>(Callee
->getType());
2989 const FunctionType
*FTy
= cast
<FunctionType
>(PTy
->getElementType());
2991 // If this is a call to a struct-return function, assign to the first
2992 // parameter instead of passing it to the call.
2993 const AttrListPtr
&PAL
= I
.getAttributes();
2994 bool hasByVal
= I
.hasByValArgument();
2995 bool isStructRet
= I
.hasStructRetAttr();
2997 writeOperandDeref(I
.getOperand(1));
3001 if (I
.isTailCall()) Out
<< " /*tail*/ ";
3004 // If this is an indirect call to a struct return function, we need to cast
3005 // the pointer. Ditto for indirect calls with byval arguments.
3006 bool NeedsCast
= (hasByVal
|| isStructRet
) && !isa
<Function
>(Callee
);
3008 // GCC is a real PITA. It does not permit codegening casts of functions to
3009 // function pointers if they are in a call (it generates a trap instruction
3010 // instead!). We work around this by inserting a cast to void* in between
3011 // the function and the function pointer cast. Unfortunately, we can't just
3012 // form the constant expression here, because the folder will immediately
3015 // Note finally, that this is completely unsafe. ANSI C does not guarantee
3016 // that void* and function pointers have the same size. :( To deal with this
3017 // in the common case, we handle casts where the number of arguments passed
3020 if (ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(Callee
))
3022 if (Function
*RF
= dyn_cast
<Function
>(CE
->getOperand(0))) {
3028 // Ok, just cast the pointer type.
3031 printStructReturnPointerFunctionType(Out
, PAL
,
3032 cast
<PointerType
>(I
.getCalledValue()->getType()));
3034 printType(Out
, I
.getCalledValue()->getType(), false, "", true, PAL
);
3036 printType(Out
, I
.getCalledValue()->getType());
3039 writeOperand(Callee
);
3040 if (NeedsCast
) Out
<< ')';
3045 unsigned NumDeclaredParams
= FTy
->getNumParams();
3047 CallSite::arg_iterator AI
= I
.op_begin()+1, AE
= I
.op_end();
3049 if (isStructRet
) { // Skip struct return argument.
3054 bool PrintedArg
= false;
3055 for (; AI
!= AE
; ++AI
, ++ArgNo
) {
3056 if (PrintedArg
) Out
<< ", ";
3057 if (ArgNo
< NumDeclaredParams
&&
3058 (*AI
)->getType() != FTy
->getParamType(ArgNo
)) {
3060 printType(Out
, FTy
->getParamType(ArgNo
),
3061 /*isSigned=*/PAL
.paramHasAttr(ArgNo
+1, Attribute::SExt
));
3064 // Check if the argument is expected to be passed by value.
3065 if (I
.paramHasAttr(ArgNo
+1, Attribute::ByVal
))
3066 writeOperandDeref(*AI
);
3074 /// visitBuiltinCall - Handle the call to the specified builtin. Returns true
3075 /// if the entire call is handled, return false it it wasn't handled, and
3076 /// optionally set 'WroteCallee' if the callee has already been printed out.
3077 bool CWriter::visitBuiltinCall(CallInst
&I
, Intrinsic::ID ID
,
3078 bool &WroteCallee
) {
3081 // If this is an intrinsic that directly corresponds to a GCC
3082 // builtin, we emit it here.
3083 const char *BuiltinName
= "";
3084 Function
*F
= I
.getCalledFunction();
3085 #define GET_GCC_BUILTIN_NAME
3086 #include "llvm/Intrinsics.gen"
3087 #undef GET_GCC_BUILTIN_NAME
3088 assert(BuiltinName
[0] && "Unknown LLVM intrinsic!");
3094 case Intrinsic::memory_barrier
:
3095 Out
<< "__sync_synchronize()";
3097 case Intrinsic::vastart
:
3100 Out
<< "va_start(*(va_list*)";
3101 writeOperand(I
.getOperand(1));
3103 // Output the last argument to the enclosing function.
3104 if (I
.getParent()->getParent()->arg_empty()) {
3106 raw_string_ostream
Msg(msg
);
3107 Msg
<< "The C backend does not currently support zero "
3108 << "argument varargs functions, such as '"
3109 << I
.getParent()->getParent()->getName() << "'!";
3110 llvm_report_error(Msg
.str());
3112 writeOperand(--I
.getParent()->getParent()->arg_end());
3115 case Intrinsic::vaend
:
3116 if (!isa
<ConstantPointerNull
>(I
.getOperand(1))) {
3117 Out
<< "0; va_end(*(va_list*)";
3118 writeOperand(I
.getOperand(1));
3121 Out
<< "va_end(*(va_list*)0)";
3124 case Intrinsic::vacopy
:
3126 Out
<< "va_copy(*(va_list*)";
3127 writeOperand(I
.getOperand(1));
3128 Out
<< ", *(va_list*)";
3129 writeOperand(I
.getOperand(2));
3132 case Intrinsic::returnaddress
:
3133 Out
<< "__builtin_return_address(";
3134 writeOperand(I
.getOperand(1));
3137 case Intrinsic::frameaddress
:
3138 Out
<< "__builtin_frame_address(";
3139 writeOperand(I
.getOperand(1));
3142 case Intrinsic::powi
:
3143 Out
<< "__builtin_powi(";
3144 writeOperand(I
.getOperand(1));
3146 writeOperand(I
.getOperand(2));
3149 case Intrinsic::setjmp
:
3150 Out
<< "setjmp(*(jmp_buf*)";
3151 writeOperand(I
.getOperand(1));
3154 case Intrinsic::longjmp
:
3155 Out
<< "longjmp(*(jmp_buf*)";
3156 writeOperand(I
.getOperand(1));
3158 writeOperand(I
.getOperand(2));
3161 case Intrinsic::prefetch
:
3162 Out
<< "LLVM_PREFETCH((const void *)";
3163 writeOperand(I
.getOperand(1));
3165 writeOperand(I
.getOperand(2));
3167 writeOperand(I
.getOperand(3));
3170 case Intrinsic::stacksave
:
3171 // Emit this as: Val = 0; *((void**)&Val) = __builtin_stack_save()
3172 // to work around GCC bugs (see PR1809).
3173 Out
<< "0; *((void**)&" << GetValueName(&I
)
3174 << ") = __builtin_stack_save()";
3176 case Intrinsic::dbg_stoppoint
: {
3177 // If we use writeOperand directly we get a "u" suffix which is rejected
3179 DbgStopPointInst
&SPI
= cast
<DbgStopPointInst
>(I
);
3181 GetConstantStringInfo(SPI
.getDirectory(), dir
);
3183 GetConstantStringInfo(SPI
.getFileName(), file
);
3187 << dir
<< '/' << file
<< "\"\n";
3190 case Intrinsic::x86_sse_cmp_ss
:
3191 case Intrinsic::x86_sse_cmp_ps
:
3192 case Intrinsic::x86_sse2_cmp_sd
:
3193 case Intrinsic::x86_sse2_cmp_pd
:
3195 printType(Out
, I
.getType());
3197 // Multiple GCC builtins multiplex onto this intrinsic.
3198 switch (cast
<ConstantInt
>(I
.getOperand(3))->getZExtValue()) {
3199 default: llvm_unreachable("Invalid llvm.x86.sse.cmp!");
3200 case 0: Out
<< "__builtin_ia32_cmpeq"; break;
3201 case 1: Out
<< "__builtin_ia32_cmplt"; break;
3202 case 2: Out
<< "__builtin_ia32_cmple"; break;
3203 case 3: Out
<< "__builtin_ia32_cmpunord"; break;
3204 case 4: Out
<< "__builtin_ia32_cmpneq"; break;
3205 case 5: Out
<< "__builtin_ia32_cmpnlt"; break;
3206 case 6: Out
<< "__builtin_ia32_cmpnle"; break;
3207 case 7: Out
<< "__builtin_ia32_cmpord"; break;
3209 if (ID
== Intrinsic::x86_sse_cmp_ps
|| ID
== Intrinsic::x86_sse2_cmp_pd
)
3213 if (ID
== Intrinsic::x86_sse_cmp_ss
|| ID
== Intrinsic::x86_sse_cmp_ps
)
3219 writeOperand(I
.getOperand(1));
3221 writeOperand(I
.getOperand(2));
3224 case Intrinsic::ppc_altivec_lvsl
:
3226 printType(Out
, I
.getType());
3228 Out
<< "__builtin_altivec_lvsl(0, (void*)";
3229 writeOperand(I
.getOperand(1));
3235 //This converts the llvm constraint string to something gcc is expecting.
3236 //TODO: work out platform independent constraints and factor those out
3237 // of the per target tables
3238 // handle multiple constraint codes
3239 std::string
CWriter::InterpretASMConstraint(InlineAsm::ConstraintInfo
& c
) {
3241 assert(c
.Codes
.size() == 1 && "Too many asm constraint codes to handle");
3243 const char *const *table
= 0;
3245 // Grab the translation table from MCAsmInfo if it exists.
3247 std::string Triple
= TheModule
->getTargetTriple();
3249 Triple
= llvm::sys::getHostTriple();
3252 if (const Target
*Match
= TargetRegistry::lookupTarget(Triple
, E
))
3253 TAsm
= Match
->createAsmInfo(Triple
);
3256 table
= TAsm
->getAsmCBE();
3258 // Search the translation table if it exists.
3259 for (int i
= 0; table
&& table
[i
]; i
+= 2)
3260 if (c
.Codes
[0] == table
[i
])
3263 // Default is identity.
3267 //TODO: import logic from AsmPrinter.cpp
3268 static std::string
gccifyAsm(std::string asmstr
) {
3269 for (std::string::size_type i
= 0; i
!= asmstr
.size(); ++i
)
3270 if (asmstr
[i
] == '\n')
3271 asmstr
.replace(i
, 1, "\\n");
3272 else if (asmstr
[i
] == '\t')
3273 asmstr
.replace(i
, 1, "\\t");
3274 else if (asmstr
[i
] == '$') {
3275 if (asmstr
[i
+ 1] == '{') {
3276 std::string::size_type a
= asmstr
.find_first_of(':', i
+ 1);
3277 std::string::size_type b
= asmstr
.find_first_of('}', i
+ 1);
3278 std::string n
= "%" +
3279 asmstr
.substr(a
+ 1, b
- a
- 1) +
3280 asmstr
.substr(i
+ 2, a
- i
- 2);
3281 asmstr
.replace(i
, b
- i
+ 1, n
);
3284 asmstr
.replace(i
, 1, "%");
3286 else if (asmstr
[i
] == '%')//grr
3287 { asmstr
.replace(i
, 1, "%%"); ++i
;}
3292 //TODO: assumptions about what consume arguments from the call are likely wrong
3293 // handle communitivity
3294 void CWriter::visitInlineAsm(CallInst
&CI
) {
3295 InlineAsm
* as
= cast
<InlineAsm
>(CI
.getOperand(0));
3296 std::vector
<InlineAsm::ConstraintInfo
> Constraints
= as
->ParseConstraints();
3298 std::vector
<std::pair
<Value
*, int> > ResultVals
;
3299 if (CI
.getType() == Type::getVoidTy(CI
.getContext()))
3301 else if (const StructType
*ST
= dyn_cast
<StructType
>(CI
.getType())) {
3302 for (unsigned i
= 0, e
= ST
->getNumElements(); i
!= e
; ++i
)
3303 ResultVals
.push_back(std::make_pair(&CI
, (int)i
));
3305 ResultVals
.push_back(std::make_pair(&CI
, -1));
3308 // Fix up the asm string for gcc and emit it.
3309 Out
<< "__asm__ volatile (\"" << gccifyAsm(as
->getAsmString()) << "\"\n";
3312 unsigned ValueCount
= 0;
3313 bool IsFirst
= true;
3315 // Convert over all the output constraints.
3316 for (std::vector
<InlineAsm::ConstraintInfo
>::iterator I
= Constraints
.begin(),
3317 E
= Constraints
.end(); I
!= E
; ++I
) {
3319 if (I
->Type
!= InlineAsm::isOutput
) {
3321 continue; // Ignore non-output constraints.
3324 assert(I
->Codes
.size() == 1 && "Too many asm constraint codes to handle");
3325 std::string C
= InterpretASMConstraint(*I
);
3326 if (C
.empty()) continue;
3337 if (ValueCount
< ResultVals
.size()) {
3338 DestVal
= ResultVals
[ValueCount
].first
;
3339 DestValNo
= ResultVals
[ValueCount
].second
;
3341 DestVal
= CI
.getOperand(ValueCount
-ResultVals
.size()+1);
3343 if (I
->isEarlyClobber
)
3346 Out
<< "\"=" << C
<< "\"(" << GetValueName(DestVal
);
3347 if (DestValNo
!= -1)
3348 Out
<< ".field" << DestValNo
; // Multiple retvals.
3354 // Convert over all the input constraints.
3358 for (std::vector
<InlineAsm::ConstraintInfo
>::iterator I
= Constraints
.begin(),
3359 E
= Constraints
.end(); I
!= E
; ++I
) {
3360 if (I
->Type
!= InlineAsm::isInput
) {
3362 continue; // Ignore non-input constraints.
3365 assert(I
->Codes
.size() == 1 && "Too many asm constraint codes to handle");
3366 std::string C
= InterpretASMConstraint(*I
);
3367 if (C
.empty()) continue;
3374 assert(ValueCount
>= ResultVals
.size() && "Input can't refer to result");
3375 Value
*SrcVal
= CI
.getOperand(ValueCount
-ResultVals
.size()+1);
3377 Out
<< "\"" << C
<< "\"(";
3379 writeOperand(SrcVal
);
3381 writeOperandDeref(SrcVal
);
3385 // Convert over the clobber constraints.
3388 for (std::vector
<InlineAsm::ConstraintInfo
>::iterator I
= Constraints
.begin(),
3389 E
= Constraints
.end(); I
!= E
; ++I
) {
3390 if (I
->Type
!= InlineAsm::isClobber
)
3391 continue; // Ignore non-input constraints.
3393 assert(I
->Codes
.size() == 1 && "Too many asm constraint codes to handle");
3394 std::string C
= InterpretASMConstraint(*I
);
3395 if (C
.empty()) continue;
3402 Out
<< '\"' << C
<< '"';
3408 void CWriter::visitMallocInst(MallocInst
&I
) {
3409 llvm_unreachable("lowerallocations pass didn't work!");
3412 void CWriter::visitAllocaInst(AllocaInst
&I
) {
3414 printType(Out
, I
.getType());
3415 Out
<< ") alloca(sizeof(";
3416 printType(Out
, I
.getType()->getElementType());
3418 if (I
.isArrayAllocation()) {
3420 writeOperand(I
.getOperand(0));
3425 void CWriter::visitFreeInst(FreeInst
&I
) {
3426 llvm_unreachable("lowerallocations pass didn't work!");
3429 void CWriter::printGEPExpression(Value
*Ptr
, gep_type_iterator I
,
3430 gep_type_iterator E
, bool Static
) {
3432 // If there are no indices, just print out the pointer.
3438 // Find out if the last index is into a vector. If so, we have to print this
3439 // specially. Since vectors can't have elements of indexable type, only the
3440 // last index could possibly be of a vector element.
3441 const VectorType
*LastIndexIsVector
= 0;
3443 for (gep_type_iterator TmpI
= I
; TmpI
!= E
; ++TmpI
)
3444 LastIndexIsVector
= dyn_cast
<VectorType
>(*TmpI
);
3449 // If the last index is into a vector, we can't print it as &a[i][j] because
3450 // we can't index into a vector with j in GCC. Instead, emit this as
3451 // (((float*)&a[i])+j)
3452 if (LastIndexIsVector
) {
3454 printType(Out
, PointerType::getUnqual(LastIndexIsVector
->getElementType()));
3460 // If the first index is 0 (very typical) we can do a number of
3461 // simplifications to clean up the code.
3462 Value
*FirstOp
= I
.getOperand();
3463 if (!isa
<Constant
>(FirstOp
) || !cast
<Constant
>(FirstOp
)->isNullValue()) {
3464 // First index isn't simple, print it the hard way.
3467 ++I
; // Skip the zero index.
3469 // Okay, emit the first operand. If Ptr is something that is already address
3470 // exposed, like a global, avoid emitting (&foo)[0], just emit foo instead.
3471 if (isAddressExposed(Ptr
)) {
3472 writeOperandInternal(Ptr
, Static
);
3473 } else if (I
!= E
&& isa
<StructType
>(*I
)) {
3474 // If we didn't already emit the first operand, see if we can print it as
3475 // P->f instead of "P[0].f"
3477 Out
<< "->field" << cast
<ConstantInt
>(I
.getOperand())->getZExtValue();
3478 ++I
; // eat the struct index as well.
3480 // Instead of emitting P[0][1], emit (*P)[1], which is more idiomatic.
3487 for (; I
!= E
; ++I
) {
3488 if (isa
<StructType
>(*I
)) {
3489 Out
<< ".field" << cast
<ConstantInt
>(I
.getOperand())->getZExtValue();
3490 } else if (isa
<ArrayType
>(*I
)) {
3492 writeOperandWithCast(I
.getOperand(), Instruction::GetElementPtr
);
3494 } else if (!isa
<VectorType
>(*I
)) {
3496 writeOperandWithCast(I
.getOperand(), Instruction::GetElementPtr
);
3499 // If the last index is into a vector, then print it out as "+j)". This
3500 // works with the 'LastIndexIsVector' code above.
3501 if (isa
<Constant
>(I
.getOperand()) &&
3502 cast
<Constant
>(I
.getOperand())->isNullValue()) {
3503 Out
<< "))"; // avoid "+0".
3506 writeOperandWithCast(I
.getOperand(), Instruction::GetElementPtr
);
3514 void CWriter::writeMemoryAccess(Value
*Operand
, const Type
*OperandType
,
3515 bool IsVolatile
, unsigned Alignment
) {
3517 bool IsUnaligned
= Alignment
&&
3518 Alignment
< TD
->getABITypeAlignment(OperandType
);
3522 if (IsVolatile
|| IsUnaligned
) {
3525 Out
<< "struct __attribute__ ((packed, aligned(" << Alignment
<< "))) {";
3526 printType(Out
, OperandType
, false, IsUnaligned
? "data" : "volatile*");
3529 if (IsVolatile
) Out
<< "volatile ";
3535 writeOperand(Operand
);
3537 if (IsVolatile
|| IsUnaligned
) {
3544 void CWriter::visitLoadInst(LoadInst
&I
) {
3545 writeMemoryAccess(I
.getOperand(0), I
.getType(), I
.isVolatile(),
3550 void CWriter::visitStoreInst(StoreInst
&I
) {
3551 writeMemoryAccess(I
.getPointerOperand(), I
.getOperand(0)->getType(),
3552 I
.isVolatile(), I
.getAlignment());
3554 Value
*Operand
= I
.getOperand(0);
3555 Constant
*BitMask
= 0;
3556 if (const IntegerType
* ITy
= dyn_cast
<IntegerType
>(Operand
->getType()))
3557 if (!ITy
->isPowerOf2ByteWidth())
3558 // We have a bit width that doesn't match an even power-of-2 byte
3559 // size. Consequently we must & the value with the type's bit mask
3560 BitMask
= ConstantInt::get(ITy
, ITy
->getBitMask());
3563 writeOperand(Operand
);
3566 printConstant(BitMask
, false);
3571 void CWriter::visitGetElementPtrInst(GetElementPtrInst
&I
) {
3572 printGEPExpression(I
.getPointerOperand(), gep_type_begin(I
),
3573 gep_type_end(I
), false);
3576 void CWriter::visitVAArgInst(VAArgInst
&I
) {
3577 Out
<< "va_arg(*(va_list*)";
3578 writeOperand(I
.getOperand(0));
3580 printType(Out
, I
.getType());
3584 void CWriter::visitInsertElementInst(InsertElementInst
&I
) {
3585 const Type
*EltTy
= I
.getType()->getElementType();
3586 writeOperand(I
.getOperand(0));
3589 printType(Out
, PointerType::getUnqual(EltTy
));
3590 Out
<< ")(&" << GetValueName(&I
) << "))[";
3591 writeOperand(I
.getOperand(2));
3593 writeOperand(I
.getOperand(1));
3597 void CWriter::visitExtractElementInst(ExtractElementInst
&I
) {
3598 // We know that our operand is not inlined.
3601 cast
<VectorType
>(I
.getOperand(0)->getType())->getElementType();
3602 printType(Out
, PointerType::getUnqual(EltTy
));
3603 Out
<< ")(&" << GetValueName(I
.getOperand(0)) << "))[";
3604 writeOperand(I
.getOperand(1));
3608 void CWriter::visitShuffleVectorInst(ShuffleVectorInst
&SVI
) {
3610 printType(Out
, SVI
.getType());
3612 const VectorType
*VT
= SVI
.getType();
3613 unsigned NumElts
= VT
->getNumElements();
3614 const Type
*EltTy
= VT
->getElementType();
3616 for (unsigned i
= 0; i
!= NumElts
; ++i
) {
3618 int SrcVal
= SVI
.getMaskValue(i
);
3619 if ((unsigned)SrcVal
>= NumElts
*2) {
3620 Out
<< " 0/*undef*/ ";
3622 Value
*Op
= SVI
.getOperand((unsigned)SrcVal
>= NumElts
);
3623 if (isa
<Instruction
>(Op
)) {
3624 // Do an extractelement of this value from the appropriate input.
3626 printType(Out
, PointerType::getUnqual(EltTy
));
3627 Out
<< ")(&" << GetValueName(Op
)
3628 << "))[" << (SrcVal
& (NumElts
-1)) << "]";
3629 } else if (isa
<ConstantAggregateZero
>(Op
) || isa
<UndefValue
>(Op
)) {
3632 printConstant(cast
<ConstantVector
>(Op
)->getOperand(SrcVal
&
3641 void CWriter::visitInsertValueInst(InsertValueInst
&IVI
) {
3642 // Start by copying the entire aggregate value into the result variable.
3643 writeOperand(IVI
.getOperand(0));
3646 // Then do the insert to update the field.
3647 Out
<< GetValueName(&IVI
);
3648 for (const unsigned *b
= IVI
.idx_begin(), *i
= b
, *e
= IVI
.idx_end();
3650 const Type
*IndexedTy
=
3651 ExtractValueInst::getIndexedType(IVI
.getOperand(0)->getType(), b
, i
+1);
3652 if (isa
<ArrayType
>(IndexedTy
))
3653 Out
<< ".array[" << *i
<< "]";
3655 Out
<< ".field" << *i
;
3658 writeOperand(IVI
.getOperand(1));
3661 void CWriter::visitExtractValueInst(ExtractValueInst
&EVI
) {
3663 if (isa
<UndefValue
>(EVI
.getOperand(0))) {
3665 printType(Out
, EVI
.getType());
3666 Out
<< ") 0/*UNDEF*/";
3668 Out
<< GetValueName(EVI
.getOperand(0));
3669 for (const unsigned *b
= EVI
.idx_begin(), *i
= b
, *e
= EVI
.idx_end();
3671 const Type
*IndexedTy
=
3672 ExtractValueInst::getIndexedType(EVI
.getOperand(0)->getType(), b
, i
+1);
3673 if (isa
<ArrayType
>(IndexedTy
))
3674 Out
<< ".array[" << *i
<< "]";
3676 Out
<< ".field" << *i
;
3682 //===----------------------------------------------------------------------===//
3683 // External Interface declaration
3684 //===----------------------------------------------------------------------===//
3686 bool CTargetMachine::addPassesToEmitWholeFile(PassManager
&PM
,
3687 formatted_raw_ostream
&o
,
3688 CodeGenFileType FileType
,
3689 CodeGenOpt::Level OptLevel
) {
3690 if (FileType
!= TargetMachine::AssemblyFile
) return true;
3692 PM
.add(createGCLoweringPass());
3693 PM
.add(createLowerAllocationsPass(true));
3694 PM
.add(createLowerInvokePass());
3695 PM
.add(createCFGSimplificationPass()); // clean up after lower invoke.
3696 PM
.add(new CBackendNameAllUsedStructsAndMergeFunctions());
3697 PM
.add(new CWriter(o
));
3698 PM
.add(createGCInfoDeleter());