25 static ElementalTree buildElementalTree(mlir::Operation ®ionTerminator);
27 bool contains(mlir::Operation *op)
const;
29 std::optional<bool> isOrdered(mlir::Operation *op)
const;
32 void gatherElementalTree(hlfir::ElementalOpInterface elemental,
33 bool isAppliedInOrder);
34 void insert(hlfir::ElementalOpInterface elementalOp,
bool isAppliedInOrder);
58class DetailedEffectInstance {
60 DetailedEffectInstance(mlir::MemoryEffects::Effect *effect,
61 mlir::OpOperand *value =
nullptr,
62 mlir::Value orderedElementalEffectOn =
nullptr);
63 DetailedEffectInstance(mlir::MemoryEffects::EffectInstance effectInstance,
64 mlir::Value orderedElementalEffectOn =
nullptr);
66 static DetailedEffectInstance getArrayReadEffect(mlir::OpOperand *array);
67 static DetailedEffectInstance getArrayWriteEffect(mlir::OpOperand *array);
69 mlir::Value getValue()
const {
return effectInstance.getValue(); }
70 mlir::MemoryEffects::Effect *getEffect()
const {
71 return effectInstance.getEffect();
73 mlir::Value getOrderedElementalEffectOn()
const {
74 return orderedElementalEffectOn;
78 mlir::MemoryEffects::EffectInstance effectInstance;
81 mlir::Value orderedElementalEffectOn;