From 7208616ec0cec33a03565bfe68a923ab300a6e54 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 6 May 2005 02:07:39 +0000 Subject: [PATCH] Implement xor.ll:test22 llvm-svn: 21713 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp index 4d96cbfcceab..6824c345524b 100644 --- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp @@ -3550,6 +3550,15 @@ Instruction *InstCombiner::visitCastInst(CastInst &CI) { ->getOpcode(), Op0c, Op1c); } } + + // cast (xor bool X, true) to int --> xor (cast bool X to int), 1 + if (SrcBitSize == 1 && SrcI->getOpcode() == Instruction::Xor && + Op1 == ConstantBool::True && + (!Op0->hasOneUse() || !isa(Op0))) { + Value *New = InsertOperandCastBefore(Op0, DestTy, &CI); + return BinaryOperator::createXor(New, + ConstantInt::get(CI.getType(), 1)); + } break; case Instruction::Shl: // Allow changing the sign of the source operand. Do not allow changing