Skip to content

Commit 40166bc

Browse files
committed
[refactor] Created enum for atomic operations and simplified the atomic operations constructors in OCLUnary
1 parent 5729e76 commit 40166bc

File tree

4 files changed

+34
-40
lines changed

4 files changed

+34
-40
lines changed

tornado-drivers/opencl/src/main/java/uk/ac/manchester/tornado/drivers/opencl/graal/compiler/plugins/OCLGraphBuilderPlugins.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import uk.ac.manchester.tornado.api.exceptions.TornadoRuntimeException;
8181
import uk.ac.manchester.tornado.drivers.opencl.graal.OCLArchitecture;
8282
import uk.ac.manchester.tornado.drivers.opencl.graal.lir.OCLKind;
83+
import uk.ac.manchester.tornado.drivers.opencl.graal.lir.OCLUnary;
8384
import uk.ac.manchester.tornado.drivers.opencl.graal.nodes.AtomicAddNodeTemplate;
8485
import uk.ac.manchester.tornado.drivers.opencl.graal.nodes.DecAtomicNode;
8586
import uk.ac.manchester.tornado.drivers.opencl.graal.nodes.GetAtomicNode;
@@ -147,31 +148,31 @@ private static void registerAtomicCall(Registration r, JavaKind returnedJavaKind
147148
r.register(new InvocationPlugin("incrementAndGet", Receiver.class) {
148149
@Override
149150
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
150-
b.addPush(returnedJavaKind, b.append(new IncAtomicNode(receiver.get(), true)));
151+
b.addPush(returnedJavaKind, b.append(new IncAtomicNode(receiver.get(), OCLUnary.AtomicOperator.INCREMENT_AND_GET)));
151152
return true;
152153
}
153154
});
154155

155156
r.register(new InvocationPlugin("getAndIncrement", Receiver.class) {
156157
@Override
157158
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
158-
b.addPush(returnedJavaKind, b.append(new IncAtomicNode(receiver.get())));
159+
b.addPush(returnedJavaKind, b.append(new IncAtomicNode(receiver.get(), OCLUnary.AtomicOperator.GET_AND_INCREMENT)));
159160
return true;
160161
}
161162
});
162163

163164
r.register(new InvocationPlugin("decrementAndGet", Receiver.class) {
164165
@Override
165166
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
166-
b.addPush(returnedJavaKind, b.append(new DecAtomicNode(receiver.get(), true)));
167+
b.addPush(returnedJavaKind, b.append(new DecAtomicNode(receiver.get(), OCLUnary.AtomicOperator.DECREMENT_AND_GET)));
167168
return true;
168169
}
169170
});
170171

171172
r.register(new InvocationPlugin("getAndDecrement", Receiver.class) {
172173
@Override
173174
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
174-
b.addPush(returnedJavaKind, b.append(new DecAtomicNode(receiver.get())));
175+
b.addPush(returnedJavaKind, b.append(new DecAtomicNode(receiver.get(), OCLUnary.AtomicOperator.GET_AND_DECREMENT)));
175176
return true;
176177
}
177178
});

tornado-drivers/opencl/src/main/java/uk/ac/manchester/tornado/drivers/opencl/graal/lir/OCLUnary.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -116,22 +116,20 @@ public String toString() {
116116
}
117117
}
118118

119-
public static class IntrinsicAtomicInc extends UnaryConsumer {
119+
public enum AtomicOperator {
120+
INCREMENT_AND_GET, GET_AND_INCREMENT, DECREMENT_AND_GET, GET_AND_DECREMENT
121+
}
122+
123+
public static class IntrinsicAtomicOperator extends UnaryConsumer {
120124

121125
private static final String arrayName = OCLArchitecture.atomicSpace.getName();
122126
private int index;
123-
private boolean operatorFirst;
127+
private final AtomicOperator atomicOperator;
124128

125-
public IntrinsicAtomicInc(OCLUnaryOp opcode, LIRKind lirKind, Value value, int index) {
129+
public IntrinsicAtomicOperator(OCLUnaryOp opcode, LIRKind lirKind, Value value, int index, AtomicOperator atomicOperator) {
126130
super(opcode, lirKind, value);
127131
this.index = index;
128-
this.operatorFirst = false;
129-
}
130-
131-
public IntrinsicAtomicInc(OCLUnaryOp opcode, LIRKind lirKind, Value value, int index, boolean operatorFirst) {
132-
super(opcode, lirKind, value);
133-
this.index = index;
134-
this.operatorFirst = operatorFirst;
132+
this.atomicOperator = atomicOperator;
135133
}
136134

137135
@Override
@@ -141,14 +139,21 @@ public void emit(OCLCompilationResultBuilder crb, OCLAssembler asm) {
141139

142140
@Override
143141
public String toString() {
144-
if (operatorFirst) {
145-
if (opcode.toString().equals("atomic_inc")) {
142+
switch (atomicOperator) {
143+
case INCREMENT_AND_GET -> {
146144
return String.format("%s(&%s[%s]) + %d", opcode.toString(), arrayName, index, 1);
147-
} else if (opcode.toString().equals("atomic_dec")) {
145+
}
146+
case DECREMENT_AND_GET -> {
148147
return String.format("%s(&%s[%s]) - %d", opcode.toString(), arrayName, index, 1);
149148
}
149+
case GET_AND_INCREMENT -> {
150+
return String.format("%s(&%s[%s])", opcode.toString(), arrayName, index);
151+
}
152+
case GET_AND_DECREMENT -> {
153+
return String.format("%s(&%s[%s])", opcode.toString(), arrayName, index);
154+
}
150155
}
151-
return String.format("%s(&%s[%s])", opcode.toString(), arrayName, index);
156+
return "";
152157
}
153158
}
154159

tornado-drivers/opencl/src/main/java/uk/ac/manchester/tornado/drivers/opencl/graal/nodes/DecAtomicNode.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,12 @@ public class DecAtomicNode extends NodeAtomic implements LIRLowerable {
4444

4545
@Input
4646
ValueNode atomicNode;
47-
boolean decrementsFirst;
47+
OCLUnary.AtomicOperator atomicOperator;
4848

49-
public DecAtomicNode(ValueNode atomicValue, boolean decrementsFirst) {
49+
public DecAtomicNode(ValueNode atomicValue, OCLUnary.AtomicOperator atomicOperator) {
5050
super(TYPE, StampFactory.forKind(JavaKind.Int));
5151
this.atomicNode = atomicValue;
52-
this.decrementsFirst = decrementsFirst;
53-
}
54-
55-
public DecAtomicNode(ValueNode atomicValue) {
56-
super(TYPE, StampFactory.forKind(JavaKind.Int));
57-
this.atomicNode = atomicValue;
58-
this.decrementsFirst = false;
52+
this.atomicOperator = atomicOperator;
5953
}
6054

6155
private void generateExpressionForOpenCL2_0(NodeLIRBuilderTool generator) {
@@ -81,12 +75,12 @@ private void generateExpressionForOpenCL1_0(NodeLIRBuilderTool generator) {
8175

8276
int indexFromGlobal = atomicIntegerNode.getIndexFromGlobalMemory();
8377

84-
OCLUnary.IntrinsicAtomicInc intrinsicAtomicAdd = new OCLUnary.IntrinsicAtomicInc( //
78+
OCLUnary.IntrinsicAtomicOperator intrinsicAtomicAdd = new OCLUnary.IntrinsicAtomicOperator( //
8579
OCLAssembler.OCLUnaryIntrinsic.ATOMIC_DEC, //
8680
tool.getLIRKind(stamp), //
8781
generator.operand(atomicNode), //
8882
indexFromGlobal, //
89-
decrementsFirst);
83+
atomicOperator);
9084

9185
OCLLIRStmt.AssignStmt assignStmt = new OCLLIRStmt.AssignStmt(result, intrinsicAtomicAdd);
9286
tool.append(assignStmt);

tornado-drivers/opencl/src/main/java/uk/ac/manchester/tornado/drivers/opencl/graal/nodes/IncAtomicNode.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,12 @@ public class IncAtomicNode extends NodeAtomic implements LIRLowerable {
4444

4545
@Input
4646
ValueNode atomicNode;
47-
boolean incrementsFirst;
47+
OCLUnary.AtomicOperator atomicOperator;
4848

49-
public IncAtomicNode(ValueNode atomicValue, boolean incrementsFirst) {
49+
public IncAtomicNode(ValueNode atomicValue, OCLUnary.AtomicOperator atomicOperator) {
5050
super(TYPE, StampFactory.forKind(JavaKind.Int));
5151
this.atomicNode = atomicValue;
52-
this.incrementsFirst = incrementsFirst;
53-
}
54-
55-
public IncAtomicNode(ValueNode atomicValue) {
56-
super(TYPE, StampFactory.forKind(JavaKind.Int));
57-
this.atomicNode = atomicValue;
58-
this.incrementsFirst = false;
52+
this.atomicOperator = atomicOperator;
5953
}
6054

6155
@Override
@@ -86,12 +80,12 @@ private void generateExpressionForOpenCL1_0(NodeLIRBuilderTool generator) {
8680

8781
int indexFromGlobal = atomicIntegerNode.getIndexFromGlobalMemory();
8882

89-
OCLUnary.IntrinsicAtomicInc intrinsicAtomicAdd = new OCLUnary.IntrinsicAtomicInc( //
83+
OCLUnary.IntrinsicAtomicOperator intrinsicAtomicAdd = new OCLUnary.IntrinsicAtomicOperator( //
9084
OCLAssembler.OCLUnaryIntrinsic.ATOMIC_INC, //
9185
tool.getLIRKind(stamp), //
9286
generator.operand(atomicNode), //
9387
indexFromGlobal, //
94-
incrementsFirst);
88+
atomicOperator);
9589

9690
OCLLIRStmt.AssignStmt assignStmt = new OCLLIRStmt.AssignStmt(result, intrinsicAtomicAdd);
9791
tool.append(assignStmt);

0 commit comments

Comments
 (0)