summaryrefslogtreecommitdiff
path: root/compiler/optimizing/select_generator.h
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2025-01-10 13:27:45 +0000
committer VladimĂ­r Marko <vmarko@google.com> 2025-01-17 05:55:04 -0800
commitf5cca5b0592fdb9ecc836dc9158ba5d63e0c1c05 (patch)
tree176eddeec6da7e7747a3128c054fc96f2b32a18d /compiler/optimizing/select_generator.h
parentb3e84e14c630ffff276a217d77fb8890b1bb58a1 (diff)
Optimizing: Rename `HSelectGenerator`...
... to `HCodeFlowSimplifier` in preparation for adding more optimizations to this pass. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Change-Id: Icb05c3455d93a7b939f82ced9b08165e533bb21a
Diffstat (limited to 'compiler/optimizing/select_generator.h')
-rw-r--r--compiler/optimizing/select_generator.h120
1 files changed, 0 insertions, 120 deletions
diff --git a/compiler/optimizing/select_generator.h b/compiler/optimizing/select_generator.h
deleted file mode 100644
index 7aa0803d89..0000000000
--- a/compiler/optimizing/select_generator.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This optimization recognizes the common diamond selection pattern and
- * replaces it with an instance of the HSelect instruction.
- *
- * Recognized patterns:
- *
- * If [ Condition ]
- * / \
- * false branch true branch
- * \ /
- * Phi [FalseValue, TrueValue]
- *
- * and
- *
- * If [ Condition ]
- * / \
- * false branch true branch
- * return FalseValue return TrueValue
- *
- * The pattern will be simplified if `true_branch` and `false_branch` each
- * contain at most one instruction without any side effects.
- *
- * Blocks are merged into one and Select replaces the If and the Phi.
- *
- * For the first pattern it simplifies to:
- *
- * true branch
- * false branch
- * Select [FalseValue, TrueValue, Condition]
- *
- * For the second pattern it simplifies to:
- *
- * true branch
- * false branch
- * return Select [FalseValue, TrueValue, Condition]
- *
- * Note: In order to recognize no side-effect blocks, this optimization must be
- * run after the instruction simplifier has removed redundant suspend checks.
- */
-
-#ifndef ART_COMPILER_OPTIMIZING_SELECT_GENERATOR_H_
-#define ART_COMPILER_OPTIMIZING_SELECT_GENERATOR_H_
-
-#include "base/macros.h"
-#include "base/scoped_arena_containers.h"
-#include "optimization.h"
-#include "optimizing/nodes.h"
-
-namespace art HIDDEN {
-
-class HSelectGenerator : public HOptimization {
- public:
- HSelectGenerator(HGraph* graph,
- OptimizingCompilerStats* stats,
- const char* name = kSelectGeneratorPassName);
-
- bool Run() override;
-
- static constexpr const char* kSelectGeneratorPassName = "select_generator";
-
- private:
- bool TryGenerateSelectSimpleDiamondPattern(HBasicBlock* block,
- ScopedArenaSafeMap<HInstruction*, HSelect*>* cache);
-
- // When generating code for nested ternary operators (e.g. `return (x > 100) ? 100 : ((x < -100) ?
- // -100 : x);`), a dexer can generate a double diamond pattern but it is not a clear cut one due
- // to the merging of the blocks. `TryFixupDoubleDiamondPattern` recognizes that pattern and fixes
- // up the graph to have a clean double diamond that `TryGenerateSelectSimpleDiamondPattern` can
- // use to generate selects.
- //
- // In ASCII, it turns:
- //
- // 1 (outer if)
- // / \
- // 2 3 (inner if)
- // | / \
- // | 4 5
- // \/ |
- // 6 |
- // \ |
- // 7
- // |
- // 8
- // into:
- // 1 (outer if)
- // / \
- // 2 3 (inner if)
- // | / \
- // | 4 5
- // \/ /
- // 6
- // |
- // 8
- //
- // In short, block 7 disappears and we merge 6 and 7. Now we have a diamond with {3,4,5,6}, and
- // when that gets resolved we get another one with the outer if.
- HBasicBlock* TryFixupDoubleDiamondPattern(HBasicBlock* block);
-
- DISALLOW_COPY_AND_ASSIGN(HSelectGenerator);
-};
-
-} // namespace art
-
-#endif // ART_COMPILER_OPTIMIZING_SELECT_GENERATOR_H_