// // This file is distributed under the MIT License. See LICENSE.md for details. // #include "revng/Clift/Clift.h" #include "revng/Clift/CliftOpInterfaces.h" // Prevent reordering: #include "revng/Clift/CliftOpInterfacesBasic.cpp.inc" // Prevent reordering: #include "revng/Clift/CliftOpInterfacesLabel.cpp.inc" // Prevent reordering: #include "revng/Clift/CliftOpInterfacesJump.cpp.inc" // Prevent reordering: #include "revng/Clift/CliftOpInterfacesControlFlow.cpp.inc" // Prevent reordering: #include "revng/Clift/CliftOpInterfacesExpr.cpp.inc" using namespace clift; LabelAssignmentOpInterface clift::impl::getLabelAssignmentOp(mlir::Value Label) { return Label.getDefiningOp().getAssignment(); } bool clift::isLvalueExpression(mlir::Value Value) { if (auto Argument = mlir::dyn_cast(Value)) { mlir::Block *B = Argument.getOwner(); if (B == nullptr) return false; mlir::Operation *Op = B->getParentOp(); if (Op == nullptr) return false; return mlir::isa(Op); } else { mlir::Operation *Op = Value.getDefiningOp(); if (auto ExprOp = mlir::dyn_cast(Value .getDefiningOp())) return ExprOp.isLvalueExpression(); return mlir::isa(Op); } }