diff options
author | Volkan Keles <vkeles@apple.com> | 2017-03-07 18:03:28 +0000 |
---|---|---|
committer | Volkan Keles <vkeles@apple.com> | 2017-03-07 18:03:28 +0000 |
commit | 20d3c4200d6151fc10f78e996b36ef078b4be75d (patch) | |
tree | 33f1313e5f2fc0d62279b3580dc6f12280e922f0 /llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | |
parent | 654975b5a643b304f1db133950471b1b55325d6d (diff) | |
download | bcm5719-llvm-20d3c4200d6151fc10f78e996b36ef078b4be75d.tar.gz bcm5719-llvm-20d3c4200d6151fc10f78e996b36ef078b4be75d.zip |
[GlobalISel] Translate floating-point negation
Reviewers: qcolombet, javed.absar, aditya_nandakumar, dsanders, t.p.northover, ab
Reviewed By: qcolombet
Subscribers: dberris, rovka, llvm-commits, kristof.beyls
Differential Revision: https://reviews.llvm.org/D30671
llvm-svn: 297171
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 0470b3af7f5..70333057a76 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -171,6 +171,18 @@ bool IRTranslator::translateBinaryOp(unsigned Opcode, const User &U, return true; } +bool IRTranslator::translateFSub(const User &U, MachineIRBuilder &MIRBuilder) { + // -0.0 - X --> G_FNEG + if (isa<Constant>(U.getOperand(0)) && + U.getOperand(0) == ConstantFP::getZeroValueForNegation(U.getType())) { + MIRBuilder.buildInstr(TargetOpcode::G_FNEG) + .addDef(getOrCreateVReg(U)) + .addUse(getOrCreateVReg(*U.getOperand(1))); + return true; + } + return translateBinaryOp(TargetOpcode::G_FSUB, U, MIRBuilder); +} + bool IRTranslator::translateCompare(const User &U, MachineIRBuilder &MIRBuilder) { const CmpInst *CI = dyn_cast<CmpInst>(&U); |