24
24
*/
25
25
package com .oracle .svm .core .graal .nodes ;
26
26
27
+ import org .graalvm .nativeimage .IsolateThread ;
28
+ import org .graalvm .word .LocationIdentity ;
29
+
30
+ import com .oracle .svm .core .FrameAccess ;
31
+ import com .oracle .svm .core .ReservedRegisters ;
32
+
27
33
import jdk .graal .compiler .core .common .type .StampFactory ;
28
34
import jdk .graal .compiler .graph .NodeClass ;
29
35
import jdk .graal .compiler .lir .gen .LIRGeneratorTool ;
36
+ import jdk .graal .compiler .nodeinfo .InputType ;
30
37
import jdk .graal .compiler .nodeinfo .NodeCycles ;
31
38
import jdk .graal .compiler .nodeinfo .NodeInfo ;
32
39
import jdk .graal .compiler .nodeinfo .NodeSize ;
33
40
import jdk .graal .compiler .nodes .FixedWithNextNode ;
34
41
import jdk .graal .compiler .nodes .ValueNode ;
42
+ import jdk .graal .compiler .nodes .memory .SingleMemoryKill ;
35
43
import jdk .graal .compiler .nodes .spi .LIRLowerable ;
36
44
import jdk .graal .compiler .nodes .spi .NodeLIRBuilderTool ;
37
- import org .graalvm .nativeimage .IsolateThread ;
38
45
39
- import com .oracle .svm .core .FrameAccess ;
40
- import com .oracle .svm .core .ReservedRegisters ;
41
-
42
- @ NodeInfo (cycles = NodeCycles .CYCLES_1 , size = NodeSize .SIZE_1 )
43
- public class WriteCurrentVMThreadNode extends FixedWithNextNode implements LIRLowerable {
46
+ @ NodeInfo (cycles = NodeCycles .CYCLES_1 , size = NodeSize .SIZE_1 , allowedUsageTypes = InputType .Memory )
47
+ public class WriteCurrentVMThreadNode extends FixedWithNextNode implements LIRLowerable , SingleMemoryKill {
44
48
public static final NodeClass <WriteCurrentVMThreadNode > TYPE = NodeClass .create (WriteCurrentVMThreadNode .class );
45
49
46
50
@ Input protected ValueNode value ;
@@ -58,4 +62,13 @@ public void generate(NodeLIRBuilderTool gen) {
58
62
59
63
@ NodeIntrinsic
60
64
public static native void writeCurrentVMThread (IsolateThread value );
65
+
66
+ /**
67
+ * Kill memory to keep memory accesses that use this register as a base from floating across
68
+ * changes of this register.
69
+ */
70
+ @ Override
71
+ public LocationIdentity getKilledLocationIdentity () {
72
+ return LocationIdentity .any ();
73
+ }
61
74
}
0 commit comments