summaryrefslogtreecommitdiff
path: root/lib/Target/CBackend/CBackend.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-03-03 21:12:04 +0000
committerChris Lattner <sabre@nondot.org>2005-03-03 21:12:04 +0000
commit6d9b69fd5f404d66cdcad3f228e636588db05966 (patch)
tree3ff30b6fa01a2bd0d96dde6e44a8fe44bbe9d355 /lib/Target/CBackend/CBackend.cpp
parentf3f475efee6130292d84be4a5f94f26f55d88eda (diff)
downloadllvm-6d9b69fd5f404d66cdcad3f228e636588db05966.tar.gz
llvm-6d9b69fd5f404d66cdcad3f228e636588db05966.tar.bz2
llvm-6d9b69fd5f404d66cdcad3f228e636588db05966.tar.xz
Print -X like this:
double test(double l1_X) { return (-l1_X); } instead of like this: double test(double l1_X) { return (-0x0p+0 - l1_X); } git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20423 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend/CBackend.cpp')
-rw-r--r--lib/Target/CBackend/CBackend.cpp52
1 files changed, 30 insertions, 22 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index 8505917a44..af478d9bfd 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -1358,30 +1358,38 @@ void CWriter::visitBinaryOperator(Instruction &I) {
printType(Out, I.getType());
Out << ")(";
}
-
- writeOperand(I.getOperand(0));
- switch (I.getOpcode()) {
- case Instruction::Add: Out << " + "; break;
- case Instruction::Sub: Out << " - "; break;
- case Instruction::Mul: Out << '*'; break;
- case Instruction::Div: Out << '/'; break;
- case Instruction::Rem: Out << '%'; break;
- case Instruction::And: Out << " & "; break;
- case Instruction::Or: Out << " | "; break;
- case Instruction::Xor: Out << " ^ "; break;
- case Instruction::SetEQ: Out << " == "; break;
- case Instruction::SetNE: Out << " != "; break;
- case Instruction::SetLE: Out << " <= "; break;
- case Instruction::SetGE: Out << " >= "; break;
- case Instruction::SetLT: Out << " < "; break;
- case Instruction::SetGT: Out << " > "; break;
- case Instruction::Shl : Out << " << "; break;
- case Instruction::Shr : Out << " >> "; break;
- default: std::cerr << "Invalid operator type!" << I; abort();
- }
+ // If this is a negation operation, print it out as such. For FP, we don't
+ // want to print "-0.0 - X".
+ if (BinaryOperator::isNeg(&I)) {
+ Out << "-";
+ writeOperand(BinaryOperator::getNegArgument(cast<BinaryOperator>(&I)));
- writeOperand(I.getOperand(1));
+ } else {
+ writeOperand(I.getOperand(0));
+
+ switch (I.getOpcode()) {
+ case Instruction::Add: Out << " + "; break;
+ case Instruction::Sub: Out << " - "; break;
+ case Instruction::Mul: Out << '*'; break;
+ case Instruction::Div: Out << '/'; break;
+ case Instruction::Rem: Out << '%'; break;
+ case Instruction::And: Out << " & "; break;
+ case Instruction::Or: Out << " | "; break;
+ case Instruction::Xor: Out << " ^ "; break;
+ case Instruction::SetEQ: Out << " == "; break;
+ case Instruction::SetNE: Out << " != "; break;
+ case Instruction::SetLE: Out << " <= "; break;
+ case Instruction::SetGE: Out << " >= "; break;
+ case Instruction::SetLT: Out << " < "; break;
+ case Instruction::SetGT: Out << " > "; break;
+ case Instruction::Shl : Out << " << "; break;
+ case Instruction::Shr : Out << " >> "; break;
+ default: std::cerr << "Invalid operator type!" << I; abort();
+ }
+
+ writeOperand(I.getOperand(1));
+ }
if (needsCast) {
Out << "))";