diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2006-12-17 20:24:50 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2006-12-17 20:24:50 +0000 |
commit | 225866469fa5a69f240fa67e0aa270c1b32fd35b (patch) | |
tree | 31c3761493bea93e8ee38997d1841116bca7b6d4 /lib/Target/CBackend/Writer.cpp | |
parent | 941cfda9c58a1568fd74779e6241fc8ead0cbed7 (diff) |
Use a predicate function to identify bitcast of fp and integer instead of
repeating the logic in two different parts of the code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32643 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend/Writer.cpp')
-rw-r--r-- | lib/Target/CBackend/Writer.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index a4d5483f2a..13fd574e0c 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -1676,6 +1676,15 @@ void CWriter::printFunctionSignature(const Function *F, bool Prototype) { printType(Out, RetTy, FunctionInnards.str()); } +static inline bool isFPIntBitCast(const Instruction &I) { + if (!isa<BitCastInst>(I)) + return false; + const Type *SrcTy = I.getOperand(0)->getType(); + const Type *DstTy = I.getType(); + return (SrcTy->isFloatingPoint() && DstTy->isInteger()) || + (DstTy->isFloatingPoint() && SrcTy->isInteger()); +} + void CWriter::printFunction(Function &F) { printFunctionSignature(&F, false); Out << " {\n"; @@ -1718,11 +1727,7 @@ void CWriter::printFunction(Function &F) { // We need a temporary for the BitCast to use so it can pluck a value out // of a uniont to do the BitCast. This is separate from the need for a // variable to hold the result of the BitCast. - if (isa<BitCastInst>(*I) && - ((I->getType()->isFloatingPoint() && - I->getOperand(0)->getType()->isInteger()) || - (I->getType()->isInteger() && - I->getOperand(0)->getType()->isFloatingPoint()))) { + if (isFPIntBitCast(*I)) { Out << " llvmBitCastUnion " << Mang->getValueName(&*I) << "__BITCAST_TEMPORARY;\n"; PrintedVar = true; @@ -2025,12 +2030,7 @@ void CWriter::visitCastInst(CastInst &I) { const Type *DstTy = I.getType(); const Type *SrcTy = I.getOperand(0)->getType(); Out << '('; - if (isa<BitCastInst>(I) && - ((I.getType()->isFloatingPoint() && - I.getOperand(0)->getType()->isInteger()) || - (I.getType()->isInteger() && - I.getOperand(0)->getType()->isFloatingPoint()))) { - + if (isFPIntBitCast(I)) { // These int<->float and long<->double casts need to be handled specially Out << Mang->getValueName(&I) << "__BITCAST_TEMPORARY." << getFloatBitCastField(I.getOperand(0)->getType()) << " = "; |