[LLVMdev] Why there is no unary operator in LLVM?

Fan Dawei fandawei.s at gmail.com
Thu Nov 3 03:45:14 PDT 2011


Hi llvmdev,

I've noticed that there is no unary operator in LLVM. For unary operator
such as Neg or Or operator, the IR builder just creates a binary operation
with one dummy operand,

01823 <http://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#a073c092ce74a122e898e435e60e84599>
BinaryOperator <http://llvm.org/doxygen/classllvm_1_1BinaryOperator.html>
*BinaryOperator::CreateNeg
<http://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#a073c092ce74a122e898e435e60e84599>(Value
<http://llvm.org/doxygen/classllvm_1_1Value.html> *Op, const Twine
<http://llvm.org/doxygen/classllvm_1_1Twine.html> &Name,01824
                                 BasicBlock
<http://llvm.org/doxygen/classllvm_1_1BasicBlock.html> *InsertAtEnd)
{01825   Value <http://llvm.org/doxygen/classllvm_1_1Value.html> *zero
= ConstantFP::getZeroValueForNegation
<http://llvm.org/doxygen/classllvm_1_1ConstantFP.html#ab4d218c572245abd0b1c895d603cba36>(Op->getType
<http://llvm.org/doxygen/classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc>());01826
  return new BinaryOperator
<http://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#acf242c32d995c5276931f545aa2bdd9c>(Instruction::Sub,01827
                            zero, Op,01828
Op->getType <http://llvm.org/doxygen/classllvm_1_1Value.html#a0cf3748dba54f931bb1241ae4adc76bc>(),
Name <http://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#a274586caf47dcc28ed878ad21af28152>,
InsertAtEnd);



However, I think it's more natural to describe this as unary operation, and
may bring benefits to the optimiser and code generator.

Can anyone tell me the reason?

Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111103/1dd6d2ec/attachment.html>


More information about the llvm-dev mailing list