| // Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package com.android.tools.r8.ir.analysis.framework.intraprocedural; |
| |
| import com.android.tools.r8.ir.code.BasicBlock; |
| import com.android.tools.r8.ir.code.Instruction; |
| |
| /** |
| * A transfer function that defines the abstract semantics of the instructions in the program |
| * according to some abstract state {@link StateType}. |
| */ |
| public interface AbstractTransferFunction<StateType extends AbstractState<StateType>> { |
| |
| TransferFunctionResult<StateType> apply(Instruction instruction, StateType state); |
| |
| default StateType computeBlockEntryState( |
| BasicBlock block, BasicBlock predecessor, StateType predecessorExitState) { |
| return predecessorExitState; |
| } |
| } |