From 85af131d9e76e57244c8704792647f173443ffb6 Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Thu, 15 Aug 2002 14:19:22 +0000 Subject: [PATCH] Unary Not (boolean and bitwise) is no longer a separate LLVM instruction but is instead implemented with XOR. Note that the InstrForest opLabels for Not and BNot remain the same, i.e., the XOR is recognized and represented as a (boolean or bitwise) Not when building the instruction trees. But these tree nodes are now binary, not unary. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3343 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/InstrSelection/InstrForest.cpp | 9 +++++++-- lib/Target/SparcV9/InstrSelection/InstrForest.cpp | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/InstrSelection/InstrForest.cpp b/lib/CodeGen/InstrSelection/InstrForest.cpp index d7edf1575b3..c24c35b640b 100644 --- a/lib/CodeGen/InstrSelection/InstrForest.cpp +++ b/lib/CodeGen/InstrSelection/InstrForest.cpp @@ -73,10 +73,15 @@ InstructionNode::InstructionNode(Instruction* I) { opLabel = opLabel + 100; // load/getElem with index vector } + else if (opLabel == Instruction::Xor && + BinaryOperator::isNot(I)) + { + opLabel = (I->getType() == Type::BoolTy)? NotOp // boolean Not operator + : BNotOp; // bitwise Not operator + } else if (opLabel == Instruction::And || opLabel == Instruction::Or || - opLabel == Instruction::Xor || - opLabel == Instruction::Not) + opLabel == Instruction::Xor) { // Distinguish bitwise operators from logical operators! if (I->getType() != Type::BoolTy) diff --git a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp index d7edf1575b3..c24c35b640b 100644 --- a/lib/Target/SparcV9/InstrSelection/InstrForest.cpp +++ b/lib/Target/SparcV9/InstrSelection/InstrForest.cpp @@ -73,10 +73,15 @@ InstructionNode::InstructionNode(Instruction* I) { opLabel = opLabel + 100; // load/getElem with index vector } + else if (opLabel == Instruction::Xor && + BinaryOperator::isNot(I)) + { + opLabel = (I->getType() == Type::BoolTy)? NotOp // boolean Not operator + : BNotOp; // bitwise Not operator + } else if (opLabel == Instruction::And || opLabel == Instruction::Or || - opLabel == Instruction::Xor || - opLabel == Instruction::Not) + opLabel == Instruction::Xor) { // Distinguish bitwise operators from logical operators! if (I->getType() != Type::BoolTy)