Class AArch64NodeMatchRules
java.lang.Object
jdk.graal.compiler.core.gen.NodeMatchRules
jdk.graal.compiler.core.aarch64.AArch64NodeMatchRules
-
Field Summary
Fields inherited from class jdk.graal.compiler.core.gen.NodeMatchRules
gen
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddSubShift
(BinaryNode binary, ValueNode a, BinaryNode shift) Goal: Use AArch64 binary shift add/sub ops to fold shift.bitFieldMove
(BinaryNode rshift, LeftShiftNode lshift, ValueNode value) Goal: Use AArch64's bit field insert/extract instructions to copy over desired bits.final ComplexMatchResult
bitwiseLogicNot
(BinaryNode logic, NotNode not) Goal: use AArch64's and not (bic) & or not (orn) instructions.bitwiseNotXor
(ValueNode value1, ValueNode value2) Goal: Use AArch64's bitwise exclusive or not (eon) instruction.checkNegativeAndBranch
(IfNode root, IntegerLessThanNode lessNode, ValueNode x, ConstantNode y) Goal: Transform (if x < 0) -> (tbz x, sizeOfBits(x) - 1, label).protected ComplexMatchResult
emitBinaryShift
(AArch64ArithmeticOp op, ValueNode value, ShiftNode<?> shift) Goal: Fold zero extend and (optional) shift into AArch64 add/sub (extended register) instruction.final ComplexMatchResult
Goal: Use directly AArch64's single-precision fsqrt op.protected AArch64ArithmeticLIRGenerator
protected jdk.vm.ci.aarch64.AArch64Kind
getMemoryKind
(MemoryAccess access) protected LIRFrameState
getState
(MemoryAccess access) protected boolean
isNumericFloat
(ValueNode... values) Checks whether all arguments are numeric floats.protected boolean
isNumericInteger
(ValueNode... values) Checks whether all arguments are numeric integers.logicShift
(BinaryNode binary, ValueNode a, BinaryNode shift) Goal: Use AArch64 binary shift logic ops to fold shift.mergeDowncastIntoAddSub
(BinaryNode op, ValueNode x, ValueNode y, ConstantNode constant) Goal: Use AArch64's add/sub (extended register) instructions to fold in and operand.mergePairShiftIntoAddSub
(BinaryNode op, RightShiftNode signExt, ValueNode x, ValueNode y) Goal: Switch ((x << amt) >> amt) into a sign extend and fold into AArch64 add/sub (extended register) instruction.mergeShiftDowncastIntoAddSub
(BinaryNode op, LeftShiftNode lshift, ConstantNode constant, ValueNode x, ValueNode y) Goal: Use AArch64's add/sub (extended register) instructions to fold away the and operation (into a zero extend) and shift of left operand.mergeShiftedPairShiftIntoAddSub
(BinaryNode op, LeftShiftNode outerShift, RightShiftNode signExt, ValueNode x, ValueNode y) Goal: Fold ((x << amt) >> amt) << [0,4] into AArch64 add/sub (extended register) instruction with a sign extend and a shift.mergeSignExtendByShiftIntoAddSub
(BinaryNode op, LeftShiftNode lshift, ValueNode ext, ValueNode x, ValueNode y) Goal: Use AArch64's add/sub (extended register) instructions to fold away extend and shift of left operand.mergeSignExtendIntoAddSub
(BinaryNode op, UnaryNode ext, ValueNode x, ValueNode y) Goal: Use AArch64's add/sub (extended register) instruction.final ComplexMatchResult
multiplyAddSub
(BinaryNode binary, ValueNode a, ValueNode b, ValueNode c) Goal: Use AArch64's multiply-add (madd) and multiply-subtract (msub) instructions.final ComplexMatchResult
multiplyNegate
(ValueNode a, ValueNode b) Goal: Use AArch64's multiple-negate (mneg) instruction.negShift
(BinaryNode shift, ValueNode a, ConstantNode b) Goal: fold shift into negate operation using AArch64's sub (shifted register) instruction.normalizedIntegerCompare
(ValueNode x, ValueNode y, ConstantNode cm1, ConstantNode c0, ConstantNode c1) rotationConstant
(ValueNode op, ValueNode x, ValueNode y, ValueNode src) Goal: Use AArch64's ror instruction for rotations.rotationExpander
(ValueNode src, ValueNode shiftAmount, ValueNode x, ValueNode y) Goal: Use AArch64's ror instruction for rotations.signedBitField
(LeftShiftNode shift, ValueNode value) Goal: Use AArch64's signed bitfield insert in zeros (sbfiz) instruction to extract desired bits while folding away sign extend.signedMultiplyAddSubLong
(BinaryNode binary, MulNode mul, ValueNode a, ValueNode b, ValueNode c) Goal: use AArch64's (i32,i32) -> i64 multiply instructions to fold away sign extensions.signedMultiplyLong
(MulNode mul, ValueNode a, ValueNode b) Goal: use AArch64's (i32,i32) -> i64 multiply instructions to fold away sign extensions.signedMultiplyNegLong
(MulNode mul, SignExtendNode ext1, SignExtendNode ext2, ValueNode a, ValueNode b) Goal: use AArch64's (i32,i32) -> i64 multiply instructions to fold away sign extensions.testBitAndBranch
(IfNode root, ValueNode value, ConstantNode a) Goal: Transform ((x & (1 << n)) == 0) -> (tbz/tbnz n label).unsignedBitField
(BinaryNode shift, ValueNode value, ConstantNode a) Goal: Use AArch64's bit unsigned field insert/extract (UBFIZ/UBFX) instructions to copy over desired bits.unsignedExtBitField
(ZeroExtendNode extend, BinaryNode shift, ValueNode value, ConstantNode a) Goal: Use AArch64's bit unsigned field insert/extract (UBFIZ/UBFX) instructions to copy over desired bits.Methods inherited from class jdk.graal.compiler.core.gen.NodeMatchRules
append, getLIRBlock, operand, state
-
Constructor Details
-
AArch64NodeMatchRules
-
-
Method Details
-
isNumericInteger
Checks whether all arguments are numeric integers. -
isNumericFloat
Checks whether all arguments are numeric floats. -
getState
-
getMemoryKind
-
emitBinaryShift
protected ComplexMatchResult emitBinaryShift(AArch64ArithmeticOp op, ValueNode value, ShiftNode<?> shift) -
mergeSignExtendByShiftIntoAddSub
public ComplexMatchResult mergeSignExtendByShiftIntoAddSub(BinaryNode op, LeftShiftNode lshift, ValueNode ext, ValueNode x, ValueNode y) Goal: Use AArch64's add/sub (extended register) instructions to fold away extend and shift of left operand. -
mergeShiftDowncastIntoAddSub
public ComplexMatchResult mergeShiftDowncastIntoAddSub(BinaryNode op, LeftShiftNode lshift, ConstantNode constant, ValueNode x, ValueNode y) Goal: Use AArch64's add/sub (extended register) instructions to fold away the and operation (into a zero extend) and shift of left operand. -
mergePairShiftIntoAddSub
public ComplexMatchResult mergePairShiftIntoAddSub(BinaryNode op, RightShiftNode signExt, ValueNode x, ValueNode y) Goal: Switch ((x << amt) >> amt) into a sign extend and fold into AArch64 add/sub (extended register) instruction. -
mergeShiftedPairShiftIntoAddSub
public ComplexMatchResult mergeShiftedPairShiftIntoAddSub(BinaryNode op, LeftShiftNode outerShift, RightShiftNode signExt, ValueNode x, ValueNode y) Goal: Fold ((x << amt) >> amt) << [0,4] into AArch64 add/sub (extended register) instruction with a sign extend and a shift. -
extendedPointerAddShift
Goal: Fold zero extend and (optional) shift into AArch64 add/sub (extended register) instruction. -
unsignedBitField
Goal: Use AArch64's bit unsigned field insert/extract (UBFIZ/UBFX) instructions to copy over desired bits. -
unsignedExtBitField
public ComplexMatchResult unsignedExtBitField(ZeroExtendNode extend, BinaryNode shift, ValueNode value, ConstantNode a) Goal: Use AArch64's bit unsigned field insert/extract (UBFIZ/UBFX) instructions to copy over desired bits. -
signedBitField
Goal: Use AArch64's signed bitfield insert in zeros (sbfiz) instruction to extract desired bits while folding away sign extend. -
bitFieldMove
Goal: Use AArch64's bit field insert/extract instructions to copy over desired bits. -
rotationConstant
Goal: Use AArch64's ror instruction for rotations. -
rotationExpander
public ComplexMatchResult rotationExpander(ValueNode src, ValueNode shiftAmount, ValueNode x, ValueNode y) Goal: Use AArch64's ror instruction for rotations. -
addSubShift
Goal: Use AArch64 binary shift add/sub ops to fold shift. -
logicShift
Goal: Use AArch64 binary shift logic ops to fold shift. -
negShift
Goal: fold shift into negate operation using AArch64's sub (shifted register) instruction. -
bitwiseLogicNot
Goal: use AArch64's and not (bic) & or not (orn) instructions. -
bitwiseNotXor
Goal: Use AArch64's bitwise exclusive or not (eon) instruction. Note that !(A^B) == (!A)^B == A^(!B). -
signedMultiplyAddSubLong
public ComplexMatchResult signedMultiplyAddSubLong(BinaryNode binary, MulNode mul, ValueNode a, ValueNode b, ValueNode c) Goal: use AArch64's (i32,i32) -> i64 multiply instructions to fold away sign extensions. -
signedMultiplyNegLong
public ComplexMatchResult signedMultiplyNegLong(MulNode mul, SignExtendNode ext1, SignExtendNode ext2, ValueNode a, ValueNode b) Goal: use AArch64's (i32,i32) -> i64 multiply instructions to fold away sign extensions. -
signedMultiplyLong
Goal: use AArch64's (i32,i32) -> i64 multiply instructions to fold away sign extensions. -
mergeDowncastIntoAddSub
public ComplexMatchResult mergeDowncastIntoAddSub(BinaryNode op, ValueNode x, ValueNode y, ConstantNode constant) Goal: Use AArch64's add/sub (extended register) instructions to fold in and operand. -
mergeSignExtendIntoAddSub
public ComplexMatchResult mergeSignExtendIntoAddSub(BinaryNode op, UnaryNode ext, ValueNode x, ValueNode y) Goal: Use AArch64's add/sub (extended register) instruction. -
multiplyNegate
Goal: Use AArch64's multiple-negate (mneg) instruction. -
multiplyAddSub
public final ComplexMatchResult multiplyAddSub(BinaryNode binary, ValueNode a, ValueNode b, ValueNode c) Goal: Use AArch64's multiply-add (madd) and multiply-subtract (msub) instructions. -
testBitAndBranch
Goal: Transform ((x & (1 << n)) == 0) -> (tbz/tbnz n label). -
checkNegativeAndBranch
public ComplexMatchResult checkNegativeAndBranch(IfNode root, IntegerLessThanNode lessNode, ValueNode x, ConstantNode y) Goal: Transform (if x < 0) -> (tbz x, sizeOfBits(x) - 1, label). -
floatSqrt
Goal: Use directly AArch64's single-precision fsqrt op. -
normalizedIntegerCompare
public ComplexMatchResult normalizedIntegerCompare(ValueNode x, ValueNode y, ConstantNode cm1, ConstantNode c0, ConstantNode c1) -
getLIRGeneratorTool
- Overrides:
getLIRGeneratorTool
in classNodeMatchRules
-
getArithmeticLIRGenerator
-