From d0bc68e1f40259230329e6709c72af187f72144c Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Wed, 11 Sep 2024 16:29:10 +0000 Subject: riscv64: Add node Rol, fix InstructionBuilder This reverts commit 744830cb242c82c4637e6fb303b36d0371c84979. Reason for revert: updated CHECKer test to use rolw instead of rol. Change-Id: I50e34c6ac69488a9c083f04c6382df4302e8e7d3 --- compiler/optimizing/instruction_simplifier_shared.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'compiler/optimizing/instruction_simplifier_shared.cc') diff --git a/compiler/optimizing/instruction_simplifier_shared.cc b/compiler/optimizing/instruction_simplifier_shared.cc index b7d76da548..7f575c0348 100644 --- a/compiler/optimizing/instruction_simplifier_shared.cc +++ b/compiler/optimizing/instruction_simplifier_shared.cc @@ -316,4 +316,23 @@ bool TryReplaceSubSubWithSubAdd(HSub* last_sub) { } } +void UnfoldRotateLeft(HRol* rol) { + HBasicBlock* block = rol->GetBlock(); + HGraph* graph = block->GetGraph(); + ArenaAllocator* allocator = graph->GetAllocator(); + HRor* ror; + + if (rol->GetRight()->IsConstant()) { + int32_t value = rol->GetRight()->AsIntConstant()->GetValue(); + HIntConstant* negated = graph->GetIntConstant(-value); + ror = new (allocator) HRor(rol->GetType(), rol->GetLeft(), negated); + } else { + HNeg* neg = new (allocator) HNeg(DataType::Type::kInt32, rol->GetRight()); + block->InsertInstructionBefore(neg, rol); + ror = new (allocator) HRor(rol->GetType(), rol->GetLeft(), neg); + } + + block->ReplaceAndRemoveInstructionWith(rol, ror); +} + } // namespace art -- cgit v1.2.3-59-g8ed1b